Merge "Deliver hideInsets when target is removed" into rvc-dev am: bb6c1e09ad am: 553b71a5b2 am: e15666d78c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12011265

Change-Id: I4d62f2afdd60058d8697a795edf1365837ec4853
This commit is contained in:
TreeHugger Robot
2020-07-01 17:23:08 +00:00
committed by Automerger Merge Worker
4 changed files with 34 additions and 16 deletions

View File

@@ -757,6 +757,12 @@
"group": "WM_DEBUG_BOOT", "group": "WM_DEBUG_BOOT",
"at": "com\/android\/server\/wm\/WindowManagerService.java" "at": "com\/android\/server\/wm\/WindowManagerService.java"
}, },
"-547111355": {
"message": "hideIme Control target: %s ",
"level": "DEBUG",
"group": "WM_DEBUG_IME",
"at": "com\/android\/server\/wm\/WindowManagerService.java"
},
"-545190927": { "-545190927": {
"message": "<<< CLOSE TRANSACTION animate", "message": "<<< CLOSE TRANSACTION animate",
"level": "INFO", "level": "INFO",
@@ -1087,6 +1093,12 @@
"group": "WM_ERROR", "group": "WM_ERROR",
"at": "com\/android\/server\/wm\/WindowManagerService.java" "at": "com\/android\/server\/wm\/WindowManagerService.java"
}, },
"95216706": {
"message": "hideIme target: %s ",
"level": "DEBUG",
"group": "WM_DEBUG_IME",
"at": "com\/android\/server\/wm\/WindowManagerService.java"
},
"95281111": { "95281111": {
"message": "Attempted to get IME flag of a display that does not exist: %d", "message": "Attempted to get IME flag of a display that does not exist: %d",
"level": "WARN", "level": "WARN",

View File

@@ -4047,7 +4047,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
// Send it to window manager to hide IME from IME target window. // Send it to window manager to hide IME from IME target window.
// TODO(b/139861270): send to mCurClient.client once IMMS is aware of // TODO(b/139861270): send to mCurClient.client once IMMS is aware of
// actual IME target. // actual IME target.
mWindowManagerInternal.hideIme(mHideRequestWindowMap.get(windowToken)); mWindowManagerInternal.hideIme(
mHideRequestWindowMap.get(windowToken),
mCurClient.selfReportedDisplayId);
} }
} else { } else {
// Send to window manager to show IME after IME layout finishes. // Send to window manager to show IME after IME layout finishes.

View File

@@ -528,8 +528,9 @@ public abstract class WindowManagerInternal {
* Hide IME using imeTargetWindow when requested. * Hide IME using imeTargetWindow when requested.
* *
* @param imeTargetWindowToken token of the (IME target) window on which IME should be hidden. * @param imeTargetWindowToken token of the (IME target) window on which IME should be hidden.
* @param displayId the id of the display the IME is on.
*/ */
public abstract void hideIme(IBinder imeTargetWindowToken); public abstract void hideIme(IBinder imeTargetWindowToken, int displayId);
/** /**
* Tell window manager about a package that should not be running with high refresh rate * Tell window manager about a package that should not be running with high refresh rate

View File

@@ -90,6 +90,7 @@ import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ADD_REMOVE;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_BOOT; import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_BOOT;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_FOCUS; import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_FOCUS;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_FOCUS_LIGHT; import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_FOCUS_LIGHT;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_IME;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_KEEP_SCREEN_ON; import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_KEEP_SCREEN_ON;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ORIENTATION; import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_ORIENTATION;
import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_SCREEN_ON; import static com.android.server.wm.ProtoLogGroup.WM_DEBUG_SCREEN_ON;
@@ -7616,26 +7617,28 @@ public class WindowManagerService extends IWindowManager.Stub
} }
@Override @Override
public void hideIme(IBinder imeTargetWindowToken) { public void hideIme(IBinder imeTargetWindowToken, int displayId) {
synchronized (mGlobalLock) { synchronized (mGlobalLock) {
WindowState imeTarget = mWindowMap.get(imeTargetWindowToken); WindowState imeTarget = mWindowMap.get(imeTargetWindowToken);
if (imeTarget == null) { ProtoLog.d(WM_DEBUG_IME, "hideIme target: %s ", imeTarget);
// The target window no longer exists. DisplayContent dc = mRoot.getDisplayContent(displayId);
return; if (imeTarget != null) {
}
imeTarget = imeTarget.getImeControlTarget().getWindow(); imeTarget = imeTarget.getImeControlTarget().getWindow();
final DisplayContent dc = imeTarget != null if (imeTarget != null) {
? imeTarget.getDisplayContent() : getDefaultDisplayContentLocked(); dc = imeTarget.getDisplayContent();
}
// If there was a pending IME show(), reset it as IME has been // If there was a pending IME show(), reset it as IME has been
// requested to be hidden. // requested to be hidden.
dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout(); dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout();
if (dc.mInputMethodControlTarget == null) {
return;
} }
if (dc != null && dc.mInputMethodControlTarget != null) {
ProtoLog.d(WM_DEBUG_IME, "hideIme Control target: %s ",
dc.mInputMethodControlTarget);
dc.mInputMethodControlTarget.hideInsets( dc.mInputMethodControlTarget.hideInsets(
WindowInsets.Type.ime(), true /* fromIme */); WindowInsets.Type.ime(), true /* fromIme */);
} }
} }
}
@Override @Override
public boolean isUidAllowedOnDisplay(int displayId, int uid) { public boolean isUidAllowedOnDisplay(int displayId, int uid) {