Merge "Prevent IME from showing when AOD shown or windows not drawn." into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
cf5514257f
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user