diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityTaskManagerService.java | 65 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowOrganizerController.java | 2 |
2 files changed, 37 insertions, 30 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index cf111cdbcc6a..ddb9f178cb8b 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -2988,38 +2988,45 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { throw new SecurityException("Requires permission " + android.Manifest.permission.DEVICE_POWER); } - - synchronized (mGlobalLock) { - final long ident = Binder.clearCallingIdentity(); - if (mKeyguardShown != keyguardShowing) { - mKeyguardShown = keyguardShowing; - final Message msg = PooledLambda.obtainMessage( - ActivityManagerInternal::reportCurKeyguardUsageEvent, mAmInternal, - keyguardShowing); - mH.sendMessage(msg); - } - // Always reset the state regardless of keyguard-showing change, because that means the - // unlock is either completed or canceled. - if ((mDemoteTopAppReasons & DEMOTE_TOP_REASON_DURING_UNLOCKING) != 0) { - mDemoteTopAppReasons &= ~DEMOTE_TOP_REASON_DURING_UNLOCKING; - // The scheduling group of top process was demoted by unlocking, so recompute - // to restore its real top priority if possible. - if (mTopApp != null) { - mTopApp.scheduleUpdateOomAdj(); - } + final long ident = Binder.clearCallingIdentity(); + try { + synchronized (mGlobalLock) { + setLockScreenShownLocked(keyguardShowing, aodShowing); } - try { - Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "setLockScreenShown"); - mRootWindowContainer.forAllDisplays(displayContent -> { - mKeyguardController.setKeyguardShown(displayContent.getDisplayId(), - keyguardShowing, aodShowing); - }); - maybeHideLockedProfileActivityLocked(); - } finally { - Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); - Binder.restoreCallingIdentity(ident); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + + @GuardedBy("mGlobalLock") + void setLockScreenShownLocked(boolean keyguardShowing, boolean aodShowing) { + if (mKeyguardShown != keyguardShowing) { + mKeyguardShown = keyguardShowing; + final Message msg = PooledLambda.obtainMessage( + ActivityManagerInternal::reportCurKeyguardUsageEvent, mAmInternal, + keyguardShowing); + mH.sendMessage(msg); + } + // Always reset the state regardless of keyguard-showing change, because that means the + // unlock is either completed or canceled. + if ((mDemoteTopAppReasons & DEMOTE_TOP_REASON_DURING_UNLOCKING) != 0) { + mDemoteTopAppReasons &= ~DEMOTE_TOP_REASON_DURING_UNLOCKING; + // The scheduling group of top process was demoted by unlocking, so recompute + // to restore its real top priority if possible. + if (mTopApp != null) { + mTopApp.scheduleUpdateOomAdj(); } } + try { + Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "setLockScreenShown"); + mRootWindowContainer.forAllDisplays(displayContent -> { + mKeyguardController.setKeyguardShown(displayContent.getDisplayId(), + keyguardShowing, aodShowing); + }); + maybeHideLockedProfileActivityLocked(); + } finally { + Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER); + } mH.post(() -> { for (int i = mScreenObservers.size() - 1; i >= 0; i--) { diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index 060f2e803ec9..b4c2c0173767 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -1865,7 +1865,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub if (keyguardState != null) { boolean keyguardShowing = keyguardState.getKeyguardShowing(); boolean aodShowing = keyguardState.getAodShowing(); - mService.setLockScreenShown(keyguardShowing, aodShowing); + mService.setLockScreenShownLocked(keyguardShowing, aodShowing); } return effects; } |