From 811c0f0b0291f8ab85a8c8b9d1dff221cc258b09 Mon Sep 17 00:00:00 2001 From: Issei Suzuki Date: Thu, 2 Jun 2022 09:20:43 +0000 Subject: [PATCH 1/2] Clear ActivityRecord#mDismissKeyguard flag after app launches. This flag is used by the SysUI to dismiss an insecure keyguard when an app is launched from an insecure lock screen. The flag should only affect the app launch once, so needs to be cleared once app launch animation finishes. Bug: 234583880 Test: atest KeyguardTests Change-Id: I74e9e00caad0d9af80127b2fc930c4ff0d52af76 --- core/proto/android/server/windowmanagerservice.proto | 2 ++ services/core/java/com/android/server/wm/ActivityRecord.java | 1 + .../core/java/com/android/server/wm/KeyguardController.java | 3 +++ 3 files changed, 6 insertions(+) diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto index 152d729da3b62..92ac389ece676 100644 --- a/core/proto/android/server/windowmanagerservice.proto +++ b/core/proto/android/server/windowmanagerservice.proto @@ -116,6 +116,7 @@ message KeyguardControllerProto { repeated KeyguardOccludedProto keyguard_occluded_states = 2 [deprecated=true]; optional bool aod_showing = 3; repeated KeyguardPerDisplayProto keyguard_per_display = 4; + optional bool keyguard_going_away = 5; } message KeyguardOccludedProto { @@ -132,6 +133,7 @@ message KeyguardPerDisplayProto { optional bool keyguard_showing = 2; optional bool aod_showing = 3; optional bool keyguard_occluded = 4; + optional bool keyguard_going_away = 5; } /* represents PhoneWindowManager */ diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 4f222a4f8b833..0d6591ca2ca36 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -7343,6 +7343,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mTransit = TRANSIT_OLD_UNSET; mTransitFlags = 0; mNeedsAnimationBoundsLayer = false; + mDismissKeyguard = false; setAppLayoutChanges(FINISH_LAYOUT_REDO_ANIM | FINISH_LAYOUT_REDO_WALLPAPER, "ActivityRecord"); diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index 01c94142f46b3..cf46126af4888 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -41,6 +41,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM; import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.wm.ActivityTaskSupervisor.PRESERVE_WINDOWS; import static com.android.server.wm.KeyguardControllerProto.AOD_SHOWING; +import static com.android.server.wm.KeyguardControllerProto.KEYGUARD_GOING_AWAY; import static com.android.server.wm.KeyguardControllerProto.KEYGUARD_PER_DISPLAY; import static com.android.server.wm.KeyguardControllerProto.KEYGUARD_SHOWING; @@ -671,6 +672,7 @@ class KeyguardController { proto.write(KeyguardPerDisplayProto.KEYGUARD_SHOWING, mKeyguardShowing); proto.write(KeyguardPerDisplayProto.AOD_SHOWING, mAodShowing); proto.write(KeyguardPerDisplayProto.KEYGUARD_OCCLUDED, mOccluded); + proto.write(KeyguardPerDisplayProto.KEYGUARD_GOING_AWAY, mKeyguardGoingAway); proto.end(token); } } @@ -691,6 +693,7 @@ class KeyguardController { final long token = proto.start(fieldId); proto.write(AOD_SHOWING, default_state.mAodShowing); proto.write(KEYGUARD_SHOWING, default_state.mKeyguardShowing); + proto.write(KEYGUARD_GOING_AWAY, default_state.mKeyguardGoingAway); writeDisplayStatesToProto(proto, KEYGUARD_PER_DISPLAY); proto.end(token); } From e12c8f5de3154110a3ead9112f65b3327fa0083f Mon Sep 17 00:00:00 2001 From: Issei Suzuki Date: Wed, 8 Jun 2022 10:27:31 +0000 Subject: [PATCH 2/2] Clear ActivityRecord#mDismissKeyguard flag after app launches. This flag is used by the SysUI to dismiss an insecure keyguard when an app is launched from an insecure lock screen. The flag should only affect the app launch once, so needs to be cleared once the flag is processed. Bug: 234583880 Test: atest KeyguardTests#testDismissKeyguard_fromActivityOption_onlyOnce Change-Id: Ia4179b40de7d45b2199b175a6dcc24016dfba091 (cherry picked from commit 41cbf49af7d5fc18afa5a734ce69df679b0f13a9) --- services/core/java/com/android/server/wm/ActivityRecord.java | 1 - services/core/java/com/android/server/wm/KeyguardController.java | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 0d6591ca2ca36..4f222a4f8b833 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -7343,7 +7343,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mTransit = TRANSIT_OLD_UNSET; mTransitFlags = 0; mNeedsAnimationBoundsLayer = false; - mDismissKeyguard = false; setAppLayoutChanges(FINISH_LAYOUT_REDO_ANIM | FINISH_LAYOUT_REDO_WALLPAPER, "ActivityRecord"); diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index cf46126af4888..a4c05eecdb07d 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -595,6 +595,7 @@ class KeyguardController { } else if (top.canShowWhenLocked()) { mTopOccludesActivity = top; } + top.mDismissKeyguard = false; // Only the top activity may control occluded, as we can't occlude the Keyguard // if the top app doesn't want to occlude it.