From fdec32c83f7dd828bb962833f220bbf5bc5f7d71 Mon Sep 17 00:00:00 2001 From: Tiger Huang Date: Fri, 10 Apr 2020 02:07:30 +0800 Subject: [PATCH] Re-send the IME control after IME is re-created The control would be revoked when setting window to the insets source provider. So this CL updates the control target again after IME window is set to the provider, and also refines the timing about updating IME control target. Fix: 152185205 Fix: 152698568 Fix: 153831557 Test: atest NexusLauncherTests:MemoryTests MultiDisplayClientTests Test: 1. Add Traditional Chinese as a secondary language in Setitngs. 2. Launch soft keyboard in Messages and use ZhuYin keyboard. 3. Tap microphone icon repeatedly (this will re-create IME). 4. See if the soft keyboard is missing. Test: Also make sure b/149920295 and b/152410995 stay fixed. Change-Id: Ic113f564e964ebb0ab3375cf1df78b3f912169da --- .../com/android/server/wm/DisplayContent.java | 36 ++++++++++++------- .../server/wm/WindowManagerService.java | 14 +++++--- .../com/android/server/wm/WindowState.java | 5 +++ 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 80a1a4592ff3d..5958d9bcfa64c 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -72,7 +72,6 @@ import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER; 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 android.window.DisplayAreaOrganizer.FEATURE_DEFAULT_TASK_CONTAINER; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG; @@ -198,7 +197,6 @@ import android.view.ViewRootImpl; import android.view.WindowInsets; import android.view.WindowManager; import android.view.WindowManagerPolicyConstants.PointerEventListener; -import android.window.ITaskOrganizer; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; @@ -538,6 +536,15 @@ class DisplayContent extends WindowContainer implements WindowManagerP @Override void onDisplayChanged(DisplayContent dc) { + if (dc != null && mDisplayContent != null + && mDisplayContent.mInputMethodInputTarget == this) { + dc.setInputMethodInputTarget(mDisplayContent.mInputMethodInputTarget); + mDisplayContent.mInputMethodInputTarget = null; + } super.onDisplayChanged(dc); // Window was not laid out for this display yet, so make sure mLayoutSeq does not match. if (dc != null && mInputWindowHandle.displayId != dc.getDisplayId()) {