diff options
Diffstat (limited to 'quickstep')
15 files changed, 77 insertions, 27 deletions
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsUiFactory.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsUiFactory.java index 8d5ac5094..6ecf1c11b 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsUiFactory.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsUiFactory.java @@ -46,6 +46,7 @@ import com.android.launcher3.util.UiThreadHelper; import com.android.launcher3.util.UiThreadHelper.AsyncCommand; import com.android.quickstep.SysUINavigationMode; import com.android.quickstep.SysUINavigationMode.Mode; +import com.android.quickstep.TouchInteractionService; import com.android.quickstep.views.RecentsView; import com.android.systemui.shared.system.WindowManagerWrapper; @@ -184,6 +185,13 @@ public abstract class RecentsUiFactory { } /** + * Clears the swipe shared state for the current swipe gesture. + */ + public static void clearSwipeSharedState(boolean finishAnimation) { + TouchInteractionService.getSwipeSharedState().clearAllState(finishAnimation); + } + + /** * Recents logic that triggers when launcher state changes or launcher activity stops/resumes. * * @param launcher the launcher activity diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java index d14de70c5..5ee08c12d 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java @@ -81,7 +81,8 @@ public class BackgroundAppState extends OverviewState { @Override public int getVisibleElements(Launcher launcher) { - return super.getVisibleElements(launcher) & ~RECENTS_CLEAR_ALL_BUTTON; + return super.getVisibleElements(launcher) + & ~RECENTS_CLEAR_ALL_BUTTON & ~VERTICAL_SWIPE_INDICATOR; } @Override diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java index cdc271fdd..6c9f46fc4 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java @@ -57,6 +57,8 @@ public class QuickSwitchState extends BackgroundAppState { if (!success) { launcher.getStateManager().goToState(OVERVIEW); tasktolaunch.notifyTaskLaunchFailed(TAG); + } else { + launcher.getStateManager().moveToRestState(); } }, new Handler(Looper.getMainLooper())); } else { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityControllerHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityControllerHelper.java index 4ae6d87b8..c43155b73 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityControllerHelper.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityControllerHelper.java @@ -230,4 +230,9 @@ public final class FallbackActivityControllerHelper implements // TODO: probably go back to overview instead. activity.<RecentsView>getOverviewPanel().startHome(); } + + @Override + public void onLaunchTaskSuccess(RecentsActivity activity) { + activity.onTaskLaunched(); + } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java index 07c049642..b2a71a488 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java @@ -488,4 +488,9 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe public void onLaunchTaskFailed(Launcher launcher) { launcher.getStateManager().goToState(OVERVIEW); } + + @Override + public void onLaunchTaskSuccess(Launcher launcher) { + launcher.getStateManager().moveToRestState(); + } }
\ No newline at end of file diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java index 32a92618a..fc29a5663 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java @@ -177,4 +177,8 @@ public final class RecentsActivity extends BaseRecentsActivity { super.onStart(); mFallbackRecentsView.resetTaskVisuals(); } + + public void onTaskLaunched() { + mFallbackRecentsView.resetTaskVisuals(); + } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/SwipeSharedState.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/SwipeSharedState.java index 6689ce3d7..c55f656df 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/SwipeSharedState.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/SwipeSharedState.java @@ -72,13 +72,15 @@ public class SwipeSharedState implements SwipeAnimationListener { mLastAnimationRunning = false; } - private void clearListenerState() { + private void clearListenerState(boolean finishAnimation) { if (mRecentsAnimationListener != null) { mRecentsAnimationListener.removeListener(this); mRecentsAnimationListener.cancelListener(); if (mLastAnimationRunning && mLastAnimationTarget != null) { Utilities.postAsyncCallback(MAIN_THREAD_EXECUTOR.getHandler(), - mLastAnimationTarget::cancelAnimation); + finishAnimation + ? mLastAnimationTarget::finishAnimation + : mLastAnimationTarget::cancelAnimation); mLastAnimationTarget = null; } } @@ -106,7 +108,7 @@ public class SwipeSharedState implements SwipeAnimationListener { } } - clearListenerState(); + clearListenerState(false /* finishAnimation */); boolean shouldMinimiseSplitScreen = mOverviewComponentObserver == null ? false : mOverviewComponentObserver.getActivityControlHelper().shouldMinimizeSplitScreen(); mRecentsAnimationListener = new RecentsAnimationListenerSet( @@ -138,8 +140,8 @@ public class SwipeSharedState implements SwipeAnimationListener { mLastAnimationTarget = mLastAnimationTarget.cloneWithoutTargets(); } - public void clearAllState() { - clearListenerState(); + public void clearAllState(boolean finishAnimation) { + clearListenerState(finishAnimation); canGestureBeContinued = false; recentsAnimationFinishInterrupted = false; nextRunningTaskId = -1; diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java index 8f08f0de9..53da0f92d 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java @@ -225,14 +225,18 @@ public class TouchInteractionService extends Service implements }; private static boolean sConnected = false; + private static final SwipeSharedState sSwipeSharedState = new SwipeSharedState(); public static boolean isConnected() { return sConnected; } - private final SwipeSharedState mSwipeSharedState = new SwipeSharedState(); + public static SwipeSharedState getSwipeSharedState() { + return sSwipeSharedState; + } + private final InputConsumer mResetGestureInputConsumer = - new ResetGestureInputConsumer(mSwipeSharedState); + new ResetGestureInputConsumer(sSwipeSharedState); private ActivityManagerWrapper mAM; private RecentsModel mRecentsModel; @@ -436,7 +440,7 @@ public class TouchInteractionService extends Service implements mInputConsumer = InputConsumerController.getRecentsAnimationInputConsumer(); mIsUserUnlocked = true; - mSwipeSharedState.setOverviewComponentObserver(mOverviewComponentObserver); + sSwipeSharedState.setOverviewComponentObserver(mOverviewComponentObserver); mInputConsumer.registerInputConsumer(); onSystemUiProxySet(); onSystemUiFlagsChanged(); @@ -589,7 +593,7 @@ public class TouchInteractionService extends Service implements private InputConsumer newBaseConsumer(boolean useSharedState, MotionEvent event) { final RunningTaskInfo runningTaskInfo = mAM.getRunningTask(0); if (!useSharedState) { - mSwipeSharedState.clearAllState(); + sSwipeSharedState.clearAllState(false /* finishAnimation */); } if ((mSystemUiStateFlags & SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED) != 0) { // This handles apps showing over the lockscreen (e.g. camera) @@ -599,16 +603,16 @@ public class TouchInteractionService extends Service implements final ActivityControlHelper activityControl = mOverviewComponentObserver.getActivityControlHelper(); - if (runningTaskInfo == null && !mSwipeSharedState.goingToLauncher - && !mSwipeSharedState.recentsAnimationFinishInterrupted) { + if (runningTaskInfo == null && !sSwipeSharedState.goingToLauncher + && !sSwipeSharedState.recentsAnimationFinishInterrupted) { return mResetGestureInputConsumer; - } else if (mSwipeSharedState.recentsAnimationFinishInterrupted) { + } else if (sSwipeSharedState.recentsAnimationFinishInterrupted) { // If the finish animation was interrupted, then continue using the other activity input // consumer but with the next task as the running task RunningTaskInfo info = new ActivityManager.RunningTaskInfo(); - info.id = mSwipeSharedState.nextRunningTaskId; + info.id = sSwipeSharedState.nextRunningTaskId; return createOtherActivityInputConsumer(event, info); - } else if (mSwipeSharedState.goingToLauncher || activityControl.isResumed()) { + } else if (sSwipeSharedState.goingToLauncher || activityControl.isResumed()) { return createOverviewInputConsumer(event); } else if (ENABLE_QUICKSTEP_LIVE_TILE.get() && activityControl.isInLiveTileMode()) { return createOverviewInputConsumer(event); @@ -617,7 +621,7 @@ public class TouchInteractionService extends Service implements return mResetGestureInputConsumer; } else if (mMode == Mode.NO_BUTTON && !mOverviewComponentObserver.isHomeAndOverviewSame()) { return new FallbackNoButtonInputConsumer(this, activityControl, - mInputMonitorCompat, mSwipeSharedState, mSwipeTouchRegion, + mInputMonitorCompat, sSwipeSharedState, mSwipeTouchRegion, mOverviewComponentObserver, disableHorizontalSwipe(event), runningTaskInfo); } else { return createOtherActivityInputConsumer(event, runningTaskInfo); @@ -640,13 +644,13 @@ public class TouchInteractionService extends Service implements return new OtherActivityInputConsumer(this, runningTaskInfo, mRecentsModel, mOverviewComponentObserver.getOverviewIntent(), activityControl, shouldDefer, mOverviewCallbacks, mInputConsumer, this::onConsumerInactive, - mSwipeSharedState, mInputMonitorCompat, mSwipeTouchRegion, + sSwipeSharedState, mInputMonitorCompat, mSwipeTouchRegion, disableHorizontalSwipe(event)); } private InputConsumer createDeviceLockedInputConsumer(RunningTaskInfo taskInfo) { if (mMode == Mode.NO_BUTTON && taskInfo != null) { - return new DeviceLockedInputConsumer(this, mSwipeSharedState, mInputMonitorCompat, + return new DeviceLockedInputConsumer(this, sSwipeSharedState, mInputMonitorCompat, mSwipeTouchRegion, taskInfo.taskId); } else { return mResetGestureInputConsumer; @@ -661,7 +665,7 @@ public class TouchInteractionService extends Service implements return mResetGestureInputConsumer; } - if (activity.getRootView().hasWindowFocus() || mSwipeSharedState.goingToLauncher) { + if (activity.getRootView().hasWindowFocus() || sSwipeSharedState.goingToLauncher) { return new OverviewInputConsumer(activity, mInputMonitorCompat, false /* startingInActivityBounds */); } else { @@ -708,7 +712,7 @@ public class TouchInteractionService extends Service implements + mOverviewComponentObserver.getActivityControlHelper().isResumed()); pw.println(" useSharedState=" + mConsumer.useSharedSwipeState()); if (mConsumer.useSharedSwipeState()) { - mSwipeSharedState.dump(" ", pw); + sSwipeSharedState.dump(" ", pw); } pw.println(" mConsumer=" + mConsumer.getName()); pw.println("FeatureFlags:"); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java index e9aa6d078..f1d1141bc 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -1259,6 +1259,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> mActivityControlHelper.onLaunchTaskFailed(mActivity); nextTask.notifyTaskLaunchFailed(TAG); updateSysUiFlags(1 /* windowProgress == overview */); + } else { + mActivityControlHelper.onLaunchTaskSuccess(mActivity); } }, mMainThreadHandler); doLogGesture(NEW_TASK); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/ResetGestureInputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/ResetGestureInputConsumer.java index 56cba2192..8eede81b8 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/ResetGestureInputConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/ResetGestureInputConsumer.java @@ -39,7 +39,7 @@ public class ResetGestureInputConsumer implements InputConsumer { public void onMotionEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN && mSwipeSharedState.getActiveListener() != null) { - mSwipeSharedState.clearAllState(); + mSwipeSharedState.clearAllState(false /* finishAnimation */); } } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/SwipeAnimationTargetSet.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/SwipeAnimationTargetSet.java index df9efa247..381c27a28 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/SwipeAnimationTargetSet.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/SwipeAnimationTargetSet.java @@ -106,6 +106,10 @@ public class SwipeAnimationTargetSet extends RemoteAnimationTargetSet { finishController(false /* toRecents */, null, false /* sendUserLeaveHint */); } + public void finishAnimation() { + finishController(true /* toRecents */, null, false /* sendUserLeaveHint */); + } + public interface SwipeAnimationListener { void onRecentsAnimationStart(SwipeAnimationTargetSet targetSet); diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index 71259fd7a..b0968f94c 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -38,7 +38,7 @@ <dimen name="motion_pause_detector_speed_very_slow">0.0285dp</dimen> <dimen name="motion_pause_detector_speed_slow">0.15dp</dimen> <dimen name="motion_pause_detector_speed_somewhat_fast">0.285dp</dimen> - <dimen name="motion_pause_detector_speed_fast">0.5dp</dimen> + <dimen name="motion_pause_detector_speed_fast">1.4dp</dimen> <dimen name="motion_pause_detector_min_displacement_from_app">36dp</dimen> <!-- Launcher app transition --> diff --git a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java index 864316095..44324cb2e 100644 --- a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java @@ -765,7 +765,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans LauncherAnimationRunner.AnimationResult result) { if (!mLauncher.hasBeenResumed()) { // If launcher is not resumed, wait until new async-frame after resume - mLauncher.setOnResumeCallback(() -> + mLauncher.addOnResumeCallback(() -> postAsyncCallback(mHandler, () -> onCreateAnimation(targetCompats, result))); return; diff --git a/quickstep/src/com/android/quickstep/ActivityControlHelper.java b/quickstep/src/com/android/quickstep/ActivityControlHelper.java index 8675c3e02..cd2c9cb1b 100644 --- a/quickstep/src/com/android/quickstep/ActivityControlHelper.java +++ b/quickstep/src/com/android/quickstep/ActivityControlHelper.java @@ -95,6 +95,8 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> { void onLaunchTaskFailed(T activity); + void onLaunchTaskSuccess(T activity); + interface ActivityInitListener { void register(); diff --git a/quickstep/src/com/android/quickstep/views/ShelfScrimView.java b/quickstep/src/com/android/quickstep/views/ShelfScrimView.java index b6ddb5fd1..63c8023f6 100644 --- a/quickstep/src/com/android/quickstep/views/ShelfScrimView.java +++ b/quickstep/src/com/android/quickstep/views/ShelfScrimView.java @@ -15,6 +15,7 @@ */ package com.android.quickstep.views; +import static com.android.launcher3.LauncherState.ALL_APPS_HEADER_EXTRA; import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.anim.Interpolators.ACCEL; @@ -29,6 +30,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.Path.Direction; import android.graphics.Path.Op; +import android.graphics.Rect; import android.util.AttributeSet; import android.view.animation.Interpolator; @@ -36,6 +38,7 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.Interpolators; +import com.android.launcher3.uioverrides.states.OverviewState; import com.android.launcher3.util.Themes; import com.android.launcher3.views.ScrimView; import com.android.quickstep.SysUINavigationMode; @@ -145,14 +148,22 @@ public class ShelfScrimView extends ScrimView implements NavigationModeChangeLis mRemainingScreenPathValid = false; mShiftRange = mLauncher.getAllAppsController().getShiftRange(); - mMidProgress = OVERVIEW.getVerticalProgress(mLauncher); - mMidAlpha = mMidProgress >= 1 ? 0 - : Themes.getAttrInteger(getContext(), R.attr.allAppsInterimScrimAlpha); + if ((OVERVIEW.getVisibleElements(mLauncher) & ALL_APPS_HEADER_EXTRA) == 0) { + mMidProgress = 1; + mMidAlpha = 0; + } else { + mMidAlpha = Themes.getAttrInteger(getContext(), R.attr.allAppsInterimScrimAlpha); + Rect hotseatPadding = dp.getHotseatLayoutPadding(); + int hotseatSize = dp.hotseatBarSizePx + dp.getInsets().bottom + - hotseatPadding.bottom - hotseatPadding.top; + float arrowTop = Math.min(hotseatSize, OverviewState.getDefaultSwipeHeight(dp)); + mMidProgress = 1 - (arrowTop / mShiftRange); + } mTopOffset = dp.getInsets().top - mShelfOffset; mShelfTopAtThreshold = mShiftRange * SCRIM_CATCHUP_THRESHOLD + mTopOffset; - updateColors(); } + updateColors(); updateDragHandleAlpha(); invalidate(); } |