From 1b4e55943a90356a33bbc000da7f84bd0ecf7bb7 Mon Sep 17 00:00:00 2001 From: Tiger Date: Thu, 8 Jun 2023 21:17:26 +0800 Subject: [PATCH] Don't hide the home handle when it is attaching to the app We had the logic in the case of legacy transition. This CL applies it to the shell transition cases. Fix: 286222508 Fix: 283037901 Test: Open Calculator in landscape and drag the home handle up. See if the home handle attaches to the app when dragging. Test: Open Calculator in portrait and swipe home handle up to enter overview screen. See if there is a fade-in animation when home handle is showing at the screen bottom. Change-Id: Ib1321532ebbef57f2d371344f895b9ee3a58a28d --- .../server/wm/AsyncRotationController.java | 2 ++ .../com/android/server/wm/Transition.java | 19 +++++++++++++------ .../server/wm/TransitionController.java | 5 +++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/wm/AsyncRotationController.java b/services/core/java/com/android/server/wm/AsyncRotationController.java index 7e783938d30af..01158779c24f9 100644 --- a/services/core/java/com/android/server/wm/AsyncRotationController.java +++ b/services/core/java/com/android/server/wm/AsyncRotationController.java @@ -185,6 +185,8 @@ class AsyncRotationController extends FadeAnimationController implements Consume } } else if (navigationBarCanMove || mTransitionOp == OP_CHANGE_MAY_SEAMLESS) { action = Operation.ACTION_SEAMLESS; + } else if (mDisplayContent.mTransitionController.mNavigationBarAttachedToApp) { + return; } mTargetWindowTokens.put(w.mToken, new Operation(action)); return; diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index f7550ca2fa8ef..845fc17049164 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -234,9 +234,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { private @TransitionState int mState = STATE_PENDING; private final ReadyTracker mReadyTracker = new ReadyTracker(); - // TODO(b/188595497): remove when not needed. - /** @see RecentsAnimationController#mNavigationBarAttachedToApp */ - private boolean mNavBarAttachedToApp = false; private int mRecentsDisplayId = INVALID_DISPLAY; /** The delay for light bar appearance animation. */ @@ -1780,7 +1777,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { if (navWindow == null || navWindow.mToken == null) { return; } - mNavBarAttachedToApp = true; + mController.mNavigationBarAttachedToApp = true; navWindow.mToken.cancelAnimation(); final SurfaceControl.Transaction t = navWindow.mToken.getPendingTransaction(); final SurfaceControl navSurfaceControl = navWindow.mToken.getSurfaceControl(); @@ -1802,8 +1799,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { /** @see RecentsAnimationController#restoreNavigationBarFromApp */ void legacyRestoreNavigationBarFromApp() { - if (!mNavBarAttachedToApp) return; - mNavBarAttachedToApp = false; + if (!mController.mNavigationBarAttachedToApp) { + return; + } + mController.mNavigationBarAttachedToApp = false; if (mRecentsDisplayId == INVALID_DISPLAY) { Slog.e(TAG, "Reparented navigation bar without a valid display"); @@ -1836,6 +1835,11 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { break; } + final AsyncRotationController asyncRotationController = dc.getAsyncRotationController(); + if (asyncRotationController != null) { + asyncRotationController.accept(navWindow); + } + if (animate) { final NavBarFadeAnimationController controller = new NavBarFadeAnimationController(dc); @@ -1844,6 +1848,9 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { // Reparent the SurfaceControl of nav bar token back. t.reparent(navToken.getSurfaceControl(), parent.getSurfaceControl()); } + + // To apply transactions. + dc.mWmService.scheduleAnimationLocked(); } private void reportStartReasonsToLogger() { diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index 0cb6f14b38f2c..359b353ba336b 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -206,6 +206,11 @@ class TransitionController { */ boolean mBuildingFinishLayers = false; + /** + * Whether the surface of navigation bar token is reparented to an app. + */ + boolean mNavigationBarAttachedToApp = false; + private boolean mAnimatingState = false; final Handler mLoggerHandler = FgThread.getHandler();