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

Commit 3f6e3f06 authored by Tony Wickham's avatar Tony Wickham
Browse files

Stash taskbar in fallback recents

Test: Swipe to Overview with 3P launcher as default, watch taskbar stash
Fixes: 188790554
Change-Id: Id9fdcd715fc50872e3a96f102053a9a99859b482
parent 8791e7de
Loading
Loading
Loading
Loading
+60 −0
Original line number Original line Diff line number Diff line
@@ -15,7 +15,16 @@
 */
 */
package com.android.launcher3.taskbar;
package com.android.launcher3.taskbar;


import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_APP;
import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_STASHED_LAUNCHER_STATE;
import static com.android.launcher3.taskbar.TaskbarStashController.TASKBAR_STASH_DURATION;

import android.animation.Animator;

import com.android.launcher3.statemanager.StateManager;
import com.android.quickstep.RecentsActivity;
import com.android.quickstep.RecentsActivity;
import com.android.quickstep.fallback.RecentsState;
import com.android.quickstep.views.RecentsView;


/**
/**
 * A data source which integrates with the fallback RecentsActivity instance (for 3P launchers).
 * A data source which integrates with the fallback RecentsActivity instance (for 3P launchers).
@@ -24,7 +33,58 @@ public class FallbackTaskbarUIController extends TaskbarUIController {


    private final RecentsActivity mRecentsActivity;
    private final RecentsActivity mRecentsActivity;


    private final StateManager.StateListener<RecentsState> mStateListener =
            new StateManager.StateListener<RecentsState>() {
                @Override
                public void onStateTransitionStart(RecentsState toState) {
                    animateToRecentsState(toState);

                    // Handle tapping on live tile.
                    RecentsView recentsView = mRecentsActivity.getOverviewPanel();
                    recentsView.setTaskLaunchListener(toState == RecentsState.DEFAULT
                            ? (() -> animateToRecentsState(RecentsState.BACKGROUND_APP)) : null);
                }
            };

    // Initialized in init.
    TaskbarControllers mControllers;

    public FallbackTaskbarUIController(RecentsActivity recentsActivity) {
    public FallbackTaskbarUIController(RecentsActivity recentsActivity) {
        mRecentsActivity = recentsActivity;
        mRecentsActivity = recentsActivity;
    }
    }

    @Override
    protected void init(TaskbarControllers taskbarControllers) {
        mControllers = taskbarControllers;

        mRecentsActivity.setTaskbarUIController(this);
        mRecentsActivity.getStateManager().addStateListener(mStateListener);
    }

    @Override
    protected void onDestroy() {
        mRecentsActivity.setTaskbarUIController(null);
        mRecentsActivity.getStateManager().removeStateListener(mStateListener);
    }

    /**
     * Creates an animation to animate the taskbar for the given state (but does not start it).
     * Currently this animation just force stashes the taskbar in Overview.
     */
    public Animator createAnimToRecentsState(RecentsState toState, long duration) {
        boolean forceStashed = toState.hasOverviewActions();
        TaskbarStashController controller = mControllers.taskbarStashController;
        // Set both FLAG_IN_STASHED_LAUNCHER_STATE and FLAG_IN_APP to ensure the state is respected.
        // For all other states, just use the current stashed-in-app setting (e.g. if long clicked).
        controller.updateStateForFlag(FLAG_IN_STASHED_LAUNCHER_STATE, forceStashed);
        controller.updateStateForFlag(FLAG_IN_APP, !forceStashed);
        return controller.applyStateWithoutStart(duration);
    }

    private void animateToRecentsState(RecentsState toState) {
        Animator anim = createAnimToRecentsState(toState, TASKBAR_STASH_DURATION);
        if (anim != null) {
            anim.start();
        }
    }
}
}
+3 −0
Original line number Original line Diff line number Diff line
@@ -62,8 +62,11 @@ public class TaskbarDragLayerController {
    public void init(TaskbarControllers controllers) {
    public void init(TaskbarControllers controllers) {
        mControllers = controllers;
        mControllers = controllers;
        mTaskbarDragLayer.init(new TaskbarDragLayerCallbacks());
        mTaskbarDragLayer.init(new TaskbarDragLayerCallbacks());

        mBgTaskbar.value = 1;
        mKeyguardBgTaskbar.value = 1;
        mKeyguardBgTaskbar.value = 1;
        mBgOverride.value = 1;
        mBgOverride.value = 1;
        updateBackgroundAlpha();
    }
    }


    public void onDestroy() {
    public void onDestroy() {
+4 −0
Original line number Original line Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.statemanager.BaseState;
import com.android.launcher3.statemanager.BaseState;
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.taskbar.TaskbarUIController;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.util.WindowBounds;
import com.android.launcher3.util.WindowBounds;
import com.android.launcher3.views.ScrimView;
import com.android.launcher3.views.ScrimView;
@@ -138,6 +139,9 @@ public abstract class BaseActivityInterface<STATE_TYPE extends BaseState<STATE_T
        return null;
        return null;
    }
    }


    @Nullable
    public abstract TaskbarUIController getTaskbarController();

    public final boolean isResumed() {
    public final boolean isResumed() {
        ACTIVITY_TYPE activity = getCreatedActivity();
        ACTIVITY_TYPE activity = getCreatedActivity();
        return activity != null && activity.hasBeenResumed();
        return activity != null && activity.hasBeenResumed();
+36 −1
Original line number Original line Diff line number Diff line
@@ -21,6 +21,8 @@ import static com.android.quickstep.fallback.RecentsState.BACKGROUND_APP;
import static com.android.quickstep.fallback.RecentsState.DEFAULT;
import static com.android.quickstep.fallback.RecentsState.DEFAULT;
import static com.android.quickstep.fallback.RecentsState.HOME;
import static com.android.quickstep.fallback.RecentsState.HOME;


import android.animation.Animator;
import android.animation.AnimatorSet;
import android.content.Context;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.MotionEvent;
@@ -29,7 +31,9 @@ import androidx.annotation.Nullable;


import com.android.launcher3.DeviceProfile;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.taskbar.FallbackTaskbarUIController;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.quickstep.GestureState.GestureEndTarget;
import com.android.quickstep.fallback.RecentsState;
import com.android.quickstep.fallback.RecentsState;
import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.ActivityInitListener;
import com.android.quickstep.util.AnimatorControllerWithResistance;
import com.android.quickstep.util.AnimatorControllerWithResistance;
@@ -102,6 +106,15 @@ public final class FallbackActivityInterface extends
        return RecentsActivity.ACTIVITY_TRACKER.getCreatedActivity();
        return RecentsActivity.ACTIVITY_TRACKER.getCreatedActivity();
    }
    }


    @Override
    public FallbackTaskbarUIController getTaskbarController() {
        RecentsActivity activity = getCreatedActivity();
        if (activity == null) {
            return null;
        }
        return activity.getTaskbarUIController();
    }

    @Nullable
    @Nullable
    @Override
    @Override
    public RecentsView getVisibleRecentsView() {
    public RecentsView getVisibleRecentsView() {
@@ -182,7 +195,7 @@ public final class FallbackActivityInterface extends
    }
    }


    @Override
    @Override
    public RecentsState stateFromGestureEndTarget(GestureState.GestureEndTarget endTarget) {
    public RecentsState stateFromGestureEndTarget(GestureEndTarget endTarget) {
        switch (endTarget) {
        switch (endTarget) {
            case RECENTS:
            case RECENTS:
                return DEFAULT;
                return DEFAULT;
@@ -202,6 +215,28 @@ public final class FallbackActivityInterface extends
                rotationTouchHelper.getDisplayRotation());
                rotationTouchHelper.getDisplayRotation());
    }
    }


    @Override
    public @Nullable Animator getParallelAnimationToLauncher(GestureEndTarget endTarget,
            long duration, RecentsAnimationCallbacks callbacks) {
        FallbackTaskbarUIController uiController = getTaskbarController();
        Animator superAnimator = super.getParallelAnimationToLauncher(
                endTarget, duration, callbacks);
        if (uiController == null) {
            return superAnimator;
        }
        RecentsState toState = stateFromGestureEndTarget(endTarget);
        Animator taskbarAnimator = uiController.createAnimToRecentsState(toState, duration);
        if (taskbarAnimator == null) {
            return superAnimator;
        }
        if (superAnimator == null) {
            return taskbarAnimator;
        }
        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.playTogether(superAnimator, taskbarAnimator);
        return animatorSet;
    }

    @Override
    @Override
    protected int getOverviewScrimColorForState(RecentsActivity activity, RecentsState state) {
    protected int getOverviewScrimColorForState(RecentsActivity activity, RecentsState state) {
        return state.getScrimColor(activity);
        return state.getScrimColor(activity);
+2 −1
Original line number Original line Diff line number Diff line
@@ -187,7 +187,8 @@ public final class LauncherActivityInterface extends
    }
    }


    @Nullable
    @Nullable
    private LauncherTaskbarUIController getTaskbarController() {
    @Override
    public LauncherTaskbarUIController getTaskbarController() {
        BaseQuickstepLauncher launcher = getCreatedActivity();
        BaseQuickstepLauncher launcher = getCreatedActivity();
        if (launcher == null) {
        if (launcher == null) {
            return null;
            return null;
Loading