From 3974edc46a7f6c027f051e03e8e998b2e23c8a3d Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Mon, 16 Aug 2021 17:39:12 -0700 Subject: [PATCH] Don't draw taskbar background during gestures In this case, the ScrimView for BackgroundAppState will handle drawing behind the whole screen, and prevents taskbar from drawing the rounded corners on top of TaskViews. Added a hack to defer resuming last task by a frame to ensure taskbar is drawing first. Test: Quick switch to an app, ensure it isn't covered by the taskbar's rounded corner Bug: 196257194 Change-Id: Ibc81d80bc3bf1d908e6912b179cbcafbdcc56c0f --- .../taskbar/LauncherTaskbarUIController.java | 7 ++++- .../android/quickstep/AbsSwipeUpHandler.java | 20 +++++++++++--- .../quickstep/BaseActivityInterface.java | 10 +++++++ .../quickstep/LauncherActivityInterface.java | 26 +++++++++++++++++++ 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java index 4c96fbae9d..da10bfb0fa 100644 --- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java @@ -23,6 +23,7 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.graphics.Rect; import android.view.MotionEvent; +import android.view.View; import androidx.annotation.NonNull; @@ -241,7 +242,11 @@ public class LauncherTaskbarUIController extends TaskbarUIController { return mContext.getDragController().isDragging(); } - void setTaskbarViewVisible(boolean isVisible) { + public View getRootView() { + return mTaskbarDragLayer; + } + + private void setTaskbarViewVisible(boolean isVisible) { mIconAlphaForHome.setValue(isVisible ? 1 : 0); mLauncher.getHotseat().setIconsAlpha(isVisible ? 0f : 1f); } diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 42c89fd006..6797fbb032 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -655,8 +655,13 @@ public abstract class AbsSwipeUpHandler, private void onAnimatorPlaybackControllerCreated(AnimatorControllerWithResistance anim) { mLauncherTransitionController = anim; - mLauncherTransitionController.getNormalController().dispatchOnStart(); - updateLauncherTransitionProgress(); + mStateCallback.runOnceAtState(STATE_GESTURE_STARTED, () -> { + // Wait until the gesture is started (touch slop was passed) to start in sync with + // mWindowTransitionController. This ensures we don't hide the taskbar background when + // long pressing to stash it, for instance. + mLauncherTransitionController.getNormalController().dispatchOnStart(); + updateLauncherTransitionProgress(); + }); } public Intent getLaunchIntent() { @@ -885,6 +890,9 @@ public abstract class AbsSwipeUpHandler, // Fast-finish the attaching animation if it's still running. maybeUpdateRecentsAttachedState(false); final GestureEndTarget endTarget = mGestureState.getEndTarget(); + // Wait until the given View (if supplied) draws before resuming the last task. + View postResumeLastTask = mActivityInterface.onSettledOnEndTarget(endTarget); + if (endTarget != NEW_TASK) { InteractionJankMonitorWrapper.cancel( InteractionJankMonitorWrapper.CUJ_QUICK_SWITCH); @@ -893,6 +901,7 @@ public abstract class AbsSwipeUpHandler, InteractionJankMonitorWrapper.cancel( InteractionJankMonitorWrapper.CUJ_APP_CLOSE_TO_HOME); } + switch (endTarget) { case HOME: mStateCallback.setState(STATE_SCALED_CONTROLLER_HOME | STATE_CAPTURE_SCREENSHOT); @@ -907,7 +916,12 @@ public abstract class AbsSwipeUpHandler, mStateCallback.setState(STATE_START_NEW_TASK | STATE_CAPTURE_SCREENSHOT); break; case LAST_TASK: - mStateCallback.setState(STATE_RESUME_LAST_TASK); + if (postResumeLastTask != null) { + ViewUtils.postFrameDrawn(postResumeLastTask, + () -> mStateCallback.setState(STATE_RESUME_LAST_TASK)); + } else { + mStateCallback.setState(STATE_RESUME_LAST_TASK); + } TaskViewUtils.setDividerBarShown(mRecentsAnimationTargets.nonApps, true); break; } diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java index 571ffc23e5..29a069c354 100644 --- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java +++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java @@ -40,6 +40,7 @@ import android.graphics.Rect; import android.os.Build; import android.view.Gravity; import android.view.MotionEvent; +import android.view.View; import androidx.annotation.Nullable; import androidx.annotation.UiThread; @@ -385,6 +386,15 @@ public abstract class BaseActivityInterface