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

Commit 20fce5ed authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge "Fix stale InputMethodManager#mFullscreenMode." into nyc-dev am:...

Merge "Merge "Fix stale InputMethodManager#mFullscreenMode." into nyc-dev am: 9f76abc8 am: 94c9aadc" into nyc-mr1-dev-plus-aosp
parents 5078e741 e16d2f8a
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
import android.os.Trace;
import android.text.TextUtils;
import android.text.style.SuggestionSpan;
import android.util.Log;
import android.util.Pools.Pool;
@@ -553,8 +554,9 @@ public final class InputMethodManager {
        }

        @Override
        protected void onReportFullscreenMode(boolean enabled) {
            mParentInputMethodManager.setFullscreenMode(enabled);
        protected void onReportFullscreenMode(boolean enabled, boolean calledInBackground) {
            mParentInputMethodManager.onReportFullscreenMode(enabled, calledInBackground,
                    getInputMethodId());
        }

        @Override
@@ -563,6 +565,7 @@ public final class InputMethodManager {
                    + "connection=" + getInputConnection()
                    + " finished=" + isFinished()
                    + " mParentInputMethodManager.mActive=" + mParentInputMethodManager.mActive
                    + " mInputMethodId=" + getInputMethodId()
                    + "}";
        }
    }
@@ -718,9 +721,14 @@ public final class InputMethodManager {
    }

    /** @hide */
    public void setFullscreenMode(boolean fullScreen) {
    public void onReportFullscreenMode(boolean fullScreen, boolean calledInBackground,
            String inputMethodId) {
        synchronized (mH) {
            if (!calledInBackground || TextUtils.equals(mCurId, inputMethodId)) {
                mFullscreenMode = fullScreen;
            }
        }
    }

    /** @hide */
    public void registerSuggestionSpansForNotification(SuggestionSpan[] spans) {
@@ -746,8 +754,10 @@ public final class InputMethodManager {
     * your UI, else returns false.
     */
    public boolean isFullscreenMode() {
        synchronized (mH) {
            return mFullscreenMode;
        }
    }

    /**
     * Return true if the given view is the currently active view for the
@@ -1254,6 +1264,9 @@ public final class InputMethodManager {
                        mCurId = res.id;
                        mNextUserActionNotificationSequenceNumber =
                                res.userActionNotificationSequenceNumber;
                        if (mServedInputConnectionWrapper != null) {
                            mServedInputConnectionWrapper.setInputMethodId(mCurId);
                        }
                    } else {
                        if (res.channel != null && res.channel != mCurChannel) {
                            res.channel.dispose();
+28 −6
Original line number Diff line number Diff line
@@ -71,6 +71,8 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
    private Object mLock = new Object();
    @GuardedBy("mLock")
    private boolean mFinished = false;
    @GuardedBy("mLock")
    private String mInputMethodId;

    static class SomeArgs {
        Object arg1;
@@ -109,6 +111,18 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
        }
    }

    public String getInputMethodId() {
        synchronized (mLock) {
            return mInputMethodId;
        }
    }

    public void setInputMethodId(final String inputMethodId) {
        synchronized (mLock) {
            mInputMethodId = inputMethodId;
        }
    }

    abstract protected boolean isActive();

    /**
@@ -119,9 +133,11 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {

    /**
     * Called when the input method started or stopped full-screen mode.
     *
     * @param enabled {@code true} if the input method starts full-screen mode.
     * @param calledInBackground {@code true} if this input connection is in a state when incoming
     * events are usually ignored.
     */
    abstract protected void onReportFullscreenMode(boolean enabled);
    abstract protected void onReportFullscreenMode(boolean enabled, boolean calledInBackground);

    public void getTextAfterCursor(int length, int flags, int seq, IInputContextCallback callback) {
        dispatchMessage(obtainMessageIISC(DO_GET_TEXT_AFTER_CURSOR, length, flags, seq, callback));
@@ -464,13 +480,19 @@ public abstract class IInputConnectionWrapper extends IInputContext.Stub {
            }
            case DO_REPORT_FULLSCREEN_MODE: {
                InputConnection ic = getInputConnection();
                if (ic == null) {
                boolean isBackground = false;
                if (ic == null || !isActive()) {
                    Log.w(TAG, "reportFullscreenMode on inexistent InputConnection");
                    return;
                    isBackground = true;
                }
                final boolean enabled = msg.arg1 == 1;
                if (!isBackground) {
                    ic.reportFullscreenMode(enabled);
                onReportFullscreenMode(enabled);
                }
                // Due to the nature of asynchronous event handling, currently InputMethodService
                // has relied on the fact that #reportFullscreenMode() can be handled even when the
                // InputConnection is inactive.  We have to notify this event to InputMethodManager.
                onReportFullscreenMode(enabled, isBackground);
                return;
            }
            case DO_PERFORM_PRIVATE_COMMAND: {