duration of the transition in to recents from home. -->
<integer name="recents_animate_task_enter_from_home_delay">150</integer>
<!-- The min animation duration for animating the task in when transitioning from home. -->
- <integer name="recents_animate_task_enter_from_home_duration">200</integer>
- <!-- The total animation stagger delay when entering from home. -->
- <integer name="recents_animate_task_enter_from_home_stagger_delay">110</integer>
- <!-- The total animation duration added to the last card when entering from home.
- This value is partialy also added to the previous tasks -->
- <integer name="recents_animate_task_enter_from_home_stagger_duration">72</integer>
+ <integer name="recents_animate_task_enter_from_home_duration">250</integer>
+ <!-- The animation stagger to apply to each task animation when transitioning from home. -->
+ <integer name="recents_animate_task_enter_from_home_stagger_delay">12</integer>
<!-- The short duration when animating in/out the lock to app button. -->
<integer name="recents_animate_lock_to_app_button_short_duration">150</integer>
<!-- The long duration when animating in/out the lock to app button. -->
void showRelativeAffiliatedTask(boolean showNextTask) {
RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
TaskStack stack = loader.getTaskStack(mSystemServicesProxy, mContext.getResources(),
- -1, -1, false, null, null);
+ -1, -1, false, true, null, null);
// Return early if there are no tasks
if (stack.getTaskCount() == 0) return;
// Get the stack of tasks that we are animating into
RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
TaskStack stack = loader.getTaskStack(mSystemServicesProxy, mContext.getResources(),
- runningTaskId, -1, false, null, null);
+ runningTaskId, -1, false, isTopTaskHome, null, null);
if (stack.getTaskCount() == 0) {
return null;
}
// which can differ depending on the number of items in the list.
SystemServicesProxy ssp = mSystemServicesProxy;
List<ActivityManager.RecentTaskInfo> recentTasks =
- ssp.getRecentTasks(3, UserHandle.CURRENT.getIdentifier());
+ ssp.getRecentTasks(3, UserHandle.CURRENT.getIdentifier(), isTopTaskHome);
boolean useThumbnailTransition = !isTopTaskHome;
boolean hasRecentTasks = !recentTasks.isEmpty();
public static final boolean EnableTaskBarTouchEvents = true;
// Enables app-info pane on long-pressing the icon
public static final boolean EnableDevAppInfoOnLongPress = true;
+ // Enables debug mode
+ public static final boolean EnableDebugMode = false;
// Enables the search bar layout
public static final boolean EnableSearchLayout = true;
// Enables the thumbnail alpha on the front-most task
/** Updates the set of recent tasks */
void updateRecentsTasks(Intent launchIntent) {
- // Load all the tasks
- RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
- SpaceNode root = loader.reload(this, Constants.Values.RecentsTaskLoader.PreloadFirstTasksCount);
- ArrayList<TaskStack> stacks = root.getStacks();
- if (!stacks.isEmpty()) {
- mRecentsView.setTaskStacks(root.getStacks());
- }
-
// Update the configuration based on the launch intent
boolean fromSearchHome = launchIntent.getBooleanExtra(
AlternateRecentsComponent.EXTRA_FROM_SEARCH_HOME, false);
AlternateRecentsComponent.EXTRA_FROM_TASK_ID, -1);
mConfig.launchedWithAltTab = launchIntent.getBooleanExtra(
AlternateRecentsComponent.EXTRA_TRIGGERED_FROM_ALT_TAB, false);
+
+ // Load all the tasks
+ RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
+ SpaceNode root = loader.reload(this,
+ Constants.Values.RecentsTaskLoader.PreloadFirstTasksCount,
+ mConfig.launchedFromHome);
+ ArrayList<TaskStack> stacks = root.getStacks();
+ if (!stacks.isEmpty()) {
+ mRecentsView.setTaskStacks(root.getStacks());
+ }
mConfig.launchedWithNoRecentTasks = !root.hasTasks();
// Create the home intent runnable
res.getInteger(R.integer.recents_animate_task_enter_from_home_duration);
taskViewEnterFromHomeStaggerDelay =
res.getInteger(R.integer.recents_animate_task_enter_from_home_stagger_delay);
- taskViewEnterFromHomeStaggerDuration =
- res.getInteger(R.integer.recents_animate_task_enter_from_home_stagger_duration);
taskViewExitToHomeDuration =
res.getInteger(R.integer.recents_animate_task_exit_to_home_duration);
taskViewRemoveAnimDuration =
import android.os.Handler;
import android.os.SystemClock;
import android.view.KeyEvent;
+import com.android.systemui.recents.Constants;
/**
* A trigger for catching a debug chord.
* then we just call the callback.
*/
public void onKeyEvent(int keyCode) {
+ if (!Constants.DebugFlags.App.EnableDebugMode) return;
+
if (mLastKeyCode == 0) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
mLastKeyCode = keyCode;
}
/** Returns a list of the recents tasks */
- public List<ActivityManager.RecentTaskInfo> getRecentTasks(int numLatestTasks, int userId) {
+ public List<ActivityManager.RecentTaskInfo> getRecentTasks(int numLatestTasks, int userId,
+ boolean isTopTaskHome) {
if (mAm == null) return null;
// If we are mocking, then create some recent tasks
// tasks
// Check the first non-recents task, include this task even if it is marked as excluded
- // from recents. In other words, only remove excluded tasks if it is not the first task
+ // from recents if we are currently in the app. In other words, only remove excluded
+ // tasks if it is not the first active task.
boolean isExcluded = (t.baseIntent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
== Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
- if (isExcluded && !isFirstValidTask) {
+ if (isExcluded && (isTopTaskHome || !isFirstValidTask)) {
iter.remove();
continue;
}
}
/** Gets the list of recent tasks, ordered from back to front. */
- private static List<ActivityManager.RecentTaskInfo> getRecentTasks(SystemServicesProxy ssp) {
+ private static List<ActivityManager.RecentTaskInfo> getRecentTasks(SystemServicesProxy ssp,
+ boolean isTopTaskHome) {
RecentsConfiguration config = RecentsConfiguration.getInstance();
List<ActivityManager.RecentTaskInfo> tasks =
- ssp.getRecentTasks(config.maxNumTasksToLoad,
- UserHandle.CURRENT.getIdentifier());
+ ssp.getRecentTasks(config.maxNumTasksToLoad, UserHandle.CURRENT.getIdentifier(),
+ isTopTaskHome);
Collections.reverse(tasks);
return tasks;
}
}
/** Reload the set of recent tasks */
- public SpaceNode reload(Context context, int preloadCount) {
+ public SpaceNode reload(Context context, int preloadCount, boolean isTopTaskHome) {
ArrayList<Task.TaskKey> taskKeys = new ArrayList<Task.TaskKey>();
ArrayList<Task> tasksToLoad = new ArrayList<Task>();
TaskStack stack = getTaskStack(mSystemServicesProxy, context.getResources(),
- -1, preloadCount, true, taskKeys, tasksToLoad);
+ -1, preloadCount, true, isTopTaskHome, taskKeys, tasksToLoad);
SpaceNode root = new SpaceNode();
root.setStack(stack);
/** Creates a lightweight stack of the current recent tasks, without thumbnails and icons. */
public TaskStack getTaskStack(SystemServicesProxy ssp, Resources res,
int preloadTaskId, int preloadTaskCount,
- boolean loadTaskThumbnails, List<Task.TaskKey> taskKeysOut,
- List<Task> tasksToLoadOut) {
+ boolean loadTaskThumbnails, boolean isTopTaskHome,
+ List<Task.TaskKey> taskKeysOut, List<Task> tasksToLoadOut) {
RecentsConfiguration config = RecentsConfiguration.getInstance();
- List<ActivityManager.RecentTaskInfo> tasks = getRecentTasks(ssp);
+ List<ActivityManager.RecentTaskInfo> tasks = getRecentTasks(ssp, isTopTaskHome);
HashMap<Task.ComponentNameKey, ActivityInfoHandle> activityInfoCache =
new HashMap<Task.ComponentNameKey, ActivityInfoHandle>();
ArrayList<Task> tasksToAdd = new ArrayList<Task>();
for (int i = 0; i < childCount; i++) {
TaskView t = (TaskView) getChildAt(i);
if (t == tv) {
+ t.setClipViewInStack(false);
t.startLaunchTaskAnimation(r, true, true, lockToTask);
} else {
boolean occludesLaunchTarget = launchTargetTask.group.isTaskAboveTask(t.getTask(),
} else if (mConfig.launchedFromHome) {
// Animate the tasks up
int frontIndex = (ctx.currentStackViewCount - ctx.currentStackViewIndex - 1);
- float fraction = (float) frontIndex / (ctx.currentStackViewCount - 1);
- fraction = (float) Math.pow(fraction, 0.85f);
- int delay = (int) (mConfig.taskViewEnterFromHomeDelay +
- fraction * mConfig.taskViewEnterFromHomeStaggerDelay);
- long delayIncrease = (long) (fraction * mConfig.taskViewEnterFromHomeStaggerDuration);
+ int delay = mConfig.taskViewEnterFromHomeDelay +
+ frontIndex * mConfig.taskViewEnterFromHomeStaggerDelay;
+
+ setScaleX(transform.scale);
+ setScaleY(transform.scale);
if (!mConfig.fakeShadows) {
animate().translationZ(transform.translationZ);
}
animate()
- .scaleX(transform.scale)
- .scaleY(transform.scale)
.translationY(transform.translationY)
.setStartDelay(delay)
.setUpdateListener(ctx.updateListener)
.setInterpolator(mConfig.quintOutInterpolator)
- .setDuration(mConfig.taskViewEnterFromHomeDuration + delayIncrease)
+ .setDuration(mConfig.taskViewEnterFromHomeDuration +
+ frontIndex * mConfig.taskViewEnterFromHomeStaggerDelay)
.withEndAction(new Runnable() {
@Override
public void run() {