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

Commit 6f1d3cb5 authored by Felix Stern's avatar Felix Stern Committed by Android (Google) Code Review
Browse files

Merge "Add ImeTracker logs for multi window mode" into main

parents a4d9c1a4 133512db
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -60,5 +60,5 @@ oneway interface IDisplayWindowInsetsController {
     * Reports the requested IME visibility of the IME input target to
     * the IDisplayWindowInsetsController
     */
    void setImeInputTargetRequestedVisibility(boolean visible);
    void setImeInputTargetRequestedVisibility(boolean visible, in ImeTracker.Token statsToken);
}
+3 −1
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import android.view.MotionEvent;
import android.view.InputChannel;
import android.view.InputDevice;
import android.view.IInputFilter;
import android.view.inputmethod.ImeTracker;
import android.view.AppTransitionAnimationSpec;
import android.view.WindowContentFrameStats;
import android.view.WindowManager;
@@ -765,7 +766,8 @@ interface IWindowManager
     * container.
     */
    @EnforcePermission("MANAGE_APP_TOKENS")
    void updateDisplayWindowRequestedVisibleTypes(int displayId, int requestedVisibleTypes);
    void updateDisplayWindowRequestedVisibleTypes(int displayId, int requestedVisibleTypes,
            in @nullable ImeTracker.Token statsToken);

    /**
     * Called to get the expected window insets.
+8 −0
Original line number Diff line number Diff line
@@ -222,6 +222,8 @@ public interface ImeTracker {
            PHASE_CLIENT_ALREADY_HIDDEN,
            PHASE_CLIENT_VIEW_HANDLER_AVAILABLE,
            PHASE_SERVER_UPDATE_CLIENT_VISIBILITY,
            PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE,
            PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES,
    })
    @Retention(RetentionPolicy.SOURCE)
    @interface Phase {}
@@ -436,6 +438,12 @@ public interface ImeTracker {
     * app or the RemoteInsetsControlTarget).
     */
    int PHASE_SERVER_UPDATE_CLIENT_VISIBILITY = ImeProtoEnums.PHASE_SERVER_UPDATE_CLIENT_VISIBILITY;
    /** DisplayImeController received the requested visibility for the IME and stored it. */
    int PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE =
            ImeProtoEnums.PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE;
    /** The control target reported its requestedVisibleTypes back to WindowManagerService. */
    int PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES =
            ImeProtoEnums.PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES;

    /**
     * Called when an IME request is started.
+14 −0
Original line number Diff line number Diff line
@@ -89,6 +89,8 @@ import java.lang.annotation.Retention;
        SoftInputShowHideReason.SHOW_SOFT_INPUT_IME_TOGGLE_SOFT_INPUT,
        SoftInputShowHideReason.SHOW_SOFT_INPUT_IMM_DEPRECATION,
        SoftInputShowHideReason.CONTROL_WINDOW_INSETS_ANIMATION,
        SoftInputShowHideReason.SHOW_INPUT_TARGET_CHANGED,
        SoftInputShowHideReason.HIDE_INPUT_TARGET_CHANGED,
})
public @interface SoftInputShowHideReason {
    /** Default, undefined reason. */
@@ -336,6 +338,18 @@ public @interface SoftInputShowHideReason {
     */
    int HIDE_WINDOW_LEGACY_DIRECT = ImeProtoEnums.REASON_HIDE_WINDOW_LEGACY_DIRECT;

    /**
     * Show soft input because the input target changed
     * {@link com.android.server.wm.ImeInsetsSourceProvider#onInputTargetChanged}.
     */
    int SHOW_INPUT_TARGET_CHANGED = ImeProtoEnums.REASON_SHOW_INPUT_TARGET_CHANGED;

    /**
     * Hide soft input because the input target changed by
     * {@link com.android.server.wm.ImeInsetsSourceProvider#onInputTargetChanged}.
     */
    int HIDE_INPUT_TARGET_CHANGED = ImeProtoEnums.REASON_HIDE_INPUT_TARGET_CHANGED;

    /**
     * Show / Hide soft input by
     * {@link android.inputmethodservice.InputMethodService#resetStateForNewConfiguration}.
+10 −7
Original line number Diff line number Diff line
@@ -403,8 +403,11 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged

        @Override
        // TODO(b/335404678): pass control target
        public void setImeInputTargetRequestedVisibility(boolean visible) {
        public void setImeInputTargetRequestedVisibility(boolean visible,
                @NonNull ImeTracker.Token statsToken) {
            if (android.view.inputmethod.Flags.refactorInsetsController()) {
                ImeTracker.forLogging().onProgress(statsToken,
                        ImeTracker.PHASE_WM_DISPLAY_IME_CONTROLLER_SET_IME_REQUESTED_VISIBLE);
                mImeRequestedVisible = visible;
                dispatchImeRequested(mDisplayId, mImeRequestedVisible);

@@ -414,21 +417,21 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
                // therefore have to start the show animation from here
                startAnimation(mImeRequestedVisible /* show */, false /* forceRestart */);

                setVisibleDirectly(mImeRequestedVisible || mAnimation != null);
                setVisibleDirectly(mImeRequestedVisible || mAnimation != null, statsToken);
            }
        }

        /**
         * Sends the local visibility state back to window manager. Needed for legacy adjustForIme.
         */
        private void setVisibleDirectly(boolean visible) {
        private void setVisibleDirectly(boolean visible, @Nullable ImeTracker.Token statsToken) {
            mInsetsState.setSourceVisible(InsetsSource.ID_IME, visible);
            mRequestedVisibleTypes = visible
                    ? mRequestedVisibleTypes | WindowInsets.Type.ime()
                    : mRequestedVisibleTypes & ~WindowInsets.Type.ime();
            try {
                mWmService.updateDisplayWindowRequestedVisibleTypes(mDisplayId,
                        mRequestedVisibleTypes);
                        mRequestedVisibleTypes, statsToken);
            } catch (RemoteException e) {
            }
        }
@@ -640,7 +643,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
                        t.hide(animatingLeash);
                        removeImeSurface(mDisplayId);
                        if (android.view.inputmethod.Flags.refactorInsetsController()) {
                            setVisibleDirectly(false /* visible */);
                            setVisibleDirectly(false /* visible */, statsToken);
                        }
                        ImeTracker.forLogging().onHidden(mStatsToken);
                    } else if (mAnimationDirection == DIRECTION_SHOW && !mCancelled) {
@@ -669,13 +672,13 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
            if (!android.view.inputmethod.Flags.refactorInsetsController() && !show) {
                // When going away, queue up insets change first, otherwise any bounds changes
                // can have a "flicker" of ime-provided insets.
                setVisibleDirectly(false /* visible */);
                setVisibleDirectly(false /* visible */, null /* statsToken */);
            }
            mAnimation.start();
            if (!android.view.inputmethod.Flags.refactorInsetsController() && show) {
                // When showing away, queue up insets change last, otherwise any bounds changes
                // can have a "flicker" of ime-provided insets.
                setVisibleDirectly(true /* visible */);
                setVisibleDirectly(true /* visible */, null /* statsToken */);
            }
        }

Loading