Loading services/core/java/com/android/server/wm/DisplayContent.java +10 −37 Original line number Original line Diff line number Diff line Loading @@ -696,29 +696,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp */ */ private @Nullable Pair<IBinder, WindowContainerListener> mImeInputTargetTokenListenerPair; private @Nullable Pair<IBinder, WindowContainerListener> mImeInputTargetTokenListenerPair; /** * Used by {@link #getImeTarget} to return the IME target which the input method window on * top of for adjusting input method window surface layer Z-Ordering. * * @see #mImeLayeringTarget */ static final int IME_TARGET_LAYERING = 0; /** * Used by {@link #getImeTarget} to return the IME target which controls the IME insets * visibility and animation. * * @see #mImeControlTarget */ static final int IME_TARGET_CONTROL = 2; @IntDef(flag = false, prefix = { "IME_TARGET_" }, value = { IME_TARGET_LAYERING, IME_TARGET_CONTROL, }) @Retention(RetentionPolicy.SOURCE) @interface InputMethodTarget {} /** The surface parent window of the IME container. */ /** The surface parent window of the IME container. */ private WindowContainer mInputMethodSurfaceParentWindow; private WindowContainer mInputMethodSurfaceParentWindow; /** The surface parent of the IME container. */ /** The surface parent of the IME container. */ Loading Loading @@ -4324,20 +4301,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return defaultDc; return defaultDc; } } /** /** Returns the window the IME is on top of. */ * Returns the corresponding IME insets control target according the IME target type. @Nullable * WindowState getImeLayeringTarget() { * @param type The type of the IME target. return mImeLayeringTarget; * @see #IME_TARGET_LAYERING * @see #IME_TARGET_CONTROL */ InsetsControlTarget getImeTarget(@InputMethodTarget int type) { switch (type) { case IME_TARGET_LAYERING: return mImeLayeringTarget; case IME_TARGET_CONTROL: return mImeControlTarget; default: return null; } } } /** Returns the target which receives input from the IME. */ /** Returns the target which receives input from the IME. */ Loading @@ -4346,6 +4313,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return mImeInputTarget; return mImeInputTarget; } } /** Returns the target which controls the visibility and animation of the IME window. */ @Nullable InsetsControlTarget getImeControlTarget() { return mImeControlTarget; } // IMPORTANT: When introducing new dependencies in this method, make sure that // IMPORTANT: When introducing new dependencies in this method, make sure that // changes to those result in RootWindowContainer.updateDisplayImePolicyCache() // changes to those result in RootWindowContainer.updateDisplayImePolicyCache() // being called. // being called. Loading services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java +15 −17 Original line number Original line Diff line number Diff line Loading @@ -20,8 +20,6 @@ import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.InsetsSource.ID_IME; import static android.view.InsetsSource.ID_IME; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_IME; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_IME; import static com.android.server.wm.DisplayContent.IME_TARGET_CONTROL; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.ImeInsetsSourceProviderProto.IME_TARGET_FROM_IME_IDENTIFIER; import static com.android.server.wm.ImeInsetsSourceProviderProto.IME_TARGET_FROM_IME_IDENTIFIER; import static com.android.server.wm.ImeInsetsSourceProviderProto.INSETS_SOURCE_PROVIDER; import static com.android.server.wm.ImeInsetsSourceProviderProto.INSETS_SOURCE_PROVIDER; import static com.android.server.wm.WindowManagerService.H.UPDATE_MULTI_WINDOW_STACKS; import static com.android.server.wm.WindowManagerService.H.UPDATE_MULTI_WINDOW_STACKS; Loading Loading @@ -356,14 +354,15 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { InsetsControlTarget controlTarget = getControlTarget(); InsetsControlTarget controlTarget = getControlTarget(); if (caller != controlTarget) { if (caller != controlTarget) { if (Flags.refactorInsetsController()) { if (Flags.refactorInsetsController()) { if (isImeInputTarget(caller)) { final var imeInputTarget = mDisplayContent.getImeInputTarget(); reportImeInputTargetStateToControlTarget(caller, controlTarget, statsToken); if (caller == imeInputTarget) { reportImeInputTargetStateToControlTarget(imeInputTarget, controlTarget, statsToken); } else { } else { ProtoLog.w(WM_DEBUG_IME, ProtoLog.w(WM_DEBUG_IME, "Tried to update client visibility for non-IME input target %s " "Tried to update client visibility for non-IME input target %s " + "(current target: %s, IME requested: %s)", caller, + "(current target: %s, IME requested: %s)", caller, mDisplayContent.getImeInputTarget(), imeInputTarget, caller.isRequestedVisible(WindowInsets.Type.ime())); caller.isRequestedVisible(WindowInsets.Type.ime())); ImeTracker.forLogging().onFailed(statsToken, ImeTracker.forLogging().onFailed(statsToken, ImeTracker.PHASE_SERVER_UPDATE_CLIENT_VISIBILITY); ImeTracker.PHASE_SERVER_UPDATE_CLIENT_VISIBILITY); } } Loading Loading @@ -678,8 +677,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { // The window is not drawn, or it has pending insets. // The window is not drawn, or it has pending insets. return false; return false; } } final InsetsControlTarget imeLayeringTarget = final WindowState imeLayeringTarget = mDisplayContent.getImeLayeringTarget(); mDisplayContent.getImeTarget(IME_TARGET_LAYERING); if (imeLayeringTarget == null) { if (imeLayeringTarget == null) { // No IME layering target. // No IME layering target. return false; return false; Loading @@ -689,7 +687,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { // No IME control target. // No IME control target. return false; return false; } } if (controlTarget != mDisplayContent.getImeTarget(IME_TARGET_CONTROL)) { if (controlTarget != mDisplayContent.getImeControlTarget()) { // The control target does not match the one in DisplayContent. // The control target does not match the one in DisplayContent. return false; return false; } } Loading @@ -703,7 +701,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { } } ProtoLog.d(WM_DEBUG_IME, "imeLayeringTarget: %s mImeRequester: %s", ProtoLog.d(WM_DEBUG_IME, "imeLayeringTarget: %s mImeRequester: %s", imeLayeringTarget.getWindow().getName(), mImeRequester.getWindow() == null imeLayeringTarget.getName(), mImeRequester.getWindow() == null ? mImeRequester : mImeRequester.getWindow().getName()); ? mImeRequester : mImeRequester.getWindow().getName()); return isImeLayeringTarget(mImeRequester, imeLayeringTarget) return isImeLayeringTarget(mImeRequester, imeLayeringTarget) Loading Loading @@ -748,7 +746,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { */ */ private void logIsScheduledAndReadyToShowIme(boolean aborted) { private void logIsScheduledAndReadyToShowIme(boolean aborted) { final var windowState = mWindowContainer != null ? mWindowContainer.asWindowState() : null; final var windowState = mWindowContainer != null ? mWindowContainer.asWindowState() : null; final var imeLayeringTarget = mDisplayContent.getImeTarget(IME_TARGET_LAYERING); final var imeLayeringTarget = mDisplayContent.getImeLayeringTarget(); final var controlTarget = getControlTarget(); final var controlTarget = getControlTarget(); final var sb = new StringBuilder(); final var sb = new StringBuilder(); sb.append("showImePostLayout ").append(aborted ? "aborted" : "cancelled"); sb.append("showImePostLayout ").append(aborted ? "aborted" : "cancelled"); Loading @@ -767,7 +765,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { if (mImeRequester != null && imeLayeringTarget != null && controlTarget != null) { if (mImeRequester != null && imeLayeringTarget != null && controlTarget != null) { sb.append("\n"); sb.append("\n"); sb.append("controlTarget == DisplayContent.imeControlTarget: "); sb.append("controlTarget == DisplayContent.imeControlTarget: "); sb.append(controlTarget == mDisplayContent.getImeTarget(IME_TARGET_CONTROL)); sb.append(controlTarget == mDisplayContent.getImeControlTarget()); sb.append(", hasPendingControls: "); sb.append(", hasPendingControls: "); sb.append(mStateController.hasPendingControls(controlTarget)); sb.append(mStateController.hasPendingControls(controlTarget)); final boolean hasLeash = getLeash(controlTarget) != null; final boolean hasLeash = getLeash(controlTarget) != null; Loading Loading @@ -801,8 +799,8 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { * @param imeLayeringTarget the IME layering target. * @param imeLayeringTarget the IME layering target. */ */ private static boolean isImeLayeringTarget(@NonNull InsetsControlTarget target, private static boolean isImeLayeringTarget(@NonNull InsetsControlTarget target, @NonNull InsetsControlTarget imeLayeringTarget) { @NonNull WindowState imeLayeringTarget) { return !isWindowClosing(imeLayeringTarget.getWindow()) && target == imeLayeringTarget; return !isWindowClosing(imeLayeringTarget) && target == imeLayeringTarget; } } /** /** Loading @@ -814,10 +812,10 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { * @see WindowManagerPolicy#getSubWindowLayerFromTypeLw * @see WindowManagerPolicy#getSubWindowLayerFromTypeLw */ */ private static boolean isParentOfAndBelowImeLayeringTarget(@NonNull InsetsControlTarget target, private static boolean isParentOfAndBelowImeLayeringTarget(@NonNull InsetsControlTarget target, @NonNull InsetsControlTarget imeLayeringTarget) { @NonNull WindowState imeLayeringTarget) { return target.getWindow() != null return target.getWindow() != null && imeLayeringTarget.getWindow().getParentWindow() == target && imeLayeringTarget.getParentWindow() == target && imeLayeringTarget.getWindow().mSubLayer > target.getWindow().mSubLayer; && imeLayeringTarget.mSubLayer > target.getWindow().mSubLayer; } } /** /** Loading services/core/java/com/android/server/wm/TaskOrganizerController.java +3 −4 Original line number Original line Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static android.window.StartingWindowRemovalInfo.DEFER_MODE_ROTATION; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_WINDOW_ORGANIZER; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_WINDOW_ORGANIZER; import static com.android.server.wm.ActivityTaskManagerService.enforceTaskPermission; import static com.android.server.wm.ActivityTaskManagerService.enforceTaskPermission; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_STARTING_REVEAL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_STARTING_REVEAL; import static com.android.server.wm.WindowOrganizerController.configurationsAreEqualForOrganizer; import static com.android.server.wm.WindowOrganizerController.configurationsAreEqualForOrganizer; Loading Loading @@ -985,13 +984,13 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { return null; return null; } } final InsetsControlTarget imeLayeringTarget = dc.getImeTarget(IME_TARGET_LAYERING); final WindowState imeLayeringTarget = dc.getImeLayeringTarget(); if (imeLayeringTarget == null || imeLayeringTarget.getWindow() == null) { if (imeLayeringTarget == null) { return null; return null; } } // Avoid WindowState#getRootTask() so we don't attribute system windows to a task. // Avoid WindowState#getRootTask() so we don't attribute system windows to a task. final Task task = imeLayeringTarget.getWindow().getTask(); final Task task = imeLayeringTarget.getTask(); if (task == null) { if (task == null) { return null; return null; } } Loading services/core/java/com/android/server/wm/WindowManagerService.java +9 −11 Original line number Original line Diff line number Diff line Loading @@ -120,8 +120,6 @@ import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_ import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_WALLPAPER; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_WALLPAPER; import static com.android.server.wm.DisplayContent.IME_TARGET_CONTROL; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS; import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS; import static com.android.server.wm.SensitiveContentPackages.PackageInfo; import static com.android.server.wm.SensitiveContentPackages.PackageInfo; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; Loading Loading @@ -6923,9 +6921,9 @@ public class WindowManagerService extends IWindowManager.Stub mRoot.dumpTopFocusedDisplayId(pw); mRoot.dumpTopFocusedDisplayId(pw); mRoot.forAllDisplays(dc -> { mRoot.forAllDisplays(dc -> { final int displayId = dc.getDisplayId(); final int displayId = dc.getDisplayId(); final InsetsControlTarget imeLayeringTarget = dc.getImeTarget(IME_TARGET_LAYERING); final WindowState imeLayeringTarget = dc.getImeLayeringTarget(); final InputTarget imeInputTarget = dc.getImeInputTarget(); final InputTarget imeInputTarget = dc.getImeInputTarget(); final InsetsControlTarget imeControlTarget = dc.getImeTarget(IME_TARGET_CONTROL); final InsetsControlTarget imeControlTarget = dc.getImeControlTarget(); if (imeLayeringTarget != null) { if (imeLayeringTarget != null) { pw.print(" imeLayeringTarget in display# "); pw.print(displayId); pw.print(" imeLayeringTarget in display# "); pw.print(displayId); pw.print(' '); pw.println(imeLayeringTarget); pw.print(' '); pw.println(imeLayeringTarget); Loading Loading @@ -8328,12 +8326,12 @@ public class WindowManagerService extends IWindowManager.Stub // requested to be hidden. // requested to be hidden. dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout(); dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout(); } } if (dc != null && dc.getImeTarget(IME_TARGET_CONTROL) != null) { if (dc != null && dc.getImeControlTarget() != null) { ImeTracker.forLogging().onProgress(statsToken, ImeTracker.forLogging().onProgress(statsToken, ImeTracker.PHASE_WM_HAS_IME_INSETS_CONTROL_TARGET); ImeTracker.PHASE_WM_HAS_IME_INSETS_CONTROL_TARGET); ProtoLog.d(WM_DEBUG_IME, "hideIme imeControlTarget: %s", ProtoLog.d(WM_DEBUG_IME, "hideIme imeControlTarget: %s", dc.getImeTarget(IME_TARGET_CONTROL)); dc.getImeControlTarget()); dc.getImeTarget(IME_TARGET_CONTROL).hideInsets(WindowInsets.Type.ime(), dc.getImeControlTarget().hideInsets(WindowInsets.Type.ime(), true /* fromIme */, statsToken); true /* fromIme */, statsToken); } else { } else { ImeTracker.forLogging().onFailed(statsToken, ImeTracker.forLogging().onFailed(statsToken, Loading Loading @@ -8534,16 +8532,16 @@ public class WindowManagerService extends IWindowManager.Stub requestWindowName = requestWin != null ? requestWin.getName() : "null"; requestWindowName = requestWin != null ? requestWin.getName() : "null"; final DisplayContent dc = mRoot.getDisplayContent(displayId); final DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc != null) { if (dc != null) { final InsetsControlTarget controlTarget = dc.getImeTarget(IME_TARGET_CONTROL); final InsetsControlTarget controlTarget = dc.getImeControlTarget(); if (controlTarget != null) { if (controlTarget != null) { final WindowState w = InsetsControlTarget.asWindowOrNull(controlTarget); final WindowState w = InsetsControlTarget.asWindowOrNull(controlTarget); imeControlTargetName = w != null ? w.getName() : controlTarget.toString(); imeControlTargetName = w != null ? w.getName() : controlTarget.toString(); } else { } else { imeControlTargetName = "null"; imeControlTargetName = "null"; } } final InsetsControlTarget layeringTarget = dc.getImeTarget(IME_TARGET_LAYERING); final WindowState layeringTarget = dc.getImeLayeringTarget(); imeLayeringTargetName = layeringTarget != null imeLayeringTargetName = layeringTarget != null ? layeringTarget.getName() ? layeringTarget.getWindow().getName() : "null"; : "null"; final SurfaceControl imeParent = dc.mInputMethodSurfaceParent; final SurfaceControl imeParent = dc.mInputMethodSurfaceParent; imeSurfaceParentName = imeParent != null ? imeParent.toString() : "null"; imeSurfaceParentName = imeParent != null ? imeParent.toString() : "null"; if (show) { if (show) { Loading services/core/java/com/android/server/wm/WindowState.java +2 −4 Original line number Original line Diff line number Diff line Loading @@ -118,7 +118,6 @@ import static com.android.server.policy.WindowManagerPolicy.TRANSIT_ENTER; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_EXIT; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_EXIT; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_PREVIEW_DONE; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_PREVIEW_DONE; import static com.android.server.wm.AnimationSpecProto.MOVE; import static com.android.server.wm.AnimationSpecProto.MOVE; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.DisplayContent.logsGestureExclusionRestrictions; import static com.android.server.wm.DisplayContent.logsGestureExclusionRestrictions; import static com.android.server.wm.IdentifierProto.HASH_CODE; import static com.android.server.wm.IdentifierProto.HASH_CODE; import static com.android.server.wm.IdentifierProto.TITLE; import static com.android.server.wm.IdentifierProto.TITLE; Loading Loading @@ -5430,7 +5429,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } boolean isImeLayeringTarget() { boolean isImeLayeringTarget() { return getDisplayContent().getImeTarget(IME_TARGET_LAYERING) == this; return mDisplayContent.getImeLayeringTarget() == this; } } /** /** Loading @@ -5443,8 +5442,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Nullable @Nullable WindowState getImeLayeringTarget() { WindowState getImeLayeringTarget() { final InsetsControlTarget target = getDisplayContent().getImeTarget(IME_TARGET_LAYERING); return mDisplayContent.getImeLayeringTarget(); return target != null ? target.getWindow() : null; } } @Nullable @Nullable Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +10 −37 Original line number Original line Diff line number Diff line Loading @@ -696,29 +696,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp */ */ private @Nullable Pair<IBinder, WindowContainerListener> mImeInputTargetTokenListenerPair; private @Nullable Pair<IBinder, WindowContainerListener> mImeInputTargetTokenListenerPair; /** * Used by {@link #getImeTarget} to return the IME target which the input method window on * top of for adjusting input method window surface layer Z-Ordering. * * @see #mImeLayeringTarget */ static final int IME_TARGET_LAYERING = 0; /** * Used by {@link #getImeTarget} to return the IME target which controls the IME insets * visibility and animation. * * @see #mImeControlTarget */ static final int IME_TARGET_CONTROL = 2; @IntDef(flag = false, prefix = { "IME_TARGET_" }, value = { IME_TARGET_LAYERING, IME_TARGET_CONTROL, }) @Retention(RetentionPolicy.SOURCE) @interface InputMethodTarget {} /** The surface parent window of the IME container. */ /** The surface parent window of the IME container. */ private WindowContainer mInputMethodSurfaceParentWindow; private WindowContainer mInputMethodSurfaceParentWindow; /** The surface parent of the IME container. */ /** The surface parent of the IME container. */ Loading Loading @@ -4324,20 +4301,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return defaultDc; return defaultDc; } } /** /** Returns the window the IME is on top of. */ * Returns the corresponding IME insets control target according the IME target type. @Nullable * WindowState getImeLayeringTarget() { * @param type The type of the IME target. return mImeLayeringTarget; * @see #IME_TARGET_LAYERING * @see #IME_TARGET_CONTROL */ InsetsControlTarget getImeTarget(@InputMethodTarget int type) { switch (type) { case IME_TARGET_LAYERING: return mImeLayeringTarget; case IME_TARGET_CONTROL: return mImeControlTarget; default: return null; } } } /** Returns the target which receives input from the IME. */ /** Returns the target which receives input from the IME. */ Loading @@ -4346,6 +4313,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return mImeInputTarget; return mImeInputTarget; } } /** Returns the target which controls the visibility and animation of the IME window. */ @Nullable InsetsControlTarget getImeControlTarget() { return mImeControlTarget; } // IMPORTANT: When introducing new dependencies in this method, make sure that // IMPORTANT: When introducing new dependencies in this method, make sure that // changes to those result in RootWindowContainer.updateDisplayImePolicyCache() // changes to those result in RootWindowContainer.updateDisplayImePolicyCache() // being called. // being called. Loading
services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java +15 −17 Original line number Original line Diff line number Diff line Loading @@ -20,8 +20,6 @@ import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; import static android.view.InsetsSource.ID_IME; import static android.view.InsetsSource.ID_IME; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_IME; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_IME; import static com.android.server.wm.DisplayContent.IME_TARGET_CONTROL; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.ImeInsetsSourceProviderProto.IME_TARGET_FROM_IME_IDENTIFIER; import static com.android.server.wm.ImeInsetsSourceProviderProto.IME_TARGET_FROM_IME_IDENTIFIER; import static com.android.server.wm.ImeInsetsSourceProviderProto.INSETS_SOURCE_PROVIDER; import static com.android.server.wm.ImeInsetsSourceProviderProto.INSETS_SOURCE_PROVIDER; import static com.android.server.wm.WindowManagerService.H.UPDATE_MULTI_WINDOW_STACKS; import static com.android.server.wm.WindowManagerService.H.UPDATE_MULTI_WINDOW_STACKS; Loading Loading @@ -356,14 +354,15 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { InsetsControlTarget controlTarget = getControlTarget(); InsetsControlTarget controlTarget = getControlTarget(); if (caller != controlTarget) { if (caller != controlTarget) { if (Flags.refactorInsetsController()) { if (Flags.refactorInsetsController()) { if (isImeInputTarget(caller)) { final var imeInputTarget = mDisplayContent.getImeInputTarget(); reportImeInputTargetStateToControlTarget(caller, controlTarget, statsToken); if (caller == imeInputTarget) { reportImeInputTargetStateToControlTarget(imeInputTarget, controlTarget, statsToken); } else { } else { ProtoLog.w(WM_DEBUG_IME, ProtoLog.w(WM_DEBUG_IME, "Tried to update client visibility for non-IME input target %s " "Tried to update client visibility for non-IME input target %s " + "(current target: %s, IME requested: %s)", caller, + "(current target: %s, IME requested: %s)", caller, mDisplayContent.getImeInputTarget(), imeInputTarget, caller.isRequestedVisible(WindowInsets.Type.ime())); caller.isRequestedVisible(WindowInsets.Type.ime())); ImeTracker.forLogging().onFailed(statsToken, ImeTracker.forLogging().onFailed(statsToken, ImeTracker.PHASE_SERVER_UPDATE_CLIENT_VISIBILITY); ImeTracker.PHASE_SERVER_UPDATE_CLIENT_VISIBILITY); } } Loading Loading @@ -678,8 +677,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { // The window is not drawn, or it has pending insets. // The window is not drawn, or it has pending insets. return false; return false; } } final InsetsControlTarget imeLayeringTarget = final WindowState imeLayeringTarget = mDisplayContent.getImeLayeringTarget(); mDisplayContent.getImeTarget(IME_TARGET_LAYERING); if (imeLayeringTarget == null) { if (imeLayeringTarget == null) { // No IME layering target. // No IME layering target. return false; return false; Loading @@ -689,7 +687,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { // No IME control target. // No IME control target. return false; return false; } } if (controlTarget != mDisplayContent.getImeTarget(IME_TARGET_CONTROL)) { if (controlTarget != mDisplayContent.getImeControlTarget()) { // The control target does not match the one in DisplayContent. // The control target does not match the one in DisplayContent. return false; return false; } } Loading @@ -703,7 +701,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { } } ProtoLog.d(WM_DEBUG_IME, "imeLayeringTarget: %s mImeRequester: %s", ProtoLog.d(WM_DEBUG_IME, "imeLayeringTarget: %s mImeRequester: %s", imeLayeringTarget.getWindow().getName(), mImeRequester.getWindow() == null imeLayeringTarget.getName(), mImeRequester.getWindow() == null ? mImeRequester : mImeRequester.getWindow().getName()); ? mImeRequester : mImeRequester.getWindow().getName()); return isImeLayeringTarget(mImeRequester, imeLayeringTarget) return isImeLayeringTarget(mImeRequester, imeLayeringTarget) Loading Loading @@ -748,7 +746,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { */ */ private void logIsScheduledAndReadyToShowIme(boolean aborted) { private void logIsScheduledAndReadyToShowIme(boolean aborted) { final var windowState = mWindowContainer != null ? mWindowContainer.asWindowState() : null; final var windowState = mWindowContainer != null ? mWindowContainer.asWindowState() : null; final var imeLayeringTarget = mDisplayContent.getImeTarget(IME_TARGET_LAYERING); final var imeLayeringTarget = mDisplayContent.getImeLayeringTarget(); final var controlTarget = getControlTarget(); final var controlTarget = getControlTarget(); final var sb = new StringBuilder(); final var sb = new StringBuilder(); sb.append("showImePostLayout ").append(aborted ? "aborted" : "cancelled"); sb.append("showImePostLayout ").append(aborted ? "aborted" : "cancelled"); Loading @@ -767,7 +765,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { if (mImeRequester != null && imeLayeringTarget != null && controlTarget != null) { if (mImeRequester != null && imeLayeringTarget != null && controlTarget != null) { sb.append("\n"); sb.append("\n"); sb.append("controlTarget == DisplayContent.imeControlTarget: "); sb.append("controlTarget == DisplayContent.imeControlTarget: "); sb.append(controlTarget == mDisplayContent.getImeTarget(IME_TARGET_CONTROL)); sb.append(controlTarget == mDisplayContent.getImeControlTarget()); sb.append(", hasPendingControls: "); sb.append(", hasPendingControls: "); sb.append(mStateController.hasPendingControls(controlTarget)); sb.append(mStateController.hasPendingControls(controlTarget)); final boolean hasLeash = getLeash(controlTarget) != null; final boolean hasLeash = getLeash(controlTarget) != null; Loading Loading @@ -801,8 +799,8 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { * @param imeLayeringTarget the IME layering target. * @param imeLayeringTarget the IME layering target. */ */ private static boolean isImeLayeringTarget(@NonNull InsetsControlTarget target, private static boolean isImeLayeringTarget(@NonNull InsetsControlTarget target, @NonNull InsetsControlTarget imeLayeringTarget) { @NonNull WindowState imeLayeringTarget) { return !isWindowClosing(imeLayeringTarget.getWindow()) && target == imeLayeringTarget; return !isWindowClosing(imeLayeringTarget) && target == imeLayeringTarget; } } /** /** Loading @@ -814,10 +812,10 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider { * @see WindowManagerPolicy#getSubWindowLayerFromTypeLw * @see WindowManagerPolicy#getSubWindowLayerFromTypeLw */ */ private static boolean isParentOfAndBelowImeLayeringTarget(@NonNull InsetsControlTarget target, private static boolean isParentOfAndBelowImeLayeringTarget(@NonNull InsetsControlTarget target, @NonNull InsetsControlTarget imeLayeringTarget) { @NonNull WindowState imeLayeringTarget) { return target.getWindow() != null return target.getWindow() != null && imeLayeringTarget.getWindow().getParentWindow() == target && imeLayeringTarget.getParentWindow() == target && imeLayeringTarget.getWindow().mSubLayer > target.getWindow().mSubLayer; && imeLayeringTarget.mSubLayer > target.getWindow().mSubLayer; } } /** /** Loading
services/core/java/com/android/server/wm/TaskOrganizerController.java +3 −4 Original line number Original line Diff line number Diff line Loading @@ -23,7 +23,6 @@ import static android.window.StartingWindowRemovalInfo.DEFER_MODE_ROTATION; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_WINDOW_ORGANIZER; import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_WINDOW_ORGANIZER; import static com.android.server.wm.ActivityTaskManagerService.enforceTaskPermission; import static com.android.server.wm.ActivityTaskManagerService.enforceTaskPermission; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_STARTING_REVEAL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_STARTING_REVEAL; import static com.android.server.wm.WindowOrganizerController.configurationsAreEqualForOrganizer; import static com.android.server.wm.WindowOrganizerController.configurationsAreEqualForOrganizer; Loading Loading @@ -985,13 +984,13 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { return null; return null; } } final InsetsControlTarget imeLayeringTarget = dc.getImeTarget(IME_TARGET_LAYERING); final WindowState imeLayeringTarget = dc.getImeLayeringTarget(); if (imeLayeringTarget == null || imeLayeringTarget.getWindow() == null) { if (imeLayeringTarget == null) { return null; return null; } } // Avoid WindowState#getRootTask() so we don't attribute system windows to a task. // Avoid WindowState#getRootTask() so we don't attribute system windows to a task. final Task task = imeLayeringTarget.getWindow().getTask(); final Task task = imeLayeringTarget.getTask(); if (task == null) { if (task == null) { return null; return null; } } Loading
services/core/java/com/android/server/wm/WindowManagerService.java +9 −11 Original line number Original line Diff line number Diff line Loading @@ -120,8 +120,6 @@ import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_ import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_APP_COLOR_BACKGROUND_FLOATING; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_SOLID_COLOR; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_WALLPAPER; import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_BACKGROUND_WALLPAPER; import static com.android.server.wm.DisplayContent.IME_TARGET_CONTROL; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS; import static com.android.server.wm.RootWindowContainer.MATCH_ATTACHED_TASK_OR_RECENT_TASKS; import static com.android.server.wm.SensitiveContentPackages.PackageInfo; import static com.android.server.wm.SensitiveContentPackages.PackageInfo; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL; Loading Loading @@ -6923,9 +6921,9 @@ public class WindowManagerService extends IWindowManager.Stub mRoot.dumpTopFocusedDisplayId(pw); mRoot.dumpTopFocusedDisplayId(pw); mRoot.forAllDisplays(dc -> { mRoot.forAllDisplays(dc -> { final int displayId = dc.getDisplayId(); final int displayId = dc.getDisplayId(); final InsetsControlTarget imeLayeringTarget = dc.getImeTarget(IME_TARGET_LAYERING); final WindowState imeLayeringTarget = dc.getImeLayeringTarget(); final InputTarget imeInputTarget = dc.getImeInputTarget(); final InputTarget imeInputTarget = dc.getImeInputTarget(); final InsetsControlTarget imeControlTarget = dc.getImeTarget(IME_TARGET_CONTROL); final InsetsControlTarget imeControlTarget = dc.getImeControlTarget(); if (imeLayeringTarget != null) { if (imeLayeringTarget != null) { pw.print(" imeLayeringTarget in display# "); pw.print(displayId); pw.print(" imeLayeringTarget in display# "); pw.print(displayId); pw.print(' '); pw.println(imeLayeringTarget); pw.print(' '); pw.println(imeLayeringTarget); Loading Loading @@ -8328,12 +8326,12 @@ public class WindowManagerService extends IWindowManager.Stub // requested to be hidden. // requested to be hidden. dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout(); dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout(); } } if (dc != null && dc.getImeTarget(IME_TARGET_CONTROL) != null) { if (dc != null && dc.getImeControlTarget() != null) { ImeTracker.forLogging().onProgress(statsToken, ImeTracker.forLogging().onProgress(statsToken, ImeTracker.PHASE_WM_HAS_IME_INSETS_CONTROL_TARGET); ImeTracker.PHASE_WM_HAS_IME_INSETS_CONTROL_TARGET); ProtoLog.d(WM_DEBUG_IME, "hideIme imeControlTarget: %s", ProtoLog.d(WM_DEBUG_IME, "hideIme imeControlTarget: %s", dc.getImeTarget(IME_TARGET_CONTROL)); dc.getImeControlTarget()); dc.getImeTarget(IME_TARGET_CONTROL).hideInsets(WindowInsets.Type.ime(), dc.getImeControlTarget().hideInsets(WindowInsets.Type.ime(), true /* fromIme */, statsToken); true /* fromIme */, statsToken); } else { } else { ImeTracker.forLogging().onFailed(statsToken, ImeTracker.forLogging().onFailed(statsToken, Loading Loading @@ -8534,16 +8532,16 @@ public class WindowManagerService extends IWindowManager.Stub requestWindowName = requestWin != null ? requestWin.getName() : "null"; requestWindowName = requestWin != null ? requestWin.getName() : "null"; final DisplayContent dc = mRoot.getDisplayContent(displayId); final DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc != null) { if (dc != null) { final InsetsControlTarget controlTarget = dc.getImeTarget(IME_TARGET_CONTROL); final InsetsControlTarget controlTarget = dc.getImeControlTarget(); if (controlTarget != null) { if (controlTarget != null) { final WindowState w = InsetsControlTarget.asWindowOrNull(controlTarget); final WindowState w = InsetsControlTarget.asWindowOrNull(controlTarget); imeControlTargetName = w != null ? w.getName() : controlTarget.toString(); imeControlTargetName = w != null ? w.getName() : controlTarget.toString(); } else { } else { imeControlTargetName = "null"; imeControlTargetName = "null"; } } final InsetsControlTarget layeringTarget = dc.getImeTarget(IME_TARGET_LAYERING); final WindowState layeringTarget = dc.getImeLayeringTarget(); imeLayeringTargetName = layeringTarget != null imeLayeringTargetName = layeringTarget != null ? layeringTarget.getName() ? layeringTarget.getWindow().getName() : "null"; : "null"; final SurfaceControl imeParent = dc.mInputMethodSurfaceParent; final SurfaceControl imeParent = dc.mInputMethodSurfaceParent; imeSurfaceParentName = imeParent != null ? imeParent.toString() : "null"; imeSurfaceParentName = imeParent != null ? imeParent.toString() : "null"; if (show) { if (show) { Loading
services/core/java/com/android/server/wm/WindowState.java +2 −4 Original line number Original line Diff line number Diff line Loading @@ -118,7 +118,6 @@ import static com.android.server.policy.WindowManagerPolicy.TRANSIT_ENTER; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_EXIT; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_EXIT; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_PREVIEW_DONE; import static com.android.server.policy.WindowManagerPolicy.TRANSIT_PREVIEW_DONE; import static com.android.server.wm.AnimationSpecProto.MOVE; import static com.android.server.wm.AnimationSpecProto.MOVE; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.DisplayContent.logsGestureExclusionRestrictions; import static com.android.server.wm.DisplayContent.logsGestureExclusionRestrictions; import static com.android.server.wm.IdentifierProto.HASH_CODE; import static com.android.server.wm.IdentifierProto.HASH_CODE; import static com.android.server.wm.IdentifierProto.TITLE; import static com.android.server.wm.IdentifierProto.TITLE; Loading Loading @@ -5430,7 +5429,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } } boolean isImeLayeringTarget() { boolean isImeLayeringTarget() { return getDisplayContent().getImeTarget(IME_TARGET_LAYERING) == this; return mDisplayContent.getImeLayeringTarget() == this; } } /** /** Loading @@ -5443,8 +5442,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Nullable @Nullable WindowState getImeLayeringTarget() { WindowState getImeLayeringTarget() { final InsetsControlTarget target = getDisplayContent().getImeTarget(IME_TARGET_LAYERING); return mDisplayContent.getImeLayeringTarget(); return target != null ? target.getWindow() : null; } } @Nullable @Nullable Loading