Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e65411d0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix unexpected IME switcher dialog hidden" into tm-dev am: 44151548

parents 41ef50c8 44151548
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -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
+11 −7
Original line number Diff line number Diff line
@@ -5700,21 +5700,25 @@ 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
            }
        }

        @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();
            }
        }
        }

        @Override
        public void removeImeSurface() {
+5 −6
Original line number Diff line number Diff line
@@ -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());
        }
    }

+2 −1
Original line number Diff line number Diff line
@@ -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);
        }