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

Commit 75b475df authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Simplify ImeTargetChangeListener impl a bit

This is a mechanical refactoring CL before making

  ImeVisibilityStateComputer

multi-user aware.

There must be no observable behavior change.

Bug: 356177006
Test: presubmit
Flag: EXEMPT refactor
Change-Id: Ib8843357affc225ce1c224e4530b5c54341d7007
parent a9b60624
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -121,9 +121,9 @@ public final class ImeVisibilityStateComputer {
    @GuardedBy("ImfLock.class")
    private boolean mRequestedImeScreenshot;

    /** The window token of the current visible IME layering target overlay. */
    /** Whether there is a visible IME layering target overlay. */
    @GuardedBy("ImfLock.class")
    private IBinder mCurVisibleImeLayeringOverlay;
    private boolean mHasVisibleImeLayeringOverlay;

    /** The window token of the current visible IME input target. */
    @GuardedBy("ImfLock.class")
@@ -218,33 +218,36 @@ public final class ImeVisibilityStateComputer {
        mPolicy = imePolicy;
        mWindowManagerInternal.setInputMethodTargetChangeListener(new ImeTargetChangeListener() {
            @Override
            public void onImeTargetOverlayVisibilityChanged(IBinder overlayWindowToken,
            public void onImeTargetOverlayVisibilityChanged(@NonNull IBinder overlayWindowToken,
                    @WindowManager.LayoutParams.WindowType int windowType, boolean visible,
                    boolean removed) {
                // Ignoring the starting window since it's ok to cover the IME target
                // window in temporary without affecting the IME visibility.
                final var overlay = (visible && !removed && windowType != TYPE_APPLICATION_STARTING)
                                ? overlayWindowToken : null;
                final boolean hasOverlay = visible && !removed
                        && windowType != TYPE_APPLICATION_STARTING;
                synchronized (ImfLock.class) {
                    mCurVisibleImeLayeringOverlay = overlay;
                    mHasVisibleImeLayeringOverlay = hasOverlay;
                }
            }

            @Override
            public void onImeInputTargetVisibilityChanged(IBinder imeInputTarget,
                    boolean visibleRequested, boolean removed) {
                final boolean visibleAndNotRemoved = visibleRequested && !removed;
                synchronized (ImfLock.class) {
                    if (mCurVisibleImeInputTarget == imeInputTarget && (!visibleRequested
                            || removed)
                            && mCurVisibleImeLayeringOverlay != null) {
                    if (visibleAndNotRemoved) {
                        mCurVisibleImeInputTarget = imeInputTarget;
                        return;
                    }
                    if (mHasVisibleImeLayeringOverlay
                            && mCurVisibleImeInputTarget == imeInputTarget) {
                        final int reason = SoftInputShowHideReason.HIDE_WHEN_INPUT_TARGET_INVISIBLE;
                        final var statsToken = ImeTracker.forLogging().onStart(ImeTracker.TYPE_HIDE,
                                ImeTracker.ORIGIN_SERVER, reason, false /* fromUser */);
                        mService.onApplyImeVisibilityFromComputerLocked(imeInputTarget, statsToken,
                                new ImeVisibilityResult(STATE_HIDE_IME_EXPLICIT, reason));
                    }
                    mCurVisibleImeInputTarget =
                            (visibleRequested && !removed) ? imeInputTarget : null;
                    mCurVisibleImeInputTarget = null;
                }
            }
        });