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

Commit 6298e987 authored by Felix Stern's avatar Felix Stern Committed by Android (Google) Code Review
Browse files

Merge "Move setImeVisibilityOnFocusedWindowClient to IMMS" into main

parents 4a007dbe 9cd20e70
Loading
Loading
Loading
Loading
+3 −18
Original line number Diff line number Diff line
@@ -202,7 +202,7 @@ final class DefaultImeVisibilityApplier {
                break;
            case STATE_HIDE_IME_EXPLICIT:
                if (Flags.refactorInsetsController()) {
                    setImeVisibilityOnFocusedWindowClient(false, userId, statsToken);
                    mService.setImeVisibilityOnFocusedWindowClient(false, userData, statsToken);
                } else {
                    mService.hideCurrentInputLocked(windowToken, statsToken,
                            0 /* flags */, null /* resultReceiver */, reason, userId);
@@ -210,7 +210,7 @@ final class DefaultImeVisibilityApplier {
                break;
            case STATE_HIDE_IME_NOT_ALWAYS:
                if (Flags.refactorInsetsController()) {
                    setImeVisibilityOnFocusedWindowClient(false, userId, statsToken);
                    mService.setImeVisibilityOnFocusedWindowClient(false, userData, statsToken);
                } else {
                    mService.hideCurrentInputLocked(windowToken, statsToken,
                            InputMethodManager.HIDE_NOT_ALWAYS, null /* resultReceiver */, reason,
@@ -221,7 +221,7 @@ final class DefaultImeVisibilityApplier {
                if (Flags.refactorInsetsController()) {
                    // This can be triggered by IMMS#startInputOrWindowGainedFocus. We need to
                    // set the requestedVisibleTypes in InsetsController first, before applying it.
                    setImeVisibilityOnFocusedWindowClient(true, userId, statsToken);
                    mService.setImeVisibilityOnFocusedWindowClient(true, userData, statsToken);
                } else {
                    mService.showCurrentInputLocked(windowToken, statsToken,
                            InputMethodManager.SHOW_IMPLICIT, MotionEvent.TOOL_TYPE_UNKNOWN,
@@ -276,19 +276,4 @@ final class DefaultImeVisibilityApplier {
        }
        return false;
    }

    @GuardedBy("ImfLock.class")
    private void setImeVisibilityOnFocusedWindowClient(boolean visibility, @UserIdInt int userId,
            @NonNull ImeTracker.Token statsToken) {
        final var userData = mService.getUserData(userId);
        if (userData.mImeBindingState != null
                && userData.mImeBindingState.mFocusedWindowClient != null
                && userData.mImeBindingState.mFocusedWindowClient.mClient != null) {
            userData.mImeBindingState.mFocusedWindowClient.mClient.setImeVisibility(visibility,
                    statsToken);
        } else {
            ImeTracker.forLogging().onFailed(statsToken,
                    ImeTracker.PHASE_SERVER_SET_VISIBILITY_ON_FOCUSED_WINDOW);
        }
    }
}
+28 −43
Original line number Diff line number Diff line
@@ -3147,11 +3147,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
            if (Flags.refactorInsetsController()) {
                final var visibilityStateComputer = userData.mVisibilityStateComputer;
                boolean wasVisible = visibilityStateComputer.isInputShown();
                if (userData.mImeBindingState != null
                        && userData.mImeBindingState.mFocusedWindowClient != null
                        && userData.mImeBindingState.mFocusedWindowClient.mClient != null) {
                    userData.mImeBindingState.mFocusedWindowClient.mClient
                            .setImeVisibility(true, statsToken);
                if (setImeVisibilityOnFocusedWindowClient(false, userData, statsToken)) {
                    if (resultReceiver != null) {
                        resultReceiver.send(
                                wasVisible ? InputMethodManager.RESULT_UNCHANGED_SHOWN
@@ -3600,13 +3596,9 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
            Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "IMMS.hideSoftInput");
            if (DEBUG) Slog.v(TAG, "Client requesting input be hidden");
            if (Flags.refactorInsetsController()) {
                if (userData.mImeBindingState != null
                        && userData.mImeBindingState.mFocusedWindowClient != null
                        && userData.mImeBindingState.mFocusedWindowClient.mClient != null) {
                boolean wasVisible = visibilityStateComputer.isInputShown();
                // TODO add windowToken to interface
                    userData.mImeBindingState.mFocusedWindowClient.mClient
                            .setImeVisibility(false, statsToken);
                if (setImeVisibilityOnFocusedWindowClient(false, userData, statsToken)) {
                    if (resultReceiver != null) {
                        resultReceiver.send(wasVisible ? InputMethodManager.RESULT_HIDDEN
                                : InputMethodManager.RESULT_UNCHANGED_HIDDEN, null);
@@ -4943,12 +4935,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                    if (Flags.refactorInsetsController()) {
                        userData.mCurClient.mClient.setImeVisibility(false, statsToken);
                        // TODO we will loose the flags here
                        if (userData.mImeBindingState != null
                                && userData.mImeBindingState.mFocusedWindowClient != null
                                && userData.mImeBindingState.mFocusedWindowClient.mClient != null) {
                            userData.mImeBindingState.mFocusedWindowClient.mClient
                                    .setImeVisibility(false, statsToken);
                        }
                        setImeVisibilityOnFocusedWindowClient(false, userData, statsToken);
                    } else {
                        final var visibilityStateComputer = userData.mVisibilityStateComputer;
                        hideCurrentInputLocked(visibilityStateComputer.getLastImeTargetWindow(),
@@ -4981,14 +4968,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                final long ident = Binder.clearCallingIdentity();
                try {
                    if (Flags.refactorInsetsController()) {
                        userData.mCurClient.mClient.setImeVisibility(false, statsToken);
                        // TODO we will loose the flags here
                        if (userData.mImeBindingState != null
                                && userData.mImeBindingState.mFocusedWindowClient != null
                                && userData.mImeBindingState.mFocusedWindowClient.mClient != null) {
                            userData.mImeBindingState.mFocusedWindowClient.mClient
                                    .setImeVisibility(true, statsToken);
                        }
                        userData.mCurClient.mClient.setImeVisibility(true, statsToken);
                        setImeVisibilityOnFocusedWindowClient(true, userData, statsToken);
                    } else {
                        final var visibilityStateComputer = userData.mVisibilityStateComputer;
                        showCurrentInputLocked(visibilityStateComputer.getLastImeTargetWindow(),
@@ -5150,13 +5131,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                    final int userId = resolveImeUserIdFromDisplayIdLocked(originatingDisplayId);
                    final var userData = getUserData(userId);
                    if (Flags.refactorInsetsController()) {
                        if (userData.mImeBindingState != null
                                && userData.mImeBindingState.mFocusedWindowClient != null
                                && userData.mImeBindingState.mFocusedWindowClient.mClient != null) {
                            userData.mImeBindingState.mFocusedWindowClient.mClient
                                    .setImeVisibility(false,
                        setImeVisibilityOnFocusedWindowClient(false, userData,
                                null /* TODO(b329229469) check statsToken */);
                        }
                    } else {

                        hideCurrentInputLocked(userData.mImeBindingState.mFocusedWindow,
@@ -6825,16 +6801,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
                    final InputMethodSettings settings = InputMethodSettingsRepository.get(userId);
                    final var userData = getUserData(userId);
                    if (Flags.refactorInsetsController()) {
                        if (userData.mImeBindingState != null
                                && userData.mImeBindingState.mFocusedWindowClient != null
                                && userData.mImeBindingState.mFocusedWindowClient.mClient
                                != null) {
                            userData.mImeBindingState.mFocusedWindowClient.mClient
                                    .setImeVisibility(false,
                        setImeVisibilityOnFocusedWindowClient(false, userData,
                                null /* TODO(b329229469) initialize statsToken here? */);
                        } else {
                            // TODO(b329229469): ImeTracker?
                        }
                    } else {
                        hideCurrentInputLocked(userData.mImeBindingState.mFocusedWindow,
                                0 /* flags */,
@@ -6873,6 +6841,23 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
        return ShellCommandResult.SUCCESS;
    }

    @GuardedBy("ImfLock.class")
    boolean setImeVisibilityOnFocusedWindowClient(boolean visible, UserData userData,
            @NonNull ImeTracker.Token statsToken) {
        if (Flags.refactorInsetsController()) {
            if (userData.mImeBindingState != null
                    && userData.mImeBindingState.mFocusedWindowClient != null
                    && userData.mImeBindingState.mFocusedWindowClient.mClient != null) {
                userData.mImeBindingState.mFocusedWindowClient.mClient.setImeVisibility(visible,
                        statsToken);
                return true;
            }
            ImeTracker.forLogging().onFailed(statsToken,
                    ImeTracker.PHASE_SERVER_SET_VISIBILITY_ON_FOCUSED_WINDOW);
        }
        return false;
    }

    /**
     * Handles {@code adb shell cmd input_method tracing start/stop/save-for-bugreport}.
     *