diff options
3 files changed, 34 insertions, 23 deletions
diff --git a/services/core/java/com/android/server/am/KeyguardController.java b/services/core/java/com/android/server/am/KeyguardController.java index 2e0ec0b361e2..a46c85170ba2 100644 --- a/services/core/java/com/android/server/am/KeyguardController.java +++ b/services/core/java/com/android/server/am/KeyguardController.java @@ -17,6 +17,7 @@ package com.android.server.am; import static android.app.ActivityManager.StackId.DOCKED_STACK_ID; +import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER; import static android.view.WindowManagerPolicy.KEYGUARD_GOING_AWAY_FLAG_NO_WINDOW_ANIMATIONS; import static android.view.WindowManagerPolicy.KEYGUARD_GOING_AWAY_FLAG_TO_SHADE; import static android.view.WindowManagerPolicy.KEYGUARD_GOING_AWAY_FLAG_WITH_WALLPAPER; @@ -34,6 +35,7 @@ import static com.android.server.wm.AppTransition.TRANSIT_UNSET; import android.os.IBinder; import android.os.RemoteException; +import android.os.Trace; import android.util.Slog; import com.android.internal.policy.IKeyguardDismissCallback; @@ -111,22 +113,28 @@ class KeyguardController { * etc. */ void keyguardGoingAway(int flags) { - if (mKeyguardShowing) { - mWindowManager.deferSurfaceLayout(); - try { - setKeyguardGoingAway(true); - mWindowManager.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, - false /* alwaysKeepCurrent */, convertTransitFlags(flags), - false /* forceOverride */); - mService.updateSleepIfNeededLocked(); - - // Some stack visibility might change (e.g. docked stack) - mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); - mStackSupervisor.addStartingWindowsForVisibleActivities(true /* taskSwitch */); - mWindowManager.executeAppTransition(); - } finally { - mWindowManager.continueSurfaceLayout(); - } + if (!mKeyguardShowing) { + return; + } + Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "keyguardGoingAway"); + mWindowManager.deferSurfaceLayout(); + try { + setKeyguardGoingAway(true); + mWindowManager.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, + false /* alwaysKeepCurrent */, convertTransitFlags(flags), + false /* forceOverride */); + mService.updateSleepIfNeededLocked(); + + // Some stack visibility might change (e.g. docked stack) + mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); + mStackSupervisor.addStartingWindowsForVisibleActivities(true /* taskSwitch */); + mWindowManager.executeAppTransition(); + } finally { + Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "keyguardGoingAway: surfaceLayout"); + mWindowManager.continueSurfaceLayout(); + Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); + + Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); } } diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java index fe7494728ac3..5f34c6067997 100644 --- a/services/core/java/com/android/server/wm/AppWindowContainerController.java +++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java @@ -614,8 +614,8 @@ public class AppWindowContainerController return STARTING_WINDOW_TYPE_SPLASH_SCREEN; } else if (taskSwitch && allowTaskSnapshot) { return snapshot == null ? STARTING_WINDOW_TYPE_NONE - : snapshotFillsWidth(snapshot) || fromRecents ? STARTING_WINDOW_TYPE_SNAPSHOT - : STARTING_WINDOW_TYPE_SPLASH_SCREEN; + : snapshotOrientationSameAsDisplay(snapshot) || fromRecents + ? STARTING_WINDOW_TYPE_SNAPSHOT : STARTING_WINDOW_TYPE_SPLASH_SCREEN; } else { return STARTING_WINDOW_TYPE_NONE; } @@ -640,7 +640,7 @@ public class AppWindowContainerController return true; } - private boolean snapshotFillsWidth(TaskSnapshot snapshot) { + private boolean snapshotOrientationSameAsDisplay(TaskSnapshot snapshot) { if (snapshot == null) { return false; } @@ -655,7 +655,9 @@ public class AppWindowContainerController mService.mPolicy.getStableInsetsLw(di.rotation, di.logicalWidth, di.logicalHeight, stableInsets); displayBounds.inset(stableInsets); - return rect.width() >= displayBounds.width(); + final boolean snapshotInLandscape = rect.width() >= rect.height(); + final boolean displayInLandscape = displayBounds.width() >= displayBounds.height(); + return snapshotInLandscape == displayInLandscape; } public void removeStartingWindow() { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 30027d50ca9d..7a91d1e9c28a 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2940,9 +2940,10 @@ public class WindowManagerService extends IWindowManager.Stub } public void setKeyguardGoingAway(boolean keyguardGoingAway) { - synchronized (mWindowMap) { - mKeyguardGoingAway = keyguardGoingAway; - } +// TODO: Use of this can be removed. Revert ag/I8369723d6a77f2c602f1ef080371fa7cd9ee094e +// synchronized (mWindowMap) { +// mKeyguardGoingAway = keyguardGoingAway; +// } } // ------------------------------------------------------------- |