diff options
author | Issei Suzuki <issei@google.com> | 2021-09-01 13:00:35 +0200 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-09-20 22:31:19 +0000 |
commit | 0cf5a35912b13a534a577d7fa63065e76180cd5d (patch) | |
tree | 62ffff9350bfcd9444f1d86348200a1d8e9c8cfa | |
parent | 0a98c32605689453bcf7c61a427f67ebe90260f0 (diff) | |
download | base-0cf5a35912b13a534a577d7fa63065e76180cd5d.tar.gz |
Fix flicker when device is unlocked from AOD.
When IActivityTaskManager.keyguardGoingAway is called, keyguard sleep
token should be removed to get relevant activities involved for the
keyguard going away app transition animation.
The old logic assumed that keyguard goes away only from the lock screen,
but it's also possible to do it from AOD screen.
Bug: 197113783
Test: atest DisplayContentTests
Change-Id: I5d6ab0170a6b2c92e0655bad85ca22ba322e7b31
(cherry picked from commit 43af33b2a70e4fe54a536da25b607d8c26d1fa4e)
-rw-r--r-- | services/core/java/com/android/server/wm/KeyguardController.java | 8 | ||||
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java | 15 |
2 files changed, 19 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index fe1020c86041..cf0f973fa7db 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -106,13 +106,13 @@ class KeyguardController { } /** - * @return {@code true} for default display when AOD is showing. Otherwise, same as - * {@link #isKeyguardOrAodShowing(int)} + * @return {@code true} for default display when AOD is showing, not going away. Otherwise, same + * as {@link #isKeyguardOrAodShowing(int)} * TODO(b/125198167): Replace isKeyguardOrAodShowing() by this logic. */ boolean isKeyguardUnoccludedOrAodShowing(int displayId) { if (displayId == DEFAULT_DISPLAY && mAodShowing) { - return true; + return !mKeyguardGoingAway; } return isKeyguardOrAodShowing(displayId); } @@ -477,7 +477,7 @@ class KeyguardController { final KeyguardDisplayState state = getDisplayState(displayId); if (isKeyguardUnoccludedOrAodShowing(displayId)) { state.mSleepTokenAcquirer.acquire(displayId); - } else if (!isKeyguardUnoccludedOrAodShowing(displayId)) { + } else { state.mSleepTokenAcquirer.release(displayId); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index 12fc2f4ea1f4..5a6581f94154 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -2166,6 +2166,21 @@ public class DisplayContentTests extends WindowTestsBase { } @Test + public void testKeyguardGoingAwayWhileAodShown() { + mDisplayContent.getDisplayPolicy().setAwake(true); + + final WindowState appWin = createWindow(null, TYPE_APPLICATION, mDisplayContent, "appWin"); + final ActivityRecord activity = appWin.mActivityRecord; + + mAtm.mKeyguardController.setKeyguardShown(true /* keyguardShowing */, + true /* aodShowing */); + assertFalse(activity.isVisibleRequested()); + + mAtm.mKeyguardController.keyguardGoingAway(0 /* flags */); + assertTrue(activity.isVisibleRequested()); + } + + @Test public void testRemoveRootTaskInWindowingModes() { removeRootTaskTests(() -> mRootWindowContainer.removeRootTasksInWindowingModes( WINDOWING_MODE_FULLSCREEN)); |