mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 23:36:47 +00:00
Merge "Don't create gap between last task and clear all button" into sc-v2-dev am: 3df9de7cd0
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15220572 Change-Id: I9d62767d88a4ffee1807651b78484aea467e2629
This commit is contained in:
@@ -1025,9 +1025,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
if (mRecentsView != null) {
|
||||
int nearestPage = mRecentsView.getDestinationPage();
|
||||
boolean isScrolling = false;
|
||||
// Update page scroll before snapping to page to make sure we snapped to the
|
||||
// position calculated with target gesture in mind.
|
||||
mRecentsView.updateScrollSynchronously();
|
||||
if (mRecentsView.getNextPage() != nearestPage) {
|
||||
// We shouldn't really scroll to the next page when swiping up to recents.
|
||||
// Only allow settling on the next page if it's nearest to the center.
|
||||
@@ -1186,7 +1183,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
mLauncherTransitionController = null;
|
||||
|
||||
if (mRecentsView != null) {
|
||||
mRecentsView.onPrepareGestureEndAnimation(null, mGestureState.getEndTarget());
|
||||
mRecentsView.onPrepareGestureEndAnimation(null, mGestureState.getEndTarget(),
|
||||
mTaskViewSimulator);
|
||||
}
|
||||
} else {
|
||||
AnimatorSet animatorSet = new AnimatorSet();
|
||||
@@ -1228,7 +1226,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
animatorSet.play(windowAnim);
|
||||
if (mRecentsView != null) {
|
||||
mRecentsView.onPrepareGestureEndAnimation(
|
||||
animatorSet, mGestureState.getEndTarget());
|
||||
animatorSet, mGestureState.getEndTarget(), mTaskViewSimulator);
|
||||
}
|
||||
animatorSet.setDuration(duration).setInterpolator(interpolator);
|
||||
animatorSet.start();
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.android.launcher3.statemanager.StateManager.StateListener;
|
||||
import com.android.quickstep.FallbackActivityInterface;
|
||||
import com.android.quickstep.GestureState;
|
||||
import com.android.quickstep.RecentsActivity;
|
||||
import com.android.quickstep.util.TaskViewSimulator;
|
||||
import com.android.quickstep.views.OverviewActionsView;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
import com.android.quickstep.views.SplitPlaceholderView;
|
||||
@@ -89,8 +90,9 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity, RecentsSta
|
||||
*/
|
||||
@Override
|
||||
public void onPrepareGestureEndAnimation(
|
||||
@Nullable AnimatorSet animatorSet, GestureState.GestureEndTarget endTarget) {
|
||||
super.onPrepareGestureEndAnimation(animatorSet, endTarget);
|
||||
@Nullable AnimatorSet animatorSet, GestureState.GestureEndTarget endTarget,
|
||||
TaskViewSimulator taskViewSimulator) {
|
||||
super.onPrepareGestureEndAnimation(animatorSet, endTarget, taskViewSimulator);
|
||||
if (mHomeTaskInfo != null && endTarget == RECENTS && animatorSet != null) {
|
||||
TaskView tv = getTaskView(mHomeTaskInfo.taskId);
|
||||
if (tv != null) {
|
||||
|
||||
@@ -1769,24 +1769,33 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
* Called when a gesture from an app has finished, and an end target has been determined.
|
||||
*/
|
||||
public void onPrepareGestureEndAnimation(
|
||||
@Nullable AnimatorSet animatorSet, GestureState.GestureEndTarget endTarget) {
|
||||
@Nullable AnimatorSet animatorSet, GestureState.GestureEndTarget endTarget,
|
||||
TaskViewSimulator taskViewSimulator) {
|
||||
mCurrentGestureEndTarget = endTarget;
|
||||
if (endTarget == GestureState.GestureEndTarget.RECENTS) {
|
||||
setEnableFreeScroll(true);
|
||||
updateGridProperties();
|
||||
}
|
||||
|
||||
if (mSizeStrategy.stateFromGestureEndTarget(endTarget)
|
||||
.displayOverviewTasksAsGrid(mActivity.getDeviceProfile())) {
|
||||
TaskView runningTaskView = getRunningTaskView();
|
||||
float runningTaskPrimaryGridTranslation = 0;
|
||||
if (indexOfChild(runningTaskView) != getNextPage()) {
|
||||
// Apply the gird translation to running task unless it's being snapped to.
|
||||
runningTaskPrimaryGridTranslation = mOrientationHandler.getPrimaryValue(
|
||||
runningTaskView.getGridTranslationX(),
|
||||
runningTaskView.getGridTranslationY());
|
||||
}
|
||||
if (animatorSet == null) {
|
||||
setGridProgress(1);
|
||||
taskViewSimulator.taskPrimaryTranslation.value = runningTaskPrimaryGridTranslation;
|
||||
} else {
|
||||
animatorSet.play(ObjectAnimator.ofFloat(this, RECENTS_GRID_PROGRESS, 1));
|
||||
animatorSet.play(taskViewSimulator.taskPrimaryTranslation.animateToValue(
|
||||
runningTaskPrimaryGridTranslation));
|
||||
}
|
||||
}
|
||||
mCurrentGestureEndTarget = endTarget;
|
||||
if (endTarget == GestureState.GestureEndTarget.NEW_TASK
|
||||
|| endTarget == GestureState.GestureEndTarget.LAST_TASK) {
|
||||
// When switching to tasks in quick switch, ensures the snapped page's scroll maintain
|
||||
// invariant between quick switch and overview, to ensure a smooth animation transition.
|
||||
updateGridProperties();
|
||||
} else if (endTarget == GestureState.GestureEndTarget.RECENTS) {
|
||||
setEnableFreeScroll(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2073,12 +2082,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
snappedTaskGridTranslationX = gridTranslations[snappedPage - mTaskViewStartIndex];
|
||||
}
|
||||
|
||||
for (int i = 0; i < taskCount; i++) {
|
||||
TaskView taskView = getTaskViewAt(i);
|
||||
taskView.setGridTranslationX(gridTranslations[i] - snappedTaskGridTranslationX
|
||||
+ snappedTaskNonGridScrollAdjustment);
|
||||
}
|
||||
|
||||
// Use the accumulated translation of the row containing the last task.
|
||||
float clearAllAccumulatedTranslation = topSet.contains(taskCount - 1)
|
||||
? topAccumulatedTranslationX : bottomAccumulatedTranslationX;
|
||||
@@ -2121,17 +2124,23 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
// Make sure there are enough space between snapped page and ClearAllButton, for the case
|
||||
// of swiping up after quick switch.
|
||||
if (snappedTaskView != null) {
|
||||
int distanceFromClearAll = longRowWidth - snappedTaskRowWidth;
|
||||
int distanceFromClearAll = longRowWidth - snappedTaskRowWidth + mPageSpacing;
|
||||
// ClearAllButton should be off screen when snapped task is in its snapped position.
|
||||
int minimumDistance =
|
||||
mTaskWidth - snappedTaskView.getLayoutParams().width
|
||||
+ (mLastComputedGridSize.width() - mTaskWidth) / 2;
|
||||
if (distanceFromClearAll < minimumDistance) {
|
||||
int distanceDifference = minimumDistance - distanceFromClearAll;
|
||||
clearAllTotalTranslationX += mIsRtl ? -distanceDifference : distanceDifference;
|
||||
snappedTaskGridTranslationX += mIsRtl ? distanceDifference : -distanceDifference;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < taskCount; i++) {
|
||||
TaskView taskView = getTaskViewAt(i);
|
||||
taskView.setGridTranslationX(gridTranslations[i] - snappedTaskGridTranslationX
|
||||
+ snappedTaskNonGridScrollAdjustment);
|
||||
}
|
||||
|
||||
mClearAllButton.setGridTranslationPrimary(
|
||||
clearAllTotalTranslationX - snappedTaskGridTranslationX);
|
||||
mClearAllButton.setGridScrollOffset(
|
||||
@@ -2860,6 +2869,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
mLastComputedTaskStartPushOutDistance = null;
|
||||
mLastComputedTaskEndPushOutDistance = null;
|
||||
updatePageOffsets();
|
||||
mLiveTileTaskViewSimulator.setScroll(getScrollOffset());
|
||||
setImportantForAccessibility(isModal() ? IMPORTANT_FOR_ACCESSIBILITY_NO
|
||||
: IMPORTANT_FOR_ACCESSIBILITY_AUTO);
|
||||
}
|
||||
@@ -3622,18 +3632,28 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
}
|
||||
|
||||
boolean pageScrollChanged = false;
|
||||
final int childCount = getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
View child = getChildAt(i);
|
||||
float scrollDiff = 0;
|
||||
if (child instanceof TaskView) {
|
||||
scrollDiff = ((TaskView) child).getScrollAdjustment(showAsFullscreen, showAsGrid);
|
||||
} else if (child instanceof ClearAllButton) {
|
||||
scrollDiff = ((ClearAllButton) child).getScrollAdjustment(showAsFullscreen,
|
||||
showAsGrid);
|
||||
}
|
||||
|
||||
final int pageScroll = newPageScrolls[i] + (int) scrollDiff;
|
||||
int clearAllIndex = indexOfChild(mClearAllButton);
|
||||
int clearAllScroll = 0;
|
||||
int clearAllWidth = mOrientationHandler.getPrimarySize(mClearAllButton);
|
||||
if (clearAllIndex != -1 && clearAllIndex < outPageScrolls.length) {
|
||||
float scrollDiff = mClearAllButton.getScrollAdjustment(showAsFullscreen, showAsGrid);
|
||||
clearAllScroll = newPageScrolls[clearAllIndex] + (int) scrollDiff;
|
||||
if (outPageScrolls[clearAllIndex] != clearAllScroll) {
|
||||
pageScrollChanged = true;
|
||||
outPageScrolls[clearAllIndex] = clearAllScroll;
|
||||
}
|
||||
}
|
||||
|
||||
final int taskCount = getTaskViewCount();
|
||||
for (int i = 0; i < taskCount; i++) {
|
||||
TaskView taskView = getTaskViewAt(i);
|
||||
float scrollDiff = taskView.getScrollAdjustment(showAsFullscreen, showAsGrid);
|
||||
int pageScroll = newPageScrolls[i + mTaskViewStartIndex] + (int) scrollDiff;
|
||||
if ((mIsRtl && pageScroll < clearAllScroll)
|
||||
|| (!mIsRtl && pageScroll > clearAllScroll)) {
|
||||
pageScroll = clearAllScroll + (mIsRtl ? clearAllWidth : -clearAllWidth);
|
||||
}
|
||||
if (outPageScrolls[i] != pageScroll) {
|
||||
pageScrollChanged = true;
|
||||
outPageScrolls[i] = pageScroll;
|
||||
|
||||
Reference in New Issue
Block a user