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

Commit 5299ad09 authored by Charles Chen's avatar Charles Chen
Browse files

Unify context in ViewRoot

To fix the issue that mContext is not updated when moved to another
display, we previously introduce mDisplayContext as a workaround in [1].
Change to use Context#updateDisplay(int) to unify mDisplayContext to
mContext.

[1]: Ifa0ca24e9cf764caf492ee065606680b6a06751a

Bug: 116349163
Change-Id: I3adbb32a584ac3405563904c1fd077e96e0807c1
Test: atest ActivityManagerMultiDisplayTests
Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases
Test: atest InputMethodManagerTest
Test: atest InsetsControllerTest
Test: atest InsetsSourceConsumerTest
Test: atest ImeInsetsSourceConsumerTest
Test: atest CtsActivityManagerDeviceTestCases:MultiDisplayClientTests
parent 414820ec
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -173,6 +173,6 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer {
    }

    private InputMethodManager getImm() {
        return mController.getViewRoot().mDisplayContext.getSystemService(InputMethodManager.class);
        return mController.getViewRoot().mContext.getSystemService(InputMethodManager.class);
    }
}
+6 −14
Original line number Diff line number Diff line
@@ -283,13 +283,7 @@ public final class ViewRootImpl implements ViewParent,
    @GuardedBy("mWindowCallbacks")
    final ArrayList<WindowCallbacks> mWindowCallbacks = new ArrayList<>();
    @UnsupportedAppUsage
    final Context mContext;
    /**
     * TODO(b/116349163): Check if we can merge this into {@link #mContext}.
     * @hide
     */
    @NonNull
    public Context mDisplayContext;
    public final Context mContext;

    @UnsupportedAppUsage
    final IWindowSession mWindowSession;
@@ -595,7 +589,6 @@ public final class ViewRootImpl implements ViewParent,

    public ViewRootImpl(Context context, Display display) {
        mContext = context;
        mDisplayContext = context.createDisplayContext(display);
        mWindowSession = WindowManagerGlobal.getWindowSession();
        mDisplay = display;
        mBasePackageName = context.getBasePackageName();
@@ -1379,7 +1372,7 @@ public final class ViewRootImpl implements ViewParent,
        } else {
            mDisplay = preferredDisplay;
        }
        mDisplayContext = mContext.createDisplayContext(mDisplay);
        mContext.updateDisplay(mDisplay.getDisplayId());
    }

    void pokeDrawLockIfNeeded() {
@@ -2725,7 +2718,7 @@ public final class ViewRootImpl implements ViewParent,
                    .mayUseInputMethod(mWindowAttributes.flags);
            if (imTarget != mLastWasImTarget) {
                mLastWasImTarget = imTarget;
                InputMethodManager imm = mDisplayContext.getSystemService(InputMethodManager.class);
                InputMethodManager imm = mContext.getSystemService(InputMethodManager.class);
                if (imm != null && imTarget) {
                    imm.onPreWindowFocus(mView, hasWindowFocus);
                    imm.onPostWindowFocus(mView, mView.findFocus(),
@@ -2859,7 +2852,7 @@ public final class ViewRootImpl implements ViewParent,
            mLastWasImTarget = WindowManager.LayoutParams
                    .mayUseInputMethod(mWindowAttributes.flags);

            InputMethodManager imm = mDisplayContext.getSystemService(InputMethodManager.class);
            InputMethodManager imm = mContext.getSystemService(InputMethodManager.class);
            if (imm != null && mLastWasImTarget && !isInLocalFocusMode()) {
                imm.onPreWindowFocus(mView, hasWindowFocus);
            }
@@ -4564,8 +4557,7 @@ public final class ViewRootImpl implements ViewParent,
                    enqueueInputEvent(event, null, 0, true);
                } break;
                case MSG_CHECK_FOCUS: {
                    InputMethodManager imm =
                            mDisplayContext.getSystemService(InputMethodManager.class);
                    InputMethodManager imm = mContext.getSystemService(InputMethodManager.class);
                    if (imm != null) {
                        imm.checkFocus();
                    }
@@ -5110,7 +5102,7 @@ public final class ViewRootImpl implements ViewParent,
        @Override
        protected int onProcess(QueuedInputEvent q) {
            if (mLastWasImTarget && !isInLocalFocusMode()) {
                InputMethodManager imm = mDisplayContext.getSystemService(InputMethodManager.class);
                InputMethodManager imm = mContext.getSystemService(InputMethodManager.class);
                if (imm != null) {
                    final InputEvent event = q.mEvent;
                    if (DEBUG_IMF) Log.v(mTag, "Sending input event to IME: " + event);
+1 −1
Original line number Diff line number Diff line
@@ -510,7 +510,7 @@ public final class InputMethodManager {
            return null;
        }
        final InputMethodManager fallbackImm =
                viewRootImpl.mDisplayContext.getSystemService(InputMethodManager.class);
                viewRootImpl.mContext.getSystemService(InputMethodManager.class);
        if (fallbackImm == null) {
            Log.e(TAG, "b/117267690: Failed to get non-null fallback IMM. view=" + view);
            return null;