summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIssei Suzuki <issei@google.com>2021-09-01 13:00:35 +0200
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-09-20 22:31:19 +0000
commit0cf5a35912b13a534a577d7fa63065e76180cd5d (patch)
tree62ffff9350bfcd9444f1d86348200a1d8e9c8cfa
parent0a98c32605689453bcf7c61a427f67ebe90260f0 (diff)
downloadbase-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.java8
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java15
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));