Check to show IME after committing finish drawing windows
This CL also sets the IME window to the provider before updating the target, so that we don't get null control or null control target. Fix: 149457480 Fix: 149462652 Test: Reboot device and click on an EditText Test: atest NavigationBarColorTest Change-Id: Iae0c4cf976e2c6816887420d5980ea39d17e4934
This commit is contained in:
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.android.server.wm;
|
||||
|
||||
import static android.app.ActivityTaskManager.INVALID_STACK_ID;
|
||||
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
|
||||
import static android.app.ActivityTaskManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT;
|
||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
|
||||
@@ -84,9 +83,6 @@ import static android.view.WindowManager.TRANSIT_ACTIVITY_OPEN;
|
||||
import static android.view.WindowManager.TRANSIT_TASK_OPEN;
|
||||
import static android.view.WindowManager.TRANSIT_TASK_TO_FRONT;
|
||||
|
||||
import static com.android.server.wm.DisplayContentProto.FOCUSED_ROOT_TASK_ID;
|
||||
import static com.android.server.wm.DisplayContentProto.RESUMED_ACTIVITY;
|
||||
import static com.android.server.wm.DisplayContentProto.SINGLE_TASK_INSTANCE;
|
||||
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM;
|
||||
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG;
|
||||
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
|
||||
@@ -105,12 +101,15 @@ import static com.android.server.wm.DisplayContentProto.DISPLAY_INFO;
|
||||
import static com.android.server.wm.DisplayContentProto.DOCKED_STACK_DIVIDER_CONTROLLER;
|
||||
import static com.android.server.wm.DisplayContentProto.DPI;
|
||||
import static com.android.server.wm.DisplayContentProto.FOCUSED_APP;
|
||||
import static com.android.server.wm.DisplayContentProto.FOCUSED_ROOT_TASK_ID;
|
||||
import static com.android.server.wm.DisplayContentProto.ID;
|
||||
import static com.android.server.wm.DisplayContentProto.OPENING_APPS;
|
||||
import static com.android.server.wm.DisplayContentProto.OVERLAY_WINDOWS;
|
||||
import static com.android.server.wm.DisplayContentProto.RESUMED_ACTIVITY;
|
||||
import static com.android.server.wm.DisplayContentProto.ROOT_DISPLAY_AREA;
|
||||
import static com.android.server.wm.DisplayContentProto.ROTATION;
|
||||
import static com.android.server.wm.DisplayContentProto.SCREEN_ROTATION_ANIMATION;
|
||||
import static com.android.server.wm.DisplayContentProto.SINGLE_TASK_INSTANCE;
|
||||
import static com.android.server.wm.DisplayContentProto.TASKS;
|
||||
import static com.android.server.wm.DisplayContentProto.WINDOW_CONTAINER;
|
||||
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
|
||||
@@ -3255,9 +3254,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
mWmService.mAtmInternal.onImeWindowSetOnDisplay(imePid,
|
||||
mInputMethodWindow.getDisplayId());
|
||||
}
|
||||
computeImeTarget(true /* updateImeTarget */);
|
||||
mInsetsStateController.getSourceProvider(ITYPE_IME).setWindow(win,
|
||||
null /* frameProvider */, null /* imeFrameProvider */);
|
||||
computeImeTarget(true /* updateImeTarget */);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3817,6 +3816,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
}
|
||||
prepareSurfaces();
|
||||
|
||||
// This should be called after the insets have been dispatched to clients and we have
|
||||
// committed finish drawing windows.
|
||||
mInsetsStateController.getImeSourceProvider().checkShowImePostLayout();
|
||||
|
||||
mLastHasContent = mTmpApplySurfaceChangesTransactionState.displayHasContent;
|
||||
mWmService.mDisplayManagerInternal.setDisplayProperties(mDisplayId,
|
||||
mLastHasContent,
|
||||
|
||||
@@ -38,13 +38,6 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider {
|
||||
super(source, stateController, displayContent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when Insets have been dispatched to client. This gets called just after onPostLayout.
|
||||
*/
|
||||
void onPostInsetsDispatched() {
|
||||
checkShowImePostLayout();
|
||||
}
|
||||
|
||||
/**
|
||||
* Called from {@link WindowManagerInternal#showImePostLayout} when {@link InputMethodService}
|
||||
* requests to show IME on {@param imeTarget}.
|
||||
@@ -80,7 +73,7 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider {
|
||||
};
|
||||
}
|
||||
|
||||
private void checkShowImePostLayout() {
|
||||
void checkShowImePostLayout() {
|
||||
// check if IME is drawn
|
||||
if (mIsImeLayoutDrawn
|
||||
|| (mImeTargetFromIme != null
|
||||
|
||||
@@ -168,7 +168,6 @@ class InsetsStateController {
|
||||
mLastState.set(mState, true /* copySources */);
|
||||
notifyInsetsChanged();
|
||||
}
|
||||
getImeSourceProvider().onPostInsetsDispatched();
|
||||
}
|
||||
|
||||
void onInsetsModified(InsetsControlTarget windowState, InsetsState state) {
|
||||
|
||||
Reference in New Issue
Block a user