Merge "Prevent IME from showing when AOD shown or windows not drawn." into pi-dev

This commit is contained in:
Chavi Weingarten
2018-06-06 18:56:56 +00:00
committed by Android (Google) Code Review
5 changed files with 45 additions and 1 deletions

View File

@@ -129,6 +129,7 @@ class KeyguardController {
mKeyguardShowing = keyguardShowing; mKeyguardShowing = keyguardShowing;
mAodShowing = aodShowing; mAodShowing = aodShowing;
mSecondaryDisplayShowing = secondaryDisplayShowing; mSecondaryDisplayShowing = secondaryDisplayShowing;
mWindowManager.setAodShowing(aodShowing);
if (showingChanged) { if (showingChanged) {
dismissDockedStackIfNeeded(); dismissDockedStackIfNeeded();
setKeyguardGoingAway(false); setKeyguardGoingAway(false);

View File

@@ -816,6 +816,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private final MutableBoolean mTmpBoolean = new MutableBoolean(false); private final MutableBoolean mTmpBoolean = new MutableBoolean(false);
private boolean mAodShowing;
private static final int MSG_ENABLE_POINTER_LOCATION = 1; private static final int MSG_ENABLE_POINTER_LOCATION = 1;
private static final int MSG_DISABLE_POINTER_LOCATION = 2; private static final int MSG_DISABLE_POINTER_LOCATION = 2;
private static final int MSG_DISPATCH_MEDIA_KEY_WITH_WAKE_LOCK = 3; private static final int MSG_DISPATCH_MEDIA_KEY_WITH_WAKE_LOCK = 3;
@@ -3058,8 +3060,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
boolean keyguardLocked = isKeyguardLocked(); boolean keyguardLocked = isKeyguardLocked();
boolean hideDockDivider = attrs.type == TYPE_DOCK_DIVIDER boolean hideDockDivider = attrs.type == TYPE_DOCK_DIVIDER
&& !mWindowManagerInternal.isStackVisible(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); && !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) return (keyguardLocked && !allowWhenLocked && win.getDisplayId() == DEFAULT_DISPLAY)
|| hideDockDivider; || hideDockDivider || hideIme;
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@@ -8980,4 +8989,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
public void onLockTaskStateChangedLw(int lockTaskState) { public void onLockTaskStateChangedLw(int lockTaskState) {
mImmersiveModeConfirmation.onLockTaskModeChangedLw(lockTaskState); mImmersiveModeConfirmation.onLockTaskModeChangedLw(lockTaskState);
} }
@Override
public boolean setAodShowing(boolean aodShowing) {
if (mAodShowing != aodShowing) {
mAodShowing = aodShowing;
return true;
}
return false;
}
} }

View File

@@ -1774,4 +1774,11 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants {
* {@link ActivityManager#LOCK_TASK_MODE_PINNED}. * {@link ActivityManager#LOCK_TASK_MODE_PINNED}.
*/ */
void onLockTaskStateChangedLw(int lockTaskState); void onLockTaskStateChangedLw(int lockTaskState);
/**
* Updates the flag about whether AOD is showing.
*
* @return whether the value was changed.
*/
boolean setAodShowing(boolean aodShowing);
} }

View File

@@ -7588,4 +7588,17 @@ public class WindowManagerService extends IWindowManager.Stub
mPolicy.onLockTaskStateChangedLw(lockTaskState); 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();
}
}
}
} }

View File

@@ -598,4 +598,9 @@ class TestWindowManagerPolicy implements WindowManagerPolicy {
@Override @Override
public void onLockTaskStateChangedLw(int lockTaskState) { public void onLockTaskStateChangedLw(int lockTaskState) {
} }
@Override
public boolean setAodShowing(boolean aodShowing) {
return false;
}
} }