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

Commit 98290604 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Fixing various quickscrup controls for fallback activity

> Not auto advancing to next task when swiping from home
> Starting from the current tile, when scrubing on recents activity

Bug: 79558175
Change-Id: I2975dbb254ba0004b34ce5d86d9733faad4943ff
parent 7f71198d
Loading
Loading
Loading
Loading
+37 −7
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.quickstep;

import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS;
import static com.android.launcher3.LauncherState.FAST_OVERVIEW;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.allapps.AllAppsTransitionController.ALL_APPS_PROGRESS;
@@ -24,10 +25,15 @@ import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.annotation.TargetApi;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.view.View;
@@ -52,21 +58,23 @@ import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.RecentsViewContainer;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;

import java.util.Objects;
import java.util.function.BiPredicate;
import java.util.function.Consumer;

/**
 * Utility class which abstracts out the logical differences between Launcher and RecentsActivity.
 */
@TargetApi(Build.VERSION_CODES.P)
public interface ActivityControlHelper<T extends BaseDraggingActivity> {

    LayoutListener createLayoutListener(T activity);

    /**
     * Updates the UI to indicate quick interaction.
     * @return true if there any any UI change as a result of this
     */
    boolean onQuickInteractionStart(T activity, boolean activityVisible);
    void onQuickInteractionStart(T activity, @Nullable RunningTaskInfo taskInfo,
            boolean activityVisible);

    float getTranslationYForQuickScrub(T activity);

@@ -120,10 +128,14 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
        }

        @Override
        public boolean onQuickInteractionStart(Launcher activity, boolean activityVisible) {
        public void onQuickInteractionStart(Launcher activity, RunningTaskInfo taskInfo,
                boolean activityVisible) {
            LauncherState fromState = activity.getStateManager().getState();
            activity.getStateManager().goToState(FAST_OVERVIEW, activityVisible);
            return !fromState.overviewUi;

            QuickScrubController controller = activity.<RecentsView>getOverviewPanel()
                    .getQuickScrubController();
            controller.onQuickScrubStart(activityVisible && !fromState.overviewUi, this);
        }

        @Override
@@ -311,10 +323,27 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {

    class FallbackActivityControllerHelper implements ActivityControlHelper<RecentsActivity> {

        private final ComponentName mHomeComponent;
        private final Handler mUiHandler = new Handler(Looper.getMainLooper());

        public FallbackActivityControllerHelper(ComponentName homeComponent) {
            mHomeComponent = homeComponent;
        }

        @Override
        public boolean onQuickInteractionStart(RecentsActivity activity, boolean activityVisible) {
            // Activity does not need any UI change for quickscrub.
            return false;
        public void onQuickInteractionStart(RecentsActivity activity, RunningTaskInfo taskInfo,
                boolean activityVisible) {
            QuickScrubController controller = activity.<RecentsView>getOverviewPanel()
                    .getQuickScrubController();

            // TODO: match user is as well
            boolean startingFromHome = !activityVisible &&
                    (taskInfo == null || Objects.equals(taskInfo.topActivity, mHomeComponent));
            controller.onQuickScrubStart(startingFromHome, this);
            if (activityVisible) {
                mUiHandler.postDelayed(controller::onFinishedTransitionToQuickScrub,
                        OVERVIEW_TRANSITION_MS);
            }
        }

        @Override
@@ -465,6 +494,7 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
        public AlphaProperty getAlphaProperty(RecentsActivity activity) {
            return activity.getDragLayer().getAlphaProperty(0);
        }

    }

    interface LayoutListener {
+1 −1
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ public class OverviewCommandHelper {
        } else {
            // The default home app is a different launcher. Use the fallback Overview instead.
            overviewComponent = new ComponentName(mContext, RecentsActivity.class);
            mActivityControlHelper = new FallbackActivityControllerHelper();
            mActivityControlHelper = new FallbackActivityControllerHelper(defaultHome);
            overviewIntentCategory = Intent.CATEGORY_DEFAULT;

            // User's default home app can change as a result of package updates of this app (such
+1 −2
Original line number Diff line number Diff line
@@ -350,8 +350,7 @@ public class TouchInteractionService extends Service {

                mStartPending = true;
                Runnable action = () -> {
                    mQuickScrubController.onQuickScrubStart(mActivityHelper.onQuickInteractionStart(
                            mActivity, true), mActivityHelper);
                    mActivityHelper.onQuickInteractionStart(mActivity, null, true);
                    mQuickScrubController.onQuickScrubProgress(mLastProgress);
                    mStartPending = false;

+3 −2
Original line number Diff line number Diff line
@@ -171,6 +171,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
    private final ActivityInitListener mActivityInitListener;

    private final int mRunningTaskId;
    private final RunningTaskInfo mRunningTaskInfo;
    private ThumbnailData mTaskSnapshot;

    private MultiStateCallback mStateCallback;
@@ -207,6 +208,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
    WindowTransformSwipeHandler(RunningTaskInfo runningTaskInfo, Context context, long touchTimeMs,
            ActivityControlHelper<T> controller) {
        mContext = context;
        mRunningTaskInfo = runningTaskInfo;
        mRunningTaskId = runningTaskInfo.id;
        mTouchTimeMs = touchTimeMs;
        mActivityControlHelper = controller;
@@ -772,8 +774,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
            mLauncherTransitionController = null;
        }

        mActivityControlHelper.onQuickInteractionStart(mActivity, false);
        mQuickScrubController.onQuickScrubStart(false, mActivityControlHelper);
        mActivityControlHelper.onQuickInteractionStart(mActivity, mRunningTaskInfo, false);

        // Inform the last progress in case we skipped before.
        mQuickScrubController.onQuickScrubProgress(mCurrentQuickScrubProgress);
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity> {
    public FallbackRecentsView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setOverviewStateEnabled(true);
        getQuickScrubController().onFinishedTransitionToQuickScrub();
    }

    @Override