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
This commit is contained in:
Charles Chen
2019-03-22 16:49:24 +08:00
parent b066ba1699
commit 44f5215ee8
3 changed files with 8 additions and 16 deletions

View File

@@ -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);
}
}

View File

@@ -302,13 +302,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;
@@ -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);

View File

@@ -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;