Loading services/core/java/com/android/server/am/KeyguardController.java +1 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,7 @@ class KeyguardController { mKeyguardShowing = keyguardShowing; mAodShowing = aodShowing; mSecondaryDisplayShowing = secondaryDisplayShowing; mWindowManager.setAodShowing(aodShowing); if (showingChanged) { dismissDockedStackIfNeeded(); setKeyguardGoingAway(false); Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +19 −1 Original line number Diff line number Diff line Loading @@ -816,6 +816,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { private final MutableBoolean mTmpBoolean = new MutableBoolean(false); private boolean mAodShowing; private static final int MSG_ENABLE_POINTER_LOCATION = 1; private static final int MSG_DISABLE_POINTER_LOCATION = 2; private static final int MSG_DISPATCH_MEDIA_KEY_WITH_WAKE_LOCK = 3; Loading Loading @@ -3058,8 +3060,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean keyguardLocked = isKeyguardLocked(); boolean hideDockDivider = attrs.type == TYPE_DOCK_DIVIDER && !mWindowManagerInternal.isStackVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); // If AOD is showing, the IME should be hidden. However, sometimes the AOD is considered // hidden because it's in the process of hiding, but it's still being shown on screen. // In that case, we want to continue hiding the IME until the windows have completed // drawing. This way, we know that the IME can be safely shown since the other windows are // now shown. final boolean hideIme = win.isInputMethodWindow() && (mAodShowing || !mWindowManagerDrawComplete); return (keyguardLocked && !allowWhenLocked && win.getDisplayId() == DEFAULT_DISPLAY) || hideDockDivider; || hideDockDivider || hideIme; } /** {@inheritDoc} */ Loading Loading @@ -8980,4 +8989,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { public void onLockTaskStateChangedLw(int lockTaskState) { mImmersiveModeConfirmation.onLockTaskModeChangedLw(lockTaskState); } @Override public boolean setAodShowing(boolean aodShowing) { if (mAodShowing != aodShowing) { mAodShowing = aodShowing; return true; } return false; } } services/core/java/com/android/server/policy/WindowManagerPolicy.java +7 −0 Original line number Diff line number Diff line Loading @@ -1774,4 +1774,11 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { * {@link ActivityManager#LOCK_TASK_MODE_PINNED}. */ void onLockTaskStateChangedLw(int lockTaskState); /** * Updates the flag about whether AOD is showing. * * @return whether the value was changed. */ boolean setAodShowing(boolean aodShowing); } services/core/java/com/android/server/wm/WindowManagerService.java +13 −0 Original line number Diff line number Diff line Loading @@ -7588,4 +7588,17 @@ public class WindowManagerService extends IWindowManager.Stub mPolicy.onLockTaskStateChangedLw(lockTaskState); } } /** * Updates {@link WindowManagerPolicy} with new value about whether AOD is showing. If AOD * has changed, this will trigger a {@link WindowSurfacePlacer#performSurfacePlacement} to * ensure the new value takes effect. */ public void setAodShowing(boolean aodShowing) { synchronized (mWindowMap) { if (mPolicy.setAodShowing(aodShowing)) { mWindowPlacerLocked.performSurfacePlacement(); } } } } services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +5 −0 Original line number Diff line number Diff line Loading @@ -598,4 +598,9 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { @Override public void onLockTaskStateChangedLw(int lockTaskState) { } @Override public boolean setAodShowing(boolean aodShowing) { return false; } } Loading
services/core/java/com/android/server/am/KeyguardController.java +1 −0 Original line number Diff line number Diff line Loading @@ -129,6 +129,7 @@ class KeyguardController { mKeyguardShowing = keyguardShowing; mAodShowing = aodShowing; mSecondaryDisplayShowing = secondaryDisplayShowing; mWindowManager.setAodShowing(aodShowing); if (showingChanged) { dismissDockedStackIfNeeded(); setKeyguardGoingAway(false); Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +19 −1 Original line number Diff line number Diff line Loading @@ -816,6 +816,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { private final MutableBoolean mTmpBoolean = new MutableBoolean(false); private boolean mAodShowing; private static final int MSG_ENABLE_POINTER_LOCATION = 1; private static final int MSG_DISABLE_POINTER_LOCATION = 2; private static final int MSG_DISPATCH_MEDIA_KEY_WITH_WAKE_LOCK = 3; Loading Loading @@ -3058,8 +3060,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean keyguardLocked = isKeyguardLocked(); boolean hideDockDivider = attrs.type == TYPE_DOCK_DIVIDER && !mWindowManagerInternal.isStackVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); // If AOD is showing, the IME should be hidden. However, sometimes the AOD is considered // hidden because it's in the process of hiding, but it's still being shown on screen. // In that case, we want to continue hiding the IME until the windows have completed // drawing. This way, we know that the IME can be safely shown since the other windows are // now shown. final boolean hideIme = win.isInputMethodWindow() && (mAodShowing || !mWindowManagerDrawComplete); return (keyguardLocked && !allowWhenLocked && win.getDisplayId() == DEFAULT_DISPLAY) || hideDockDivider; || hideDockDivider || hideIme; } /** {@inheritDoc} */ Loading Loading @@ -8980,4 +8989,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { public void onLockTaskStateChangedLw(int lockTaskState) { mImmersiveModeConfirmation.onLockTaskModeChangedLw(lockTaskState); } @Override public boolean setAodShowing(boolean aodShowing) { if (mAodShowing != aodShowing) { mAodShowing = aodShowing; return true; } return false; } }
services/core/java/com/android/server/policy/WindowManagerPolicy.java +7 −0 Original line number Diff line number Diff line Loading @@ -1774,4 +1774,11 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { * {@link ActivityManager#LOCK_TASK_MODE_PINNED}. */ void onLockTaskStateChangedLw(int lockTaskState); /** * Updates the flag about whether AOD is showing. * * @return whether the value was changed. */ boolean setAodShowing(boolean aodShowing); }
services/core/java/com/android/server/wm/WindowManagerService.java +13 −0 Original line number Diff line number Diff line Loading @@ -7588,4 +7588,17 @@ public class WindowManagerService extends IWindowManager.Stub mPolicy.onLockTaskStateChangedLw(lockTaskState); } } /** * Updates {@link WindowManagerPolicy} with new value about whether AOD is showing. If AOD * has changed, this will trigger a {@link WindowSurfacePlacer#performSurfacePlacement} to * ensure the new value takes effect. */ public void setAodShowing(boolean aodShowing) { synchronized (mWindowMap) { if (mPolicy.setAodShowing(aodShowing)) { mWindowPlacerLocked.performSurfacePlacement(); } } } }
services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +5 −0 Original line number Diff line number Diff line Loading @@ -598,4 +598,9 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { @Override public void onLockTaskStateChangedLw(int lockTaskState) { } @Override public boolean setAodShowing(boolean aodShowing) { return false; } }