Merge "Fix unexpected IME switcher dialog hidden" into tm-dev am: 441515483d
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17252923 Change-Id: If33cfa5751f5902ca02b2eba02204def31593d46 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -133,10 +133,13 @@ public abstract class InputMethodManagerInternal {
|
||||
*
|
||||
* @param windowToken the window token that is now in control, or {@code null} if no client
|
||||
* window is in control of the IME.
|
||||
* @param imeParentChanged {@code true} when the window manager thoughts the IME surface parent
|
||||
* will end up to change later, or {@code false} otherwise.
|
||||
*/
|
||||
public abstract void reportImeControl(@Nullable IBinder windowToken, boolean imeParentChanged);
|
||||
public abstract void reportImeControl(@Nullable IBinder windowToken);
|
||||
|
||||
/**
|
||||
* Indicates that the IME window has re-parented to the new target when the IME control changed.
|
||||
*/
|
||||
public abstract void onImeParentChanged();
|
||||
|
||||
/**
|
||||
* Destroys the IME surface.
|
||||
@@ -226,8 +229,11 @@ public abstract class InputMethodManagerInternal {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reportImeControl(@Nullable IBinder windowToken,
|
||||
boolean imeParentChanged) {
|
||||
public void reportImeControl(@Nullable IBinder windowToken) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onImeParentChanged() {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5700,19 +5700,23 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reportImeControl(@Nullable IBinder windowToken, boolean imeParentChanged) {
|
||||
public void reportImeControl(@Nullable IBinder windowToken) {
|
||||
synchronized (ImfLock.class) {
|
||||
if (mCurFocusedWindow != windowToken) {
|
||||
// mCurPerceptible was set by the focused window, but it is no longer in
|
||||
// control, so we reset mCurPerceptible.
|
||||
mCurPerceptible = true;
|
||||
}
|
||||
if (imeParentChanged) {
|
||||
// Hide the IME method menu earlier when the IME surface parent will change in
|
||||
// case seeing the dialog dismiss flickering during the next focused window
|
||||
// starting the input connection.
|
||||
mMenuController.hideInputMethodMenu();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onImeParentChanged() {
|
||||
synchronized (ImfLock.class) {
|
||||
// Hide the IME method menu when the IME surface parent will change in
|
||||
// case seeing the dialog dismiss flickering during the next focused window
|
||||
// starting the input connection.
|
||||
mMenuController.hideInputMethodMenu();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4291,18 +4291,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
// Update Ime parent when IME insets leash created or the new IME layering target might
|
||||
// updated from setImeLayeringTarget, which is the best time that default IME visibility
|
||||
// has been settled down after IME control target changed.
|
||||
final boolean imeParentChanged =
|
||||
prevImeControlTarget != mImeControlTarget || forceUpdateImeParent;
|
||||
if (imeParentChanged) {
|
||||
final boolean imeControlChanged = prevImeControlTarget != mImeControlTarget;
|
||||
if (imeControlChanged || forceUpdateImeParent) {
|
||||
updateImeParent();
|
||||
}
|
||||
|
||||
final WindowState win = InsetsControlTarget.asWindowOrNull(mImeControlTarget);
|
||||
final IBinder token = win != null ? win.mClient.asBinder() : null;
|
||||
// Note: not allowed to call into IMMS with the WM lock held, hence the post.
|
||||
mWmService.mH.post(() ->
|
||||
InputMethodManagerInternal.get().reportImeControl(token, imeParentChanged)
|
||||
);
|
||||
mWmService.mH.post(() -> InputMethodManagerInternal.get().reportImeControl(token));
|
||||
}
|
||||
|
||||
void updateImeParent() {
|
||||
@@ -4324,6 +4321,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
// do a force update to make sure there is a layer set for the new parent.
|
||||
assignRelativeLayerForIme(getSyncTransaction(), true /* forceUpdate */);
|
||||
scheduleAnimation();
|
||||
|
||||
mWmService.mH.post(() -> InputMethodManagerInternal.get().onImeParentChanged());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2464,7 +2464,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
dc.setImeLayeringTarget(null);
|
||||
dc.computeImeTarget(true /* updateImeTarget */);
|
||||
}
|
||||
if (dc.getImeInputTarget() == this) {
|
||||
if (dc.getImeInputTarget() == this
|
||||
&& (mActivityRecord == null || !mActivityRecord.isRelaunching())) {
|
||||
dc.updateImeInputAndControlTarget(null);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user