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

Commit 12ed7d3e authored by Harpreet "Eli" Sangha's avatar Harpreet "Eli" Sangha Committed by Ming-Shin Lu
Browse files

DO NOT MERGE Revert "Fix showing keyboard without editor focused in some case..."

Reason for revert: b/169215792
Reverted Changes:
I37ae6e30d:Fix showing keyboard without editor focused in som...

Change-Id: Ia370070d42aedc5aa411ec34d4c7aa43c1c65bcf
parent e3488605
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -224,8 +224,6 @@ public final class InputMethodDebug {
                return "HIDE_DOCKED_STACK_ATTACHED";
                return "HIDE_DOCKED_STACK_ATTACHED";
            case SoftInputShowHideReason.HIDE_RECENTS_ANIMATION:
            case SoftInputShowHideReason.HIDE_RECENTS_ANIMATION:
                return "HIDE_RECENTS_ANIMATION";
                return "HIDE_RECENTS_ANIMATION";
            case SoftInputShowHideReason.HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR:
                return "HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR";
            default:
            default:
                return "Unknown=" + reason;
                return "Unknown=" + reason;
        }
        }
+1 −15
Original line number Original line Diff line number Diff line
@@ -47,8 +47,7 @@ import java.lang.annotation.Retention;
        SoftInputShowHideReason.HIDE_POWER_BUTTON_GO_HOME,
        SoftInputShowHideReason.HIDE_POWER_BUTTON_GO_HOME,
        SoftInputShowHideReason.HIDE_DOCKED_STACK_ATTACHED,
        SoftInputShowHideReason.HIDE_DOCKED_STACK_ATTACHED,
        SoftInputShowHideReason.HIDE_RECENTS_ANIMATION,
        SoftInputShowHideReason.HIDE_RECENTS_ANIMATION,
        SoftInputShowHideReason.HIDE_BUBBLES,
        SoftInputShowHideReason.HIDE_BUBBLES})
        SoftInputShowHideReason.HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR})
public @interface SoftInputShowHideReason {
public @interface SoftInputShowHideReason {
    /** Show soft input by {@link android.view.inputmethod.InputMethodManager#showSoftInput}. */
    /** Show soft input by {@link android.view.inputmethod.InputMethodManager#showSoftInput}. */
    int SHOW_SOFT_INPUT = 0;
    int SHOW_SOFT_INPUT = 0;
@@ -148,17 +147,4 @@ public @interface SoftInputShowHideReason {
     * switching, or collapsing Bubbles.
     * switching, or collapsing Bubbles.
     */
     */
    int HIDE_BUBBLES = 19;
    int HIDE_BUBBLES = 19;

    /**
     * Hide soft input when focusing the same window (e.g. screen turned-off and turn-on) which no
     * valid focused editor.
     *
     * Note: From Android R, the window focus change callback is processed by InputDispatcher,
     * some focus behavior changes (e.g. There are an activity with a dialog window, after
     * screen turned-off and turned-on, before Android R the window focus sequence would be
     * the activity first and then the dialog focused, however, in R the focus sequence would be
     * only the dialog focused as it's the latest window with input focus) makes we need to hide
     * soft-input when the same window focused again to align with the same behavior prior to R.
     */
    int HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR = 20;
}
}
+12 −32
Original line number Original line Diff line number Diff line
@@ -71,7 +71,6 @@ import android.inputmethodservice.InputMethodService;
import android.media.AudioManagerInternal;
import android.media.AudioManagerInternal;
import android.net.Uri;
import android.net.Uri;
import android.os.Binder;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Debug;
import android.os.Debug;
import android.os.Handler;
import android.os.Handler;
@@ -3274,9 +3273,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub


    boolean hideCurrentInputLocked(IBinder windowToken, int flags, ResultReceiver resultReceiver,
    boolean hideCurrentInputLocked(IBinder windowToken, int flags, ResultReceiver resultReceiver,
            @SoftInputShowHideReason int reason) {
            @SoftInputShowHideReason int reason) {
        if (mCurClient == null || mCurClient.curSession == null) {
            return false;
        }
        if ((flags&InputMethodManager.HIDE_IMPLICIT_ONLY) != 0
        if ((flags&InputMethodManager.HIDE_IMPLICIT_ONLY) != 0
                && (mShowExplicitlyRequested || mShowForced)) {
                && (mShowExplicitlyRequested || mShowForced)) {
            if (DEBUG) Slog.v(TAG, "Not hiding: explicit show not cancelled by non-explicit hide");
            if (DEBUG) Slog.v(TAG, "Not hiding: explicit show not cancelled by non-explicit hide");
@@ -3461,9 +3457,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
        // pre-rendering not supported on low-ram devices.
        // pre-rendering not supported on low-ram devices.
        cs.shouldPreRenderIme = DebugFlags.FLAG_PRE_RENDER_IME_VIEWS.value() && !mIsLowRam;
        cs.shouldPreRenderIme = DebugFlags.FLAG_PRE_RENDER_IME_VIEWS.value() && !mIsLowRam;


        final boolean sameWindowFocused = mCurFocusedWindow == windowToken;
        if (mCurFocusedWindow == windowToken) {
        final boolean isTextEditor = (startInputFlags & StartInputFlags.IS_TEXT_EDITOR) != 0;
        if (sameWindowFocused && isTextEditor) {
            if (DEBUG) {
            if (DEBUG) {
                Slog.w(TAG, "Window already focused, ignoring focus gain of: " + client
                Slog.w(TAG, "Window already focused, ignoring focus gain of: " + client
                        + " attribute=" + attribute + ", token = " + windowToken
                        + " attribute=" + attribute + ", token = " + windowToken
@@ -3478,7 +3472,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                    InputBindResult.ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
                    InputBindResult.ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
                    null, null, null, -1, null);
                    null, null, null, -1, null);
        }
        }

        mCurFocusedWindow = windowToken;
        mCurFocusedWindow = windowToken;
        mCurFocusedWindowSoftInputMode = softInputMode;
        mCurFocusedWindowSoftInputMode = softInputMode;
        mCurFocusedWindowClient = cs;
        mCurFocusedWindowClient = cs;
@@ -3496,6 +3489,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                        == LayoutParams.SOFT_INPUT_ADJUST_RESIZE
                        == LayoutParams.SOFT_INPUT_ADJUST_RESIZE
                || mRes.getConfiguration().isLayoutSizeAtLeast(
                || mRes.getConfiguration().isLayoutSizeAtLeast(
                        Configuration.SCREENLAYOUT_SIZE_LARGE);
                        Configuration.SCREENLAYOUT_SIZE_LARGE);
        final boolean isTextEditor = (startInputFlags & StartInputFlags.IS_TEXT_EDITOR) != 0;


        // We want to start input before showing the IME, but after closing
        // We want to start input before showing the IME, but after closing
        // it.  We want to do this after closing it to help the IME disappear
        // it.  We want to do this after closing it to help the IME disappear
@@ -3555,11 +3549,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                }
                }
                break;
                break;
            case LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN:
            case LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN:
                if (!sameWindowFocused) {
                if (DEBUG) Slog.v(TAG, "Window asks to hide input");
                if (DEBUG) Slog.v(TAG, "Window asks to hide input");
                hideCurrentInputLocked(mCurFocusedWindow, 0, null,
                hideCurrentInputLocked(mCurFocusedWindow, 0, null,
                        SoftInputShowHideReason.HIDE_ALWAYS_HIDDEN_STATE);
                        SoftInputShowHideReason.HIDE_ALWAYS_HIDDEN_STATE);
                }
                break;
                break;
            case LayoutParams.SOFT_INPUT_STATE_VISIBLE:
            case LayoutParams.SOFT_INPUT_STATE_VISIBLE:
                if ((softInputMode & LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION) != 0) {
                if ((softInputMode & LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION) != 0) {
@@ -3584,7 +3576,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                if (DEBUG) Slog.v(TAG, "Window asks to always show input");
                if (DEBUG) Slog.v(TAG, "Window asks to always show input");
                if (InputMethodUtils.isSoftInputModeStateVisibleAllowed(
                if (InputMethodUtils.isSoftInputModeStateVisibleAllowed(
                        unverifiedTargetSdkVersion, startInputFlags)) {
                        unverifiedTargetSdkVersion, startInputFlags)) {
                    if (!sameWindowFocused) {
                    if (attribute != null) {
                    if (attribute != null) {
                        res = startInputUncheckedLocked(cs, inputContext, missingMethods,
                        res = startInputUncheckedLocked(cs, inputContext, missingMethods,
                                attribute, startInputFlags, startInputReason);
                                attribute, startInputFlags, startInputReason);
@@ -3592,7 +3583,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                    }
                    }
                    showCurrentInputLocked(windowToken, InputMethodManager.SHOW_IMPLICIT, null,
                    showCurrentInputLocked(windowToken, InputMethodManager.SHOW_IMPLICIT, null,
                            SoftInputShowHideReason.SHOW_STATE_ALWAYS_VISIBLE);
                            SoftInputShowHideReason.SHOW_STATE_ALWAYS_VISIBLE);
                    }
                } else {
                } else {
                    Slog.e(TAG, "SOFT_INPUT_STATE_ALWAYS_VISIBLE is ignored because"
                    Slog.e(TAG, "SOFT_INPUT_STATE_ALWAYS_VISIBLE is ignored because"
                            + " there is no focused view that also returns true from"
                            + " there is no focused view that also returns true from"
@@ -3603,13 +3593,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub


        if (!didStart) {
        if (!didStart) {
            if (attribute != null) {
            if (attribute != null) {
                if (sameWindowFocused) {
                if (!DebugFlags.FLAG_OPTIMIZE_START_INPUT.value()
                    hideCurrentInputLocked(mCurFocusedWindow, 0, null,
                            SoftInputShowHideReason.HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR);
                    res = new InputBindResult(
                            InputBindResult.ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
                            null, null, null, -1, null);
                } else if (!DebugFlags.FLAG_OPTIMIZE_START_INPUT.value()
                        || (startInputFlags & StartInputFlags.IS_TEXT_EDITOR) != 0) {
                        || (startInputFlags & StartInputFlags.IS_TEXT_EDITOR) != 0) {
                    res = startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
                    res = startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
                            startInputFlags, startInputReason);
                            startInputFlags, startInputReason);
@@ -3623,10 +3607,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
        return res;
        return res;
    }
    }


    private boolean isImeVisible() {
        return (mImeWindowVis & InputMethodService.IME_VISIBLE) != 0;
    }

    private boolean canShowInputMethodPickerLocked(IInputMethodClient client) {
    private boolean canShowInputMethodPickerLocked(IInputMethodClient client) {
        // TODO(yukawa): multi-display support.
        // TODO(yukawa): multi-display support.
        final int uid = Binder.getCallingUid();
        final int uid = Binder.getCallingUid();