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

Commit 7f553365 authored by Vadim Tryshev's avatar Vadim Tryshev
Browse files

Focusing on the second task on Alt+Tab

Reusing the quick scrub codepath. I’m postponing the cleanup with
removing duplicated code and isolating the reused code so that it’s
separated from touch events.

I’m accumulating the cleanup notes in a doc, and will create a Q bug
from them at the end.

This CL leaves mOverviewCommandHelper.onOverviewShown/Hidden() unused,
but we may use them later when implementing the case when System UI
invokes the callback with different params.

Note that the noew code works even when Alt+Tab is pressed while the
Overview is already open.

Bug: 73090995
Test: Alt+Tab. Alt+Tab while Overview is open.
Change-Id: Iba05c5628959b3640ddd643dead0fba3ae4714c1
parent edc6fb40
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -55,6 +55,8 @@ public class MotionEventQueue {
            ACTION_VIRTUAL | (5 << ACTION_POINTER_INDEX_SHIFT);
    private static final int ACTION_DEFER_INIT =
            ACTION_VIRTUAL | (6 << ACTION_POINTER_INDEX_SHIFT);
    private static final int ACTION_SHOW_OVERVIEW_FROM_ALT_TAB =
            ACTION_VIRTUAL | (7 << ACTION_POINTER_INDEX_SHIFT);

    private final EventArray mEmptyArray = new EventArray();
    private final Object mExecutionLock = new Object();
@@ -161,6 +163,10 @@ public class MotionEventQueue {
                        case ACTION_DEFER_INIT:
                            mConsumer.deferInit();
                            break;
                        case ACTION_SHOW_OVERVIEW_FROM_ALT_TAB:
                            mConsumer.onShowOverviewFromAltTab();
                            mConsumer.updateTouchTracking(INTERACTION_QUICK_SCRUB);
                            break;
                        default:
                            Log.e(TAG, "Invalid virtual event: " + event.getAction());
                    }
@@ -197,6 +203,10 @@ public class MotionEventQueue {
        queueVirtualAction(ACTION_QUICK_SCRUB_START, 0);
    }

    public void onOverviewShownFromAltTab() {
        queueVirtualAction(ACTION_SHOW_OVERVIEW_FROM_ALT_TAB, 0);
    }

    public void onQuickScrubProgress(float progress) {
        queueVirtualAction(ACTION_QUICK_SCRUB_PROGRESS, progress);
    }
+6 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.util.Log;
import android.os.SystemClock;
import android.view.Choreographer;
import android.view.Display;
import android.view.MotionEvent;
@@ -106,6 +106,11 @@ public class OtherActivityTouchConsumer extends ContextWrapper implements TouchC
        mIsDeferredDownTarget = Arrays.binarySearch(DEFERRED_HIT_TARGETS, downHitTarget) >= 0;
    }

    @Override
    public void onShowOverviewFromAltTab() {
        startTouchTrackingForWindowAnimation(SystemClock.uptimeMillis());
    }

    @Override
    public void accept(MotionEvent ev) {
        if (mVelocityTracker == null) {
+2 −0
Original line number Diff line number Diff line
@@ -72,4 +72,6 @@ public interface TouchConsumer extends Consumer<MotionEvent> {
    default boolean forceToLauncherConsumer() {
        return false;
    }

    default void onShowOverviewFromAltTab() {}
}
+13 −4
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.view.MotionEvent.ACTION_MOVE;
import static android.view.MotionEvent.ACTION_POINTER_DOWN;
import static android.view.MotionEvent.ACTION_POINTER_UP;
import static android.view.MotionEvent.ACTION_UP;

import static com.android.launcher3.LauncherState.FAST_OVERVIEW;
import static com.android.launcher3.LauncherState.NORMAL;

@@ -54,6 +55,8 @@ import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.NavigationBarCompat.HitTarget;

import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_NONE;

/**
 * Service connected by system-UI for handling touch interaction.
 */
@@ -85,7 +88,7 @@ public class TouchInteractionService extends Service {
        @Override
        public void onPreMotionEvent(@HitTarget int downHitTarget) throws RemoteException {
            TraceHelper.beginSection("SysUiBinder");
            onBinderPreMotionEvent(downHitTarget);
            setupTouchConsumer(downHitTarget);
            TraceHelper.partitionSection("SysUiBinder", "Down target " + downHitTarget);
        }

@@ -139,14 +142,20 @@ public class TouchInteractionService extends Service {
        @Override
        public void onOverviewShown(boolean triggeredFromAltTab) {
            if (DEBUG_OPEN_OVERVIEW_VIA_ALT_TAB) {
                mOverviewCommandHelper.onOverviewShown();
                if (triggeredFromAltTab) {
                    setupTouchConsumer(HIT_TARGET_NONE);
                    mEventQueue.onOverviewShownFromAltTab();
                }
            }
        }

        @Override
        public void onOverviewHidden(boolean triggeredFromAltTab, boolean triggeredFromHomeKey) {
            if (DEBUG_OPEN_OVERVIEW_VIA_ALT_TAB) {
                mOverviewCommandHelper.onOverviewHidden();
                if (triggeredFromAltTab && !triggeredFromHomeKey) {
                    // onOverviewShownFromAltTab initiates quick scrub. Ending it here.
                    mEventQueue.onQuickScrubEnd();
                }
            }
        }

@@ -205,7 +214,7 @@ public class TouchInteractionService extends Service {
        return mMyBinder;
    }

    private void onBinderPreMotionEvent(@HitTarget int downHitTarget) {
    private void setupTouchConsumer(@HitTarget int downHitTarget) {
        mEventQueue.reset();
        TouchConsumer oldConsumer = mEventQueue.getConsumer();
        if (oldConsumer.deferNextEventToMainThread()) {