Merge "2D Recents: fix toggling behavior" into nyc-mr2-dev
This commit is contained in:
@@ -50,6 +50,7 @@ import com.android.systemui.recents.events.activity.DockedTopTaskEvent;
|
|||||||
import com.android.systemui.recents.events.activity.EnterRecentsWindowLastAnimationFrameEvent;
|
import com.android.systemui.recents.events.activity.EnterRecentsWindowLastAnimationFrameEvent;
|
||||||
import com.android.systemui.recents.events.activity.HideRecentsEvent;
|
import com.android.systemui.recents.events.activity.HideRecentsEvent;
|
||||||
import com.android.systemui.recents.events.activity.IterateRecentsEvent;
|
import com.android.systemui.recents.events.activity.IterateRecentsEvent;
|
||||||
|
import com.android.systemui.recents.events.activity.LaunchMostRecentTaskRequestEvent;
|
||||||
import com.android.systemui.recents.events.activity.LaunchNextTaskRequestEvent;
|
import com.android.systemui.recents.events.activity.LaunchNextTaskRequestEvent;
|
||||||
import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
|
import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
|
||||||
import com.android.systemui.recents.events.activity.ToggleRecentsEvent;
|
import com.android.systemui.recents.events.activity.ToggleRecentsEvent;
|
||||||
@@ -303,16 +304,24 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
|
|||||||
RecentsConfiguration config = Recents.getConfiguration();
|
RecentsConfiguration config = Recents.getConfiguration();
|
||||||
RecentsActivityLaunchState launchState = config.getLaunchState();
|
RecentsActivityLaunchState launchState = config.getLaunchState();
|
||||||
if (!launchState.launchedWithAltTab) {
|
if (!launchState.launchedWithAltTab) {
|
||||||
// If the user taps quickly
|
// Has the user tapped quickly?
|
||||||
if (!debugFlags.isPagingEnabled() ||
|
boolean isQuickTap = ViewConfiguration.getDoubleTapMinTime() < elapsedTime &&
|
||||||
(ViewConfiguration.getDoubleTapMinTime() < elapsedTime &&
|
elapsedTime < ViewConfiguration.getDoubleTapTimeout();
|
||||||
elapsedTime < ViewConfiguration.getDoubleTapTimeout())) {
|
if (Recents.getConfiguration().isGridEnabled) {
|
||||||
|
if (isQuickTap) {
|
||||||
|
EventBus.getDefault().post(new LaunchNextTaskRequestEvent());
|
||||||
|
} else {
|
||||||
|
EventBus.getDefault().post(new LaunchMostRecentTaskRequestEvent());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!debugFlags.isPagingEnabled() || isQuickTap) {
|
||||||
// Launch the next focused task
|
// Launch the next focused task
|
||||||
EventBus.getDefault().post(new LaunchNextTaskRequestEvent());
|
EventBus.getDefault().post(new LaunchNextTaskRequestEvent());
|
||||||
} else {
|
} else {
|
||||||
// Notify recents to move onto the next task
|
// Notify recents to move onto the next task
|
||||||
EventBus.getDefault().post(new IterateRecentsEvent());
|
EventBus.getDefault().post(new IterateRecentsEvent());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// If the user has toggled it too quickly, then just eat up the event here (it's
|
// If the user has toggled it too quickly, then just eat up the event here (it's
|
||||||
// better than showing a janky screenshot).
|
// better than showing a janky screenshot).
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2017 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.recents.events.activity;
|
||||||
|
|
||||||
|
import com.android.systemui.recents.events.EventBus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This event is sent to request that the most recent task is launched.
|
||||||
|
*/
|
||||||
|
public class LaunchMostRecentTaskRequestEvent extends EventBus.Event {
|
||||||
|
// Simple event
|
||||||
|
}
|
||||||
@@ -64,6 +64,7 @@ import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationC
|
|||||||
import com.android.systemui.recents.events.activity.HideRecentsEvent;
|
import com.android.systemui.recents.events.activity.HideRecentsEvent;
|
||||||
import com.android.systemui.recents.events.activity.HideStackActionButtonEvent;
|
import com.android.systemui.recents.events.activity.HideStackActionButtonEvent;
|
||||||
import com.android.systemui.recents.events.activity.IterateRecentsEvent;
|
import com.android.systemui.recents.events.activity.IterateRecentsEvent;
|
||||||
|
import com.android.systemui.recents.events.activity.LaunchMostRecentTaskRequestEvent;
|
||||||
import com.android.systemui.recents.events.activity.LaunchNextTaskRequestEvent;
|
import com.android.systemui.recents.events.activity.LaunchNextTaskRequestEvent;
|
||||||
import com.android.systemui.recents.events.activity.LaunchTaskEvent;
|
import com.android.systemui.recents.events.activity.LaunchTaskEvent;
|
||||||
import com.android.systemui.recents.events.activity.LaunchTaskStartedEvent;
|
import com.android.systemui.recents.events.activity.LaunchTaskStartedEvent;
|
||||||
@@ -1733,6 +1734,13 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
|
|||||||
mUIDozeTrigger.stopDozing();
|
mUIDozeTrigger.stopDozing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void onBusEvent(LaunchMostRecentTaskRequestEvent event) {
|
||||||
|
if (mStack.getTaskCount() > 0) {
|
||||||
|
Task mostRecentTask = mStack.getStackFrontMostTask(true /* includeFreefromTasks */);
|
||||||
|
launchTask(mostRecentTask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public final void onBusEvent(LaunchNextTaskRequestEvent event) {
|
public final void onBusEvent(LaunchNextTaskRequestEvent event) {
|
||||||
if (mAwaitingFirstLayout) {
|
if (mAwaitingFirstLayout) {
|
||||||
mLaunchNextAfterFirstMeasure = true;
|
mLaunchNextAfterFirstMeasure = true;
|
||||||
@@ -1741,29 +1749,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
|
|||||||
|
|
||||||
final Task launchTask = mStack.getNextLaunchTarget();
|
final Task launchTask = mStack.getNextLaunchTarget();
|
||||||
if (launchTask != null) {
|
if (launchTask != null) {
|
||||||
// Stop all animations
|
launchTask(launchTask);
|
||||||
cancelAllTaskViewAnimations();
|
|
||||||
|
|
||||||
float curScroll = mStackScroller.getStackScroll();
|
|
||||||
float targetScroll = mLayoutAlgorithm.getStackScrollForTaskAtInitialOffset(launchTask);
|
|
||||||
float absScrollDiff = Math.abs(targetScroll - curScroll);
|
|
||||||
if (getChildViewForTask(launchTask) == null || absScrollDiff > 0.35f) {
|
|
||||||
int duration = (int) (LAUNCH_NEXT_SCROLL_BASE_DURATION +
|
|
||||||
absScrollDiff * LAUNCH_NEXT_SCROLL_INCR_DURATION);
|
|
||||||
mStackScroller.animateScroll(targetScroll,
|
|
||||||
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,
|
MetricsLogger.action(getContext(), MetricsEvent.OVERVIEW_LAUNCH_PREVIOUS_TASK,
|
||||||
launchTask.key.getComponent().toString());
|
launchTask.key.getComponent().toString());
|
||||||
} else if (mStack.getTaskCount() == 0) {
|
} else if (mStack.getTaskCount() == 0) {
|
||||||
@@ -2215,6 +2201,31 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void launchTask(Task task) {
|
||||||
|
// Stop all animations
|
||||||
|
cancelAllTaskViewAnimations();
|
||||||
|
|
||||||
|
float curScroll = mStackScroller.getStackScroll();
|
||||||
|
float targetScroll = mLayoutAlgorithm.getStackScrollForTaskAtInitialOffset(task);
|
||||||
|
float absScrollDiff = Math.abs(targetScroll - curScroll);
|
||||||
|
if (getChildViewForTask(task) == null || absScrollDiff > 0.35f) {
|
||||||
|
int duration = (int) (LAUNCH_NEXT_SCROLL_BASE_DURATION +
|
||||||
|
absScrollDiff * LAUNCH_NEXT_SCROLL_INCR_DURATION);
|
||||||
|
mStackScroller.animateScroll(targetScroll,
|
||||||
|
duration, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
EventBus.getDefault().send(new LaunchTaskEvent(
|
||||||
|
getChildViewForTask(task), task, null,
|
||||||
|
INVALID_STACK_ID, false /* screenPinningRequested */));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
EventBus.getDefault().send(new LaunchTaskEvent(getChildViewForTask(task),
|
||||||
|
task, null, INVALID_STACK_ID, false /* screenPinningRequested */));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether we should use the grid layout.
|
* Check whether we should use the grid layout.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user