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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user