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

Commit 96e61341 authored by Winson's avatar Winson
Browse files

Scroll to the launch-task when toggling overview.

Bug: 27680710
Change-Id: I3eba2cdbe0a92ef05dd6882a5e41db2a5875c98a
parent bc0f8cd3
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -362,7 +362,8 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
        RecentsConfiguration config = Recents.getConfiguration();
        RecentsActivityLaunchState launchState = config.getLaunchState();
        if (!loadPlan.hasTasks()) {
            loader.preloadTasks(loadPlan, -1, launchState.launchedFromHome);
            loader.preloadTasks(loadPlan, launchState.launchedToTaskId,
                    launchState.launchedFromHome);
        }

        RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options();
+25 −3
Original line number Diff line number Diff line
@@ -114,6 +114,9 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
    private static final int DRAG_SCALE_DURATION = 175;
    private static final float DRAG_SCALE_FACTOR = 1.05f;

    private static final int LAUNCH_NEXT_SCROLL_BASE_DURATION = 200;
    private static final int LAUNCH_NEXT_SCROLL_INCR_DURATION = 32;

    private static final ArraySet<Task.TaskKey> EMPTY_TASK_SET = new ArraySet<>();

    LayoutInflater mInflater;
@@ -1619,9 +1622,28 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
            mUIDozeTrigger.stopDozing();
            cancelAllTaskViewAnimations();

            Task launchTask = mStack.getStackTasks().get(launchTaskIndex);
            final Task launchTask = mStack.getStackTasks().get(launchTaskIndex);
            if (getChildViewForTask(launchTask) == null) {
                List<TaskView> taskViews = getTaskViews();
                int lastTaskIndex = !taskViews.isEmpty()
                        ? mStack.indexOfStackTask(taskViews.get(taskViews.size() - 1).getTask())
                        : mStack.getTaskCount() - 1;
                int duration = LAUNCH_NEXT_SCROLL_BASE_DURATION +
                        Math.abs(mStack.indexOfStackTask(launchTask) - lastTaskIndex)
                                * LAUNCH_NEXT_SCROLL_INCR_DURATION;
                mStackScroller.animateScroll(mLayoutAlgorithm.getStackScrollForTask(launchTask),
                        duration, new Runnable() {
                            @Override
                            public void run() {
                                EventBus.getDefault().send(new LaunchTaskEvent(
                                        getChildViewForTask(launchTask), launchTask, null,
                                        INVALID_STACK_ID, false /* screenPinningRequested */));
                            }
                        });
            } else {
                EventBus.getDefault().send(new LaunchTaskEvent(getChildViewForTask(launchTask),
                        launchTask, null, INVALID_STACK_ID, false /* screenPinningRequested */));
            }

            MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_LAUNCH_PREVIOUS_TASK,
                    launchTask.key.getComponent().toString());
+8 −2
Original line number Diff line number Diff line
@@ -179,6 +179,13 @@ public class TaskStackViewScroller {

    /** Animates the stack scroll */
    void animateScroll(float newScroll, final Runnable postRunnable) {
        int duration = mContext.getResources().getInteger(
                R.integer.recents_animate_task_stack_scroll_duration);
        animateScroll(newScroll, duration, postRunnable);
    }

    /** Animates the stack scroll */
    void animateScroll(float newScroll, int duration, final Runnable postRunnable) {
        // Finish any current scrolling animations
        if (mScrollAnimator != null && mScrollAnimator.isRunning()) {
            setStackScroll(mFinalAnimatedScroll);
@@ -190,8 +197,7 @@ public class TaskStackViewScroller {
        if (Float.compare(mStackScrollP, newScroll) != 0) {
            mFinalAnimatedScroll = newScroll;
            mScrollAnimator = ObjectAnimator.ofFloat(this, STACK_SCROLL, getStackScroll(), newScroll);
            mScrollAnimator.setDuration(mContext.getResources().getInteger(
                    R.integer.recents_animate_task_stack_scroll_duration));
            mScrollAnimator.setDuration(duration);
            mScrollAnimator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
            mScrollAnimator.addListener(new AnimatorListenerAdapter() {
                @Override