Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6f44e34 authored by Cosmin Băieș's avatar Cosmin Băieș Committed by Android (Google) Code Review
Browse files

Merge "Split getImeTarget into separate methods" into main

parents d1f618bd 532caa2b
Loading
Loading
Loading
Loading
+10 −37
Original line number Original line Diff line number Diff line
@@ -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. */
@@ -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. */
@@ -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.
+15 −17
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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);
                }
                }
@@ -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;
@@ -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;
        }
        }
@@ -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)
@@ -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");
@@ -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;
@@ -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;
    }
    }


    /**
    /**
@@ -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;
    }
    }


    /**
    /**
+3 −4
Original line number Original line Diff line number Diff line
@@ -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;


@@ -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;
                }
                }
+9 −11
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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);
@@ -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,
@@ -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) {
+2 −4
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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;
    }
    }


    /**
    /**
@@ -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