From: Charles Chen Date: Fri, 22 Mar 2019 08:49:24 +0000 (+0800) Subject: Unify context in ViewRoot X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=44f5215ee81d7406b6fb7b1fa0c95f106a35f618;p=android-x86%2Fframeworks-base.git 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 Test: atest ActivityManagerMultiDisplayTests Test: atest CtsInputMethodTestCases CtsInputMethodServiceHostTestCases Test: atest InputMethodManagerTest Test: atest InsetsControllerTest Test: atest InsetsSourceConsumerTest Test: atest ImeInsetsSourceConsumerTest Test: atest CtsActivityManagerDeviceTestCases:MultiDisplayClientTests Change-Id: Ic2010e8b533caf01418e0deb8062b8ff597c5abc --- diff --git a/core/java/android/view/ImeInsetsSourceConsumer.java b/core/java/android/view/ImeInsetsSourceConsumer.java index 2ba1e016e03d..1c811cb6e96c 100644 --- a/core/java/android/view/ImeInsetsSourceConsumer.java +++ b/core/java/android/view/ImeInsetsSourceConsumer.java @@ -172,6 +172,6 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer { } private InputMethodManager getImm() { - return mController.getViewRoot().mDisplayContext.getSystemService(InputMethodManager.class); + return mController.getViewRoot().mContext.getSystemService(InputMethodManager.class); } } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index f3b7ad5e557c..479d8068250c 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -302,13 +302,7 @@ public final class ViewRootImpl implements ViewParent, @GuardedBy("mWindowCallbacks") final ArrayList 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; @@ -618,7 +612,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(); @@ -1403,7 +1396,7 @@ public final class ViewRootImpl implements ViewParent, } else { mDisplay = preferredDisplay; } - mDisplayContext = mContext.createDisplayContext(mDisplay); + mContext.updateDisplay(mDisplay.getDisplayId()); } void pokeDrawLockIfNeeded() { @@ -2749,7 +2742,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(), @@ -2925,7 +2918,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); } @@ -4699,8 +4692,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(); } @@ -5245,7 +5237,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); diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 5e00425407ba..2cfd6226351e 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -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;