summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java65
-rw-r--r--services/core/java/com/android/server/wm/WindowOrganizerController.java2
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;
}