Loading quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +3 −5 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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(); Loading Loading @@ -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(); Loading quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading quickstep/src/com/android/quickstep/views/RecentsView.java +48 −28 Original line number Diff line number Diff line Loading @@ -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); } } /** Loading Loading @@ -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; Loading Loading @@ -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( Loading Loading @@ -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); } Loading Loading @@ -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); 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 pageScroll = newPageScrolls[i] + (int) scrollDiff; 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; Loading Loading
quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +3 −5 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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(); Loading Loading @@ -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(); Loading
quickstep/src/com/android/quickstep/fallback/FallbackRecentsView.java +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading
quickstep/src/com/android/quickstep/views/RecentsView.java +48 −28 Original line number Diff line number Diff line Loading @@ -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); } } /** Loading Loading @@ -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; Loading Loading @@ -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( Loading Loading @@ -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); } Loading Loading @@ -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); 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 pageScroll = newPageScrolls[i] + (int) scrollDiff; 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; Loading