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

Commit 8b9ca27c authored by Schneider Victor-tulias's avatar Schneider Victor-tulias Committed by Android (Google) Code Review
Browse files

Merge "Handle slow gesture handling" into main

parents ea784da6 7e768fbf
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -66,6 +66,8 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
    private Runnable mLiveTileCleanUpHandler;
    private Context mCtx;

    private boolean mRecentsAnimationStartPending = false;

    private final TaskStackChangeListener mLiveTileRestartListener = new TaskStackChangeListener() {
        @Override
        public void onActivityRestartAttempt(ActivityManager.RunningTaskInfo task,
@@ -100,6 +102,10 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
                .startRecentsActivity(intent, 0, null, null, null));
    }

    public boolean isRecentsAnimationStartPending() {
        return mRecentsAnimationStartPending;
    }

    /**
     * Starts a new recents animation for the activity with the given {@param intent}.
     */
@@ -109,6 +115,7 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
        ActiveGestureLog.INSTANCE.addLog(
                /* event= */ "startRecentsAnimation",
                /* gestureEvent= */ START_RECENTS_ANIMATION);
        mRecentsAnimationStartPending = true;
        // Notify if recents animation is still running
        if (mController != null) {
            String msg = "New recents animation started before old animation completed";
@@ -138,6 +145,7 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
            @Override
            public void onRecentsAnimationStart(RecentsAnimationController controller,
                    RecentsAnimationTargets targets) {
                mRecentsAnimationStartPending = false;
                if (mCallbacks == null) {
                    // It's possible for the recents animation to have finished and be cleaned up
                    // by the time we process the start callback, and in that case, just we can skip
@@ -178,11 +186,13 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn

            @Override
            public void onRecentsAnimationCanceled(HashMap<Integer, ThumbnailData> thumbnailDatas) {
                mRecentsAnimationStartPending = false;
                cleanUpRecentsAnimation(newCallbacks);
            }

            @Override
            public void onRecentsAnimationFinished(RecentsAnimationController controller) {
                mRecentsAnimationStartPending = false;
                cleanUpRecentsAnimation(newCallbacks);
            }

+16 −5
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.MOTION_DOWN;
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.MOTION_MOVE;
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.MOTION_UP;
import static com.android.quickstep.util.ActiveGestureErrorDetector.GestureEvent.RECENTS_ANIMATION_START_PENDING;
import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SYSTEM_WINDOWS_REASON_RECENTS;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SYSUI_PROXY;
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_UNFOLD_ANIMATION_FORWARDER;
@@ -697,7 +698,7 @@ public class TouchInteractionService extends Service {
    private void onInputEvent(InputEvent ev) {
        if (!(ev instanceof MotionEvent)) {
            ActiveGestureLog.INSTANCE.addLog(new CompoundString("TIS.onInputEvent: ")
                    .append("Cannot process input event, received unknown event ")
                    .append("Cannot process input event: received unknown event ")
                    .append(ev.toString()));
            return;
        }
@@ -710,22 +711,32 @@ public class TouchInteractionService extends Service {
        if (!isUserUnlocked || (mDeviceState.isButtonNavMode()
                && !isTrackpadMotionEvent(event))) {
            ActiveGestureLog.INSTANCE.addLog(new CompoundString("TIS.onInputEvent: ")
                    .append("Cannot process input event, ")
                    .append("Cannot process input event: ")
                    .append(!isUserUnlocked
                            ? "user is locked"
                            : "using 3-button nav and event is not a trackpad event"));
            return;
        }

        SafeCloseable traceToken = TraceHelper.INSTANCE.allowIpcs("TIS.onInputEvent");

        final int action = event.getActionMasked();
        // Note this will create a new consumer every mouse click, as after ACTION_UP from the click
        // an ACTION_HOVER_ENTER will fire as well.
        boolean isHoverActionWithoutConsumer = enableCursorHoverStates()
                && isHoverActionWithoutConsumer(event);
        if (mTaskAnimationManager.isRecentsAnimationStartPending()
                && (action == ACTION_DOWN || isHoverActionWithoutConsumer)) {
            ActiveGestureLog.INSTANCE.addLog(
                    new CompoundString("TIS.onInputEvent: ")
                            .append("Cannot process input event: a recents animation has been ")
                            .append("requested, but hasn't started."),
                    RECENTS_ANIMATION_START_PENDING);
            return;
        }

        SafeCloseable traceToken = TraceHelper.INSTANCE.allowIpcs("TIS.onInputEvent");

        CompoundString reasonString = action == ACTION_DOWN
                ? new CompoundString("onMotionEvent: ") : CompoundString.NO_OP;
                ? new CompoundString("TIS.onMotionEvent: ") : CompoundString.NO_OP;
        if (action == ACTION_DOWN || isHoverActionWithoutConsumer) {
            mRotationTouchHelper.setOrientationTransformIfNeeded(event);

+9 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ public class ActiveGestureErrorDetector {
        SET_ON_PAGE_TRANSITION_END_CALLBACK, CANCEL_CURRENT_ANIMATION, CLEANUP_SCREENSHOT,
        SCROLLER_ANIMATION_ABORTED, TASK_APPEARED, EXPECTING_TASK_APPEARED,
        FLAG_USING_OTHER_ACTIVITY_INPUT_CONSUMER, LAUNCHER_DESTROYED, RECENT_TASKS_MISSING,
        INVALID_VELOCITY_ON_SWIPE_UP,
        INVALID_VELOCITY_ON_SWIPE_UP, RECENTS_ANIMATION_START_PENDING,

        /**
         * These GestureEvents are specifically associated to state flags that get set in
@@ -273,6 +273,14 @@ public class ActiveGestureErrorDetector {
                case START_RECENTS_ANIMATION:
                    lastStartRecentAnimationEventEntryTime = eventEntry.getTime();
                    break;
                case RECENTS_ANIMATION_START_PENDING:
                    errorDetected |= printErrorIfTrue(
                            true,
                            prefix,
                            /* errorMessage= */ "new gesture attempted while a requested recents"
                                    + " animation is still pending.",
                            writer);
                    break;
                case EXPECTING_TASK_APPEARED:
                case MOTION_DOWN:
                case SET_END_TARGET: