Loading core/java/android/app/ActivityManager.java +17 −2 Original line number Diff line number Diff line Loading @@ -31,7 +31,6 @@ import android.os.BatteryStats; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.util.Log; import com.android.internal.app.procstats.ProcessStats; import com.android.internal.os.TransferPipe; import com.android.internal.util.FastPrintWriter; Loading Loading @@ -63,7 +62,6 @@ import android.os.UserHandle; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Size; import android.util.Slog; import org.xmlpull.v1.XmlSerializer; Loading Loading @@ -2360,8 +2358,10 @@ public class ActivityManager { public String[] taskNames; public Rect[] taskBounds; public int[] taskUserIds; public ComponentName topActivity; public int displayId; public int userId; public boolean visible; @Override public int describeContents() { Loading @@ -2388,6 +2388,13 @@ public class ActivityManager { dest.writeIntArray(taskUserIds); dest.writeInt(displayId); dest.writeInt(userId); dest.writeInt(visible ? 1 : 0); if (topActivity != null) { dest.writeInt(1); topActivity.writeToParcel(dest, 0); } else { dest.writeInt(0); } } public void readFromParcel(Parcel source) { Loading @@ -2410,6 +2417,10 @@ public class ActivityManager { taskUserIds = source.createIntArray(); displayId = source.readInt(); userId = source.readInt(); visible = source.readInt() > 0; if (source.readInt() > 0) { topActivity = ComponentName.readFromParcel(source); } } public static final Creator<StackInfo> CREATOR = new Creator<StackInfo>() { Loading Loading @@ -2445,6 +2456,10 @@ public class ActivityManager { sb.append(" bounds="); sb.append(taskBounds[i].toShortString()); } sb.append(" userId=").append(taskUserIds[i]); sb.append(" visible=").append(visible); if (topActivity != null) { sb.append(" topActivity=").append(topActivity); } sb.append("\n"); } return sb.toString(); Loading packages/SystemUI/src/com/android/systemui/recents/Recents.java +9 −8 Original line number Diff line number Diff line Loading @@ -423,25 +423,26 @@ public class Recents extends SystemUI int currentUser = sSystemServicesProxy.getCurrentUser(); SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask(); ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); boolean screenPinningActive = ssp.isScreenPinningActive(); boolean isTopTaskHome = topTask != null && SystemServicesProxy.isHomeStack(topTask.stackId); if (topTask != null && !isTopTaskHome && !screenPinningActive) { logDockAttempt(mContext, topTask.topActivity, topTask.resizeMode); if (topTask.isDockable) { boolean isRunningTaskInHomeStack = runningTask != null && SystemServicesProxy.isHomeStack(runningTask.stackId); if (runningTask != null && !isRunningTaskInHomeStack && !screenPinningActive) { logDockAttempt(mContext, runningTask.topActivity, runningTask.resizeMode); if (runningTask.isDockable) { if (metricsDockAction != -1) { MetricsLogger.action(mContext, metricsDockAction, topTask.topActivity.flattenToShortString()); runningTask.topActivity.flattenToShortString()); } if (sSystemServicesProxy.isSystemUser(currentUser)) { mImpl.dockTopTask(topTask.id, dragMode, stackCreateMode, initialBounds); mImpl.dockTopTask(runningTask.id, dragMode, stackCreateMode, initialBounds); } else { if (mSystemToUserCallbacks != null) { IRecentsNonSystemUserCallbacks callbacks = mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser); if (callbacks != null) { try { callbacks.dockTopTask(topTask.id, dragMode, stackCreateMode, callbacks.dockTopTask(runningTask.id, dragMode, stackCreateMode, initialBounds); } catch (RemoteException e) { Log.e(TAG, "Callback failed", e); Loading packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +6 −5 Original line number Diff line number Diff line Loading @@ -169,7 +169,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD */ boolean dismissRecentsToFocusedTask(int logCategory) { SystemServicesProxy ssp = Recents.getSystemServices(); if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) { if (ssp.isRecentsActivityVisible()) { // If we have a focused Task, launch that Task now if (mRecentsView.launchFocusedTask(logCategory)) return true; } Loading @@ -181,7 +181,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD */ boolean dismissRecentsToLaunchTargetTaskOrHome() { SystemServicesProxy ssp = Recents.getSystemServices(); if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) { if (ssp.isRecentsActivityVisible()) { // If we have a focused Task, launch that Task now if (mRecentsView.launchPreviousTask()) return true; // If none of the other cases apply, then just go Home Loading @@ -195,7 +195,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD */ boolean dismissRecentsToFocusedTaskOrHome() { SystemServicesProxy ssp = Recents.getSystemServices(); if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) { if (ssp.isRecentsActivityVisible()) { // If we have a focused Task, launch that Task now if (mRecentsView.launchFocusedTask(0 /* logCategory */)) return true; // If none of the other cases apply, then just go Home Loading Loading @@ -236,7 +236,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD /** Dismisses Recents directly to Home if we currently aren't transitioning. */ boolean dismissRecentsToHomeIfVisible(boolean animated) { SystemServicesProxy ssp = Recents.getSystemServices(); if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) { if (ssp.isRecentsActivityVisible()) { // Return to Home dismissRecentsToHome(animated); return true; Loading Loading @@ -448,7 +448,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD RecentsActivityLaunchState launchState = config.getLaunchState(); RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsTaskLoadPlan loadPlan = loader.createLoadPlan(this); loader.preloadTasks(loadPlan, -1 /* topTaskId */, false /* isTopTaskHome */); loader.preloadTasks(loadPlan, -1 /* runningTaskId */, false /* isHomeStackVisible */); RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options(); loadOpts.numVisibleTasks = launchState.launchedNumVisibleTasks; Loading Loading @@ -777,6 +777,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { super.dump(prefix, fd, writer, args); EventBus.getDefault().dump(prefix, writer); Recents.getTaskLoader().dump(prefix, writer); String id = Integer.toHexString(System.identityHashCode(this)); Loading packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +35 −33 Original line number Diff line number Diff line Loading @@ -108,11 +108,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener if (config.svelteLevel == RecentsConfiguration.SVELTE_NONE) { RecentsTaskLoader loader = Recents.getTaskLoader(); SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo runningTaskInfo = ssp.getTopMostTask(); ActivityManager.RunningTaskInfo runningTaskInfo = ssp.getRunningTask(); // Load the next task only if we aren't svelte RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext); loader.preloadTasks(plan, -1, true /* isTopTaskHome */); loader.preloadTasks(plan, -1, true /* isHomeStackVisible */); RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options(); // This callback is made when a new activity is launched and the old one is paused // so ignore the current activity and try and preload the thumbnail for the Loading Loading @@ -189,7 +189,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener // We can use a new plan since the caches will be the same. RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext); loader.preloadTasks(plan, -1, true /* isTopTaskHome */); loader.preloadTasks(plan, -1, true /* isHomeStackVisible */); RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options(); launchOpts.numVisibleTasks = loader.getIconCacheSize(); launchOpts.numVisibleTaskThumbnails = loader.getThumbnailCacheSize(); Loading Loading @@ -262,10 +262,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener try { // Check if the top task is in the home stack, and start the recents activity SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask(); MutableBoolean isTopTaskHome = new MutableBoolean(true); if (topTask == null || !ssp.isRecentsTopMost(topTask, isTopTaskHome)) { startRecentsActivity(topTask, isTopTaskHome.value || fromHome, animate, growTarget); MutableBoolean isHomeStackVisible = new MutableBoolean(false); if (!ssp.isRecentsActivityVisible(isHomeStackVisible)) { ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); startRecentsActivity(runningTask, isHomeStackVisible.value || fromHome, animate, growTarget); } } catch (ActivityNotFoundException e) { Log.e(TAG, "Failed to launch RecentsActivity", e); Loading Loading @@ -301,11 +302,10 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener try { SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask(); MutableBoolean isTopTaskHome = new MutableBoolean(true); MutableBoolean isHomeStackVisible = new MutableBoolean(true); long elapsedTime = SystemClock.elapsedRealtime() - mLastToggleTime; if (topTask != null && ssp.isRecentsTopMost(topTask, isTopTaskHome)) { if (ssp.isRecentsActivityVisible(isHomeStackVisible)) { RecentsDebugFlags debugFlags = Recents.getDebugFlags(); RecentsConfiguration config = Recents.getConfiguration(); RecentsActivityLaunchState launchState = config.getLaunchState(); Loading Loading @@ -343,7 +343,9 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener } // Otherwise, start the recents activity startRecentsActivity(topTask, isTopTaskHome.value, true /* animate */, growTarget); ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); startRecentsActivity(runningTask, isHomeStackVisible.value, true /* animate */, growTarget); // Only close the other system windows if we are actually showing recents ssp.sendCloseSystemWindows(BaseStatusBar.SYSTEM_DIALOG_REASON_RECENT_APPS); Loading @@ -358,18 +360,18 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener // Preload only the raw task list into a new load plan (which will be consumed by the // RecentsActivity) only if there is a task to animate to. SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask(); MutableBoolean topTaskHome = new MutableBoolean(true); if (topTask != null && !ssp.isRecentsTopMost(topTask, topTaskHome)) { MutableBoolean isHomeStackVisible = new MutableBoolean(true); if (!ssp.isRecentsActivityVisible(isHomeStackVisible)) { ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); RecentsTaskLoader loader = Recents.getTaskLoader(); sInstanceLoadPlan = loader.createLoadPlan(mContext); sInstanceLoadPlan.preloadRawTasks(topTaskHome.value); loader.preloadTasks(sInstanceLoadPlan, topTask.id, topTaskHome.value); sInstanceLoadPlan.preloadRawTasks(isHomeStackVisible.value); loader.preloadTasks(sInstanceLoadPlan, runningTask.id, isHomeStackVisible.value); TaskStack stack = sInstanceLoadPlan.getTaskStack(); if (stack.getTaskCount() > 0) { // Only preload the icon (but not the thumbnail since it may not have been taken for // the pausing activity) preloadIcon(topTask); preloadIcon(runningTask); // At this point, we don't know anything about the stack state. So only calculate // the dimensions of the thumbnail that we need for the transition into Recents, but Loading Loading @@ -398,25 +400,25 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener SystemServicesProxy ssp = Recents.getSystemServices(); RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext); loader.preloadTasks(plan, -1, true /* isTopTaskHome */); loader.preloadTasks(plan, -1, true /* isHomeStackVisible */); TaskStack focusedStack = plan.getTaskStack(); // Return early if there are no tasks in the focused stack if (focusedStack == null || focusedStack.getTaskCount() == 0) return; ActivityManager.RunningTaskInfo runningTask = ssp.getTopMostTask(); // Return early if there is no running task ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); if (runningTask == null) return; // Find the task in the recents list boolean isTopTaskHome = SystemServicesProxy.isHomeStack(runningTask.stackId); boolean isRunningTaskInHomeStack = SystemServicesProxy.isHomeStack(runningTask.stackId); ArrayList<Task> tasks = focusedStack.getStackTasks(); Task toTask = null; ActivityOptions launchOpts = null; int taskCount = tasks.size(); for (int i = taskCount - 1; i >= 1; i--) { Task task = tasks.get(i); if (isTopTaskHome) { if (isRunningTaskInHomeStack) { toTask = tasks.get(i - 1); launchOpts = ActivityOptions.makeCustomAnimation(mContext, R.anim.recents_launch_next_affiliated_task_target, Loading Loading @@ -450,14 +452,14 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener SystemServicesProxy ssp = Recents.getSystemServices(); RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext); loader.preloadTasks(plan, -1, true /* isTopTaskHome */); loader.preloadTasks(plan, -1, true /* isHomeStackVisible */); TaskStack focusedStack = plan.getTaskStack(); // Return early if there are no tasks in the focused stack if (focusedStack == null || focusedStack.getTaskCount() == 0) return; ActivityManager.RunningTaskInfo runningTask = ssp.getTopMostTask(); // Return early if there is no running task (can't determine affiliated tasks in this case) ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); if (runningTask == null) return; // Return early if the running task is in the home stack (optimization) if (SystemServicesProxy.isHomeStack(runningTask.stackId)) return; Loading Loading @@ -693,9 +695,9 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener * Creates the activity options for an app->recents transition. */ private ActivityOptions getThumbnailTransitionActivityOptions( ActivityManager.RunningTaskInfo topTask, TaskStackView stackView, ActivityManager.RunningTaskInfo runningTask, TaskStackView stackView, Rect windowOverrideRect) { if (topTask.stackId == FREEFORM_WORKSPACE_STACK_ID) { if (runningTask.stackId == FREEFORM_WORKSPACE_STACK_ID) { ArrayList<AppTransitionAnimationSpec> specs = new ArrayList<>(); ArrayList<Task> tasks = stackView.getStack().getStackTasks(); TaskStackLayoutAlgorithm stackLayout = stackView.getStackAlgorithm(); Loading Loading @@ -801,8 +803,8 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener /** * Shows the recents activity */ protected void startRecentsActivity(ActivityManager.RunningTaskInfo topTask, boolean isTopTaskHome, boolean animate, int growTarget) { protected void startRecentsActivity(ActivityManager.RunningTaskInfo runningTask, boolean isHomeStackVisible, boolean animate, int growTarget) { RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState(); Loading @@ -814,24 +816,24 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener sInstanceLoadPlan = loader.createLoadPlan(mContext); } if (mLaunchedWhileDocking || mTriggeredFromAltTab || !sInstanceLoadPlan.hasTasks()) { loader.preloadTasks(sInstanceLoadPlan, topTask.id, isTopTaskHome); loader.preloadTasks(sInstanceLoadPlan, runningTask.id, isHomeStackVisible); } TaskStack stack = sInstanceLoadPlan.getTaskStack(); boolean hasRecentTasks = stack.getTaskCount() > 0; boolean useThumbnailTransition = (topTask != null) && !isTopTaskHome && hasRecentTasks; boolean useThumbnailTransition = (runningTask != null) && !isHomeStackVisible && hasRecentTasks; // Update the launch state that we need in updateHeaderBarLayout() launchState.launchedFromHome = !useThumbnailTransition; launchState.launchedFromApp = useThumbnailTransition || mLaunchedWhileDocking; launchState.launchedViaDockGesture = mLaunchedWhileDocking; launchState.launchedViaDragGesture = mDraggingInRecents; launchState.launchedToTaskId = (topTask != null) ? topTask.id : -1; launchState.launchedToTaskId = (runningTask != null) ? runningTask.id : -1; launchState.launchedWithAltTab = mTriggeredFromAltTab; // Preload the icon (this will be a null-op if we have preloaded the icon already in // preloadRecents()) preloadIcon(topTask); preloadIcon(runningTask); // Update the header bar if necessary Rect windowOverrideRect = getWindowRectOverride(growTarget); Loading @@ -853,7 +855,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener ActivityOptions opts; if (useThumbnailTransition) { // Try starting with a thumbnail transition opts = getThumbnailTransitionActivityOptions(topTask, mDummyStackView, opts = getThumbnailTransitionActivityOptions(runningTask, mDummyStackView, windowOverrideRect); } else { // If there is no thumbnail transition, but is launching from home into recents, then Loading packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +52 −94 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
core/java/android/app/ActivityManager.java +17 −2 Original line number Diff line number Diff line Loading @@ -31,7 +31,6 @@ import android.os.BatteryStats; import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.util.Log; import com.android.internal.app.procstats.ProcessStats; import com.android.internal.os.TransferPipe; import com.android.internal.util.FastPrintWriter; Loading Loading @@ -63,7 +62,6 @@ import android.os.UserHandle; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Size; import android.util.Slog; import org.xmlpull.v1.XmlSerializer; Loading Loading @@ -2360,8 +2358,10 @@ public class ActivityManager { public String[] taskNames; public Rect[] taskBounds; public int[] taskUserIds; public ComponentName topActivity; public int displayId; public int userId; public boolean visible; @Override public int describeContents() { Loading @@ -2388,6 +2388,13 @@ public class ActivityManager { dest.writeIntArray(taskUserIds); dest.writeInt(displayId); dest.writeInt(userId); dest.writeInt(visible ? 1 : 0); if (topActivity != null) { dest.writeInt(1); topActivity.writeToParcel(dest, 0); } else { dest.writeInt(0); } } public void readFromParcel(Parcel source) { Loading @@ -2410,6 +2417,10 @@ public class ActivityManager { taskUserIds = source.createIntArray(); displayId = source.readInt(); userId = source.readInt(); visible = source.readInt() > 0; if (source.readInt() > 0) { topActivity = ComponentName.readFromParcel(source); } } public static final Creator<StackInfo> CREATOR = new Creator<StackInfo>() { Loading Loading @@ -2445,6 +2456,10 @@ public class ActivityManager { sb.append(" bounds="); sb.append(taskBounds[i].toShortString()); } sb.append(" userId=").append(taskUserIds[i]); sb.append(" visible=").append(visible); if (topActivity != null) { sb.append(" topActivity=").append(topActivity); } sb.append("\n"); } return sb.toString(); Loading
packages/SystemUI/src/com/android/systemui/recents/Recents.java +9 −8 Original line number Diff line number Diff line Loading @@ -423,25 +423,26 @@ public class Recents extends SystemUI int currentUser = sSystemServicesProxy.getCurrentUser(); SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask(); ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); boolean screenPinningActive = ssp.isScreenPinningActive(); boolean isTopTaskHome = topTask != null && SystemServicesProxy.isHomeStack(topTask.stackId); if (topTask != null && !isTopTaskHome && !screenPinningActive) { logDockAttempt(mContext, topTask.topActivity, topTask.resizeMode); if (topTask.isDockable) { boolean isRunningTaskInHomeStack = runningTask != null && SystemServicesProxy.isHomeStack(runningTask.stackId); if (runningTask != null && !isRunningTaskInHomeStack && !screenPinningActive) { logDockAttempt(mContext, runningTask.topActivity, runningTask.resizeMode); if (runningTask.isDockable) { if (metricsDockAction != -1) { MetricsLogger.action(mContext, metricsDockAction, topTask.topActivity.flattenToShortString()); runningTask.topActivity.flattenToShortString()); } if (sSystemServicesProxy.isSystemUser(currentUser)) { mImpl.dockTopTask(topTask.id, dragMode, stackCreateMode, initialBounds); mImpl.dockTopTask(runningTask.id, dragMode, stackCreateMode, initialBounds); } else { if (mSystemToUserCallbacks != null) { IRecentsNonSystemUserCallbacks callbacks = mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser); if (callbacks != null) { try { callbacks.dockTopTask(topTask.id, dragMode, stackCreateMode, callbacks.dockTopTask(runningTask.id, dragMode, stackCreateMode, initialBounds); } catch (RemoteException e) { Log.e(TAG, "Callback failed", e); Loading
packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +6 −5 Original line number Diff line number Diff line Loading @@ -169,7 +169,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD */ boolean dismissRecentsToFocusedTask(int logCategory) { SystemServicesProxy ssp = Recents.getSystemServices(); if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) { if (ssp.isRecentsActivityVisible()) { // If we have a focused Task, launch that Task now if (mRecentsView.launchFocusedTask(logCategory)) return true; } Loading @@ -181,7 +181,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD */ boolean dismissRecentsToLaunchTargetTaskOrHome() { SystemServicesProxy ssp = Recents.getSystemServices(); if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) { if (ssp.isRecentsActivityVisible()) { // If we have a focused Task, launch that Task now if (mRecentsView.launchPreviousTask()) return true; // If none of the other cases apply, then just go Home Loading @@ -195,7 +195,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD */ boolean dismissRecentsToFocusedTaskOrHome() { SystemServicesProxy ssp = Recents.getSystemServices(); if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) { if (ssp.isRecentsActivityVisible()) { // If we have a focused Task, launch that Task now if (mRecentsView.launchFocusedTask(0 /* logCategory */)) return true; // If none of the other cases apply, then just go Home Loading Loading @@ -236,7 +236,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD /** Dismisses Recents directly to Home if we currently aren't transitioning. */ boolean dismissRecentsToHomeIfVisible(boolean animated) { SystemServicesProxy ssp = Recents.getSystemServices(); if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) { if (ssp.isRecentsActivityVisible()) { // Return to Home dismissRecentsToHome(animated); return true; Loading Loading @@ -448,7 +448,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD RecentsActivityLaunchState launchState = config.getLaunchState(); RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsTaskLoadPlan loadPlan = loader.createLoadPlan(this); loader.preloadTasks(loadPlan, -1 /* topTaskId */, false /* isTopTaskHome */); loader.preloadTasks(loadPlan, -1 /* runningTaskId */, false /* isHomeStackVisible */); RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options(); loadOpts.numVisibleTasks = launchState.launchedNumVisibleTasks; Loading Loading @@ -777,6 +777,7 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { super.dump(prefix, fd, writer, args); EventBus.getDefault().dump(prefix, writer); Recents.getTaskLoader().dump(prefix, writer); String id = Integer.toHexString(System.identityHashCode(this)); Loading
packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +35 −33 Original line number Diff line number Diff line Loading @@ -108,11 +108,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener if (config.svelteLevel == RecentsConfiguration.SVELTE_NONE) { RecentsTaskLoader loader = Recents.getTaskLoader(); SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo runningTaskInfo = ssp.getTopMostTask(); ActivityManager.RunningTaskInfo runningTaskInfo = ssp.getRunningTask(); // Load the next task only if we aren't svelte RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext); loader.preloadTasks(plan, -1, true /* isTopTaskHome */); loader.preloadTasks(plan, -1, true /* isHomeStackVisible */); RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options(); // This callback is made when a new activity is launched and the old one is paused // so ignore the current activity and try and preload the thumbnail for the Loading Loading @@ -189,7 +189,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener // We can use a new plan since the caches will be the same. RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext); loader.preloadTasks(plan, -1, true /* isTopTaskHome */); loader.preloadTasks(plan, -1, true /* isHomeStackVisible */); RecentsTaskLoadPlan.Options launchOpts = new RecentsTaskLoadPlan.Options(); launchOpts.numVisibleTasks = loader.getIconCacheSize(); launchOpts.numVisibleTaskThumbnails = loader.getThumbnailCacheSize(); Loading Loading @@ -262,10 +262,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener try { // Check if the top task is in the home stack, and start the recents activity SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask(); MutableBoolean isTopTaskHome = new MutableBoolean(true); if (topTask == null || !ssp.isRecentsTopMost(topTask, isTopTaskHome)) { startRecentsActivity(topTask, isTopTaskHome.value || fromHome, animate, growTarget); MutableBoolean isHomeStackVisible = new MutableBoolean(false); if (!ssp.isRecentsActivityVisible(isHomeStackVisible)) { ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); startRecentsActivity(runningTask, isHomeStackVisible.value || fromHome, animate, growTarget); } } catch (ActivityNotFoundException e) { Log.e(TAG, "Failed to launch RecentsActivity", e); Loading Loading @@ -301,11 +302,10 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener try { SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask(); MutableBoolean isTopTaskHome = new MutableBoolean(true); MutableBoolean isHomeStackVisible = new MutableBoolean(true); long elapsedTime = SystemClock.elapsedRealtime() - mLastToggleTime; if (topTask != null && ssp.isRecentsTopMost(topTask, isTopTaskHome)) { if (ssp.isRecentsActivityVisible(isHomeStackVisible)) { RecentsDebugFlags debugFlags = Recents.getDebugFlags(); RecentsConfiguration config = Recents.getConfiguration(); RecentsActivityLaunchState launchState = config.getLaunchState(); Loading Loading @@ -343,7 +343,9 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener } // Otherwise, start the recents activity startRecentsActivity(topTask, isTopTaskHome.value, true /* animate */, growTarget); ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); startRecentsActivity(runningTask, isHomeStackVisible.value, true /* animate */, growTarget); // Only close the other system windows if we are actually showing recents ssp.sendCloseSystemWindows(BaseStatusBar.SYSTEM_DIALOG_REASON_RECENT_APPS); Loading @@ -358,18 +360,18 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener // Preload only the raw task list into a new load plan (which will be consumed by the // RecentsActivity) only if there is a task to animate to. SystemServicesProxy ssp = Recents.getSystemServices(); ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask(); MutableBoolean topTaskHome = new MutableBoolean(true); if (topTask != null && !ssp.isRecentsTopMost(topTask, topTaskHome)) { MutableBoolean isHomeStackVisible = new MutableBoolean(true); if (!ssp.isRecentsActivityVisible(isHomeStackVisible)) { ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); RecentsTaskLoader loader = Recents.getTaskLoader(); sInstanceLoadPlan = loader.createLoadPlan(mContext); sInstanceLoadPlan.preloadRawTasks(topTaskHome.value); loader.preloadTasks(sInstanceLoadPlan, topTask.id, topTaskHome.value); sInstanceLoadPlan.preloadRawTasks(isHomeStackVisible.value); loader.preloadTasks(sInstanceLoadPlan, runningTask.id, isHomeStackVisible.value); TaskStack stack = sInstanceLoadPlan.getTaskStack(); if (stack.getTaskCount() > 0) { // Only preload the icon (but not the thumbnail since it may not have been taken for // the pausing activity) preloadIcon(topTask); preloadIcon(runningTask); // At this point, we don't know anything about the stack state. So only calculate // the dimensions of the thumbnail that we need for the transition into Recents, but Loading Loading @@ -398,25 +400,25 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener SystemServicesProxy ssp = Recents.getSystemServices(); RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext); loader.preloadTasks(plan, -1, true /* isTopTaskHome */); loader.preloadTasks(plan, -1, true /* isHomeStackVisible */); TaskStack focusedStack = plan.getTaskStack(); // Return early if there are no tasks in the focused stack if (focusedStack == null || focusedStack.getTaskCount() == 0) return; ActivityManager.RunningTaskInfo runningTask = ssp.getTopMostTask(); // Return early if there is no running task ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); if (runningTask == null) return; // Find the task in the recents list boolean isTopTaskHome = SystemServicesProxy.isHomeStack(runningTask.stackId); boolean isRunningTaskInHomeStack = SystemServicesProxy.isHomeStack(runningTask.stackId); ArrayList<Task> tasks = focusedStack.getStackTasks(); Task toTask = null; ActivityOptions launchOpts = null; int taskCount = tasks.size(); for (int i = taskCount - 1; i >= 1; i--) { Task task = tasks.get(i); if (isTopTaskHome) { if (isRunningTaskInHomeStack) { toTask = tasks.get(i - 1); launchOpts = ActivityOptions.makeCustomAnimation(mContext, R.anim.recents_launch_next_affiliated_task_target, Loading Loading @@ -450,14 +452,14 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener SystemServicesProxy ssp = Recents.getSystemServices(); RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsTaskLoadPlan plan = loader.createLoadPlan(mContext); loader.preloadTasks(plan, -1, true /* isTopTaskHome */); loader.preloadTasks(plan, -1, true /* isHomeStackVisible */); TaskStack focusedStack = plan.getTaskStack(); // Return early if there are no tasks in the focused stack if (focusedStack == null || focusedStack.getTaskCount() == 0) return; ActivityManager.RunningTaskInfo runningTask = ssp.getTopMostTask(); // Return early if there is no running task (can't determine affiliated tasks in this case) ActivityManager.RunningTaskInfo runningTask = ssp.getRunningTask(); if (runningTask == null) return; // Return early if the running task is in the home stack (optimization) if (SystemServicesProxy.isHomeStack(runningTask.stackId)) return; Loading Loading @@ -693,9 +695,9 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener * Creates the activity options for an app->recents transition. */ private ActivityOptions getThumbnailTransitionActivityOptions( ActivityManager.RunningTaskInfo topTask, TaskStackView stackView, ActivityManager.RunningTaskInfo runningTask, TaskStackView stackView, Rect windowOverrideRect) { if (topTask.stackId == FREEFORM_WORKSPACE_STACK_ID) { if (runningTask.stackId == FREEFORM_WORKSPACE_STACK_ID) { ArrayList<AppTransitionAnimationSpec> specs = new ArrayList<>(); ArrayList<Task> tasks = stackView.getStack().getStackTasks(); TaskStackLayoutAlgorithm stackLayout = stackView.getStackAlgorithm(); Loading Loading @@ -801,8 +803,8 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener /** * Shows the recents activity */ protected void startRecentsActivity(ActivityManager.RunningTaskInfo topTask, boolean isTopTaskHome, boolean animate, int growTarget) { protected void startRecentsActivity(ActivityManager.RunningTaskInfo runningTask, boolean isHomeStackVisible, boolean animate, int growTarget) { RecentsTaskLoader loader = Recents.getTaskLoader(); RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState(); Loading @@ -814,24 +816,24 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener sInstanceLoadPlan = loader.createLoadPlan(mContext); } if (mLaunchedWhileDocking || mTriggeredFromAltTab || !sInstanceLoadPlan.hasTasks()) { loader.preloadTasks(sInstanceLoadPlan, topTask.id, isTopTaskHome); loader.preloadTasks(sInstanceLoadPlan, runningTask.id, isHomeStackVisible); } TaskStack stack = sInstanceLoadPlan.getTaskStack(); boolean hasRecentTasks = stack.getTaskCount() > 0; boolean useThumbnailTransition = (topTask != null) && !isTopTaskHome && hasRecentTasks; boolean useThumbnailTransition = (runningTask != null) && !isHomeStackVisible && hasRecentTasks; // Update the launch state that we need in updateHeaderBarLayout() launchState.launchedFromHome = !useThumbnailTransition; launchState.launchedFromApp = useThumbnailTransition || mLaunchedWhileDocking; launchState.launchedViaDockGesture = mLaunchedWhileDocking; launchState.launchedViaDragGesture = mDraggingInRecents; launchState.launchedToTaskId = (topTask != null) ? topTask.id : -1; launchState.launchedToTaskId = (runningTask != null) ? runningTask.id : -1; launchState.launchedWithAltTab = mTriggeredFromAltTab; // Preload the icon (this will be a null-op if we have preloaded the icon already in // preloadRecents()) preloadIcon(topTask); preloadIcon(runningTask); // Update the header bar if necessary Rect windowOverrideRect = getWindowRectOverride(growTarget); Loading @@ -853,7 +855,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener ActivityOptions opts; if (useThumbnailTransition) { // Try starting with a thumbnail transition opts = getThumbnailTransitionActivityOptions(topTask, mDummyStackView, opts = getThumbnailTransitionActivityOptions(runningTask, mDummyStackView, windowOverrideRect); } else { // If there is no thumbnail transition, but is launching from home into recents, then Loading
packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +52 −94 File changed.Preview size limit exceeded, changes collapsed. Show changes