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 Diff line number Diff line
@@ -696,29 +696,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
     */
    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. */
    private WindowContainer mInputMethodSurfaceParentWindow;
    /** The surface parent of the IME container. */
@@ -4324,20 +4301,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        return defaultDc;
    }

    /**
     * Returns the corresponding IME insets control target according the IME target type.
     *
     * @param type The type of the IME target.
     * @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 window the IME is on top of. */
    @Nullable
    WindowState getImeLayeringTarget() {
        return mImeLayeringTarget;
    }

    /** Returns the target which receives input from the IME. */
@@ -4346,6 +4313,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        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
    // changes to those result in RootWindowContainer.updateDisplayImePolicyCache()
    // being called.
+15 −17
Original line number 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 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.INSETS_SOURCE_PROVIDER;
import static com.android.server.wm.WindowManagerService.H.UPDATE_MULTI_WINDOW_STACKS;
@@ -356,14 +354,15 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
        InsetsControlTarget controlTarget = getControlTarget();
        if (caller != controlTarget) {
            if (Flags.refactorInsetsController()) {
                if (isImeInputTarget(caller)) {
                    reportImeInputTargetStateToControlTarget(caller, controlTarget, statsToken);
                final var imeInputTarget = mDisplayContent.getImeInputTarget();
                if (caller == imeInputTarget) {
                    reportImeInputTargetStateToControlTarget(imeInputTarget, controlTarget,
                            statsToken);
                } else {
                    ProtoLog.w(WM_DEBUG_IME,
                            "Tried to update client visibility for non-IME input target %s "
                                    + "(current target: %s, IME requested: %s)", caller,
                            mDisplayContent.getImeInputTarget(),
                            caller.isRequestedVisible(WindowInsets.Type.ime()));
                            imeInputTarget, caller.isRequestedVisible(WindowInsets.Type.ime()));
                    ImeTracker.forLogging().onFailed(statsToken,
                            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.
            return false;
        }
        final InsetsControlTarget imeLayeringTarget =
                mDisplayContent.getImeTarget(IME_TARGET_LAYERING);
        final WindowState imeLayeringTarget = mDisplayContent.getImeLayeringTarget();
        if (imeLayeringTarget == null) {
            // No IME layering target.
            return false;
@@ -689,7 +687,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
            // No IME control target.
            return false;
        }
        if (controlTarget != mDisplayContent.getImeTarget(IME_TARGET_CONTROL)) {
        if (controlTarget != mDisplayContent.getImeControlTarget()) {
            // The control target does not match the one in DisplayContent.
            return false;
        }
@@ -703,7 +701,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
        }

        ProtoLog.d(WM_DEBUG_IME, "imeLayeringTarget: %s mImeRequester: %s",
                imeLayeringTarget.getWindow().getName(), mImeRequester.getWindow() == null
                imeLayeringTarget.getName(), mImeRequester.getWindow() == null
                        ? mImeRequester : mImeRequester.getWindow().getName());

        return isImeLayeringTarget(mImeRequester, imeLayeringTarget)
@@ -748,7 +746,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
     */
    private void logIsScheduledAndReadyToShowIme(boolean aborted) {
        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 sb = new StringBuilder();
        sb.append("showImePostLayout ").append(aborted ? "aborted" : "cancelled");
@@ -767,7 +765,7 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
        if (mImeRequester != null && imeLayeringTarget != null && controlTarget != null) {
            sb.append("\n");
            sb.append("controlTarget == DisplayContent.imeControlTarget: ");
            sb.append(controlTarget == mDisplayContent.getImeTarget(IME_TARGET_CONTROL));
            sb.append(controlTarget == mDisplayContent.getImeControlTarget());
            sb.append(", hasPendingControls: ");
            sb.append(mStateController.hasPendingControls(controlTarget));
            final boolean hasLeash = getLeash(controlTarget) != null;
@@ -801,8 +799,8 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
     * @param imeLayeringTarget the IME layering target.
     */
    private static boolean isImeLayeringTarget(@NonNull InsetsControlTarget target,
            @NonNull InsetsControlTarget imeLayeringTarget) {
        return !isWindowClosing(imeLayeringTarget.getWindow()) && target == imeLayeringTarget;
            @NonNull WindowState imeLayeringTarget) {
        return !isWindowClosing(imeLayeringTarget) && target == imeLayeringTarget;
    }

    /**
@@ -814,10 +812,10 @@ final class ImeInsetsSourceProvider extends InsetsSourceProvider {
     * @see WindowManagerPolicy#getSubWindowLayerFromTypeLw
     */
    private static boolean isParentOfAndBelowImeLayeringTarget(@NonNull InsetsControlTarget target,
            @NonNull InsetsControlTarget imeLayeringTarget) {
            @NonNull WindowState imeLayeringTarget) {
        return target.getWindow() != null
                && imeLayeringTarget.getWindow().getParentWindow() == target
                && imeLayeringTarget.getWindow().mSubLayer > target.getWindow().mSubLayer;
                && imeLayeringTarget.getParentWindow() == target
                && imeLayeringTarget.mSubLayer > target.getWindow().mSubLayer;
    }

    /**
+3 −4
Original line number 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.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.WindowOrganizerController.configurationsAreEqualForOrganizer;

@@ -985,13 +984,13 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
                    return null;
                }

                final InsetsControlTarget imeLayeringTarget = dc.getImeTarget(IME_TARGET_LAYERING);
                if (imeLayeringTarget == null || imeLayeringTarget.getWindow() == null) {
                final WindowState imeLayeringTarget = dc.getImeLayeringTarget();
                if (imeLayeringTarget == null) {
                    return null;
                }

                // 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) {
                    return null;
                }
+9 −11
Original line number 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_SOLID_COLOR;
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.SensitiveContentPackages.PackageInfo;
import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_ALL;
@@ -6923,9 +6921,9 @@ public class WindowManagerService extends IWindowManager.Stub
        mRoot.dumpTopFocusedDisplayId(pw);
        mRoot.forAllDisplays(dc -> {
            final int displayId = dc.getDisplayId();
            final InsetsControlTarget imeLayeringTarget = dc.getImeTarget(IME_TARGET_LAYERING);
            final WindowState imeLayeringTarget = dc.getImeLayeringTarget();
            final InputTarget imeInputTarget = dc.getImeInputTarget();
            final InsetsControlTarget imeControlTarget = dc.getImeTarget(IME_TARGET_CONTROL);
            final InsetsControlTarget imeControlTarget = dc.getImeControlTarget();
            if (imeLayeringTarget != null) {
                pw.print("  imeLayeringTarget in display# "); pw.print(displayId);
                pw.print(' '); pw.println(imeLayeringTarget);
@@ -8328,12 +8326,12 @@ public class WindowManagerService extends IWindowManager.Stub
                    // requested to be hidden.
                    dc.getInsetsStateController().getImeSourceProvider().abortShowImePostLayout();
                }
                if (dc != null && dc.getImeTarget(IME_TARGET_CONTROL) != null) {
                if (dc != null && dc.getImeControlTarget() != null) {
                    ImeTracker.forLogging().onProgress(statsToken,
                            ImeTracker.PHASE_WM_HAS_IME_INSETS_CONTROL_TARGET);
                    ProtoLog.d(WM_DEBUG_IME, "hideIme imeControlTarget: %s",
                            dc.getImeTarget(IME_TARGET_CONTROL));
                    dc.getImeTarget(IME_TARGET_CONTROL).hideInsets(WindowInsets.Type.ime(),
                            dc.getImeControlTarget());
                    dc.getImeControlTarget().hideInsets(WindowInsets.Type.ime(),
                            true /* fromIme */, statsToken);
                } else {
                    ImeTracker.forLogging().onFailed(statsToken,
@@ -8534,16 +8532,16 @@ public class WindowManagerService extends IWindowManager.Stub
                requestWindowName = requestWin != null ? requestWin.getName() : "null";
                final DisplayContent dc = mRoot.getDisplayContent(displayId);
                if (dc != null) {
                    final InsetsControlTarget controlTarget = dc.getImeTarget(IME_TARGET_CONTROL);
                    final InsetsControlTarget controlTarget = dc.getImeControlTarget();
                    if (controlTarget != null) {
                        final WindowState w = InsetsControlTarget.asWindowOrNull(controlTarget);
                        imeControlTargetName = w != null ? w.getName() : controlTarget.toString();
                    } else {
                        imeControlTargetName = "null";
                    }
                    final InsetsControlTarget layeringTarget = dc.getImeTarget(IME_TARGET_LAYERING);
                    imeLayeringTargetName = layeringTarget != null
                            ? layeringTarget.getWindow().getName() : "null";
                    final WindowState layeringTarget = dc.getImeLayeringTarget();
                    imeLayeringTargetName = layeringTarget != null ? layeringTarget.getName()
                            : "null";
                    final SurfaceControl imeParent = dc.mInputMethodSurfaceParent;
                    imeSurfaceParentName = imeParent != null ? imeParent.toString() : "null";
                    if (show) {
+2 −4
Original line number 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_PREVIEW_DONE;
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.IdentifierProto.HASH_CODE;
import static com.android.server.wm.IdentifierProto.TITLE;
@@ -5430,7 +5429,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
    }

    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
    WindowState getImeLayeringTarget() {
        final InsetsControlTarget target = getDisplayContent().getImeTarget(IME_TARGET_LAYERING);
        return target != null ? target.getWindow() : null;
        return mDisplayContent.getImeLayeringTarget();
    }

    @Nullable
Loading