diff options
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java | 30 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java | 1 |
2 files changed, 24 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java index 4fb90cb..f2e322d 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java +++ b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java @@ -44,6 +44,7 @@ import android.view.View; import android.view.WindowManager; import com.android.systemui.R; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -240,12 +241,10 @@ public class AlternateRecentsComponent { } /** Returns whether there is are multiple recents tasks */ - boolean hasMultipleRecentsTask() { + boolean hasMultipleRecentsTask(List<ActivityManager.RecentTaskInfo> tasks) { // NOTE: Currently there's no method to get the number of non-home tasks, so we have to // compute this ourselves SystemServicesProxy ssp = mSystemServicesProxy; - List<ActivityManager.RecentTaskInfo> tasks = ssp.getRecentTasks(4, - UserHandle.CURRENT.getIdentifier()); Iterator<ActivityManager.RecentTaskInfo> iter = tasks.iterator(); while (iter.hasNext()) { ActivityManager.RecentTaskInfo t = iter.next(); @@ -259,6 +258,17 @@ public class AlternateRecentsComponent { return (tasks.size() > 1); } + /** Returns whether the base intent of the top task stack was launched with the flag + * Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS. */ + boolean isTopTaskExcludeFromRecents(List<ActivityManager.RecentTaskInfo> tasks) { + if (tasks.size() > 0) { + ActivityManager.RecentTaskInfo t = tasks.get(0); + Console.log(t.baseIntent.toString()); + return (t.baseIntent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0; + } + return false; + } + /** Converts from the device rotation to the degree */ float getDegreesForRotation(int value) { switch (value) { @@ -334,10 +344,18 @@ public class AlternateRecentsComponent { isTopTaskHome = ssp.isInHomeStack(topTask.id); } - // Otherwise, Recents is not the front-most activity and we should animate into it - boolean hasMultipleTasks = hasMultipleRecentsTask(); + // Otherwise, Recents is not the front-most activity and we should animate into it. If + // the activity at the root of the top task stack is excluded from recents, or if that + // task stack is in the home stack, then we just do a simple transition. Otherwise, we + // animate to the rects defined by the Recents service, which can differ depending on the + // number of items in the list. + List<ActivityManager.RecentTaskInfo> recentTasks = + ssp.getRecentTasks(4, UserHandle.CURRENT.getIdentifier()); + boolean hasMultipleTasks = hasMultipleRecentsTask(recentTasks); + boolean isTaskExcludedFromRecents = isTopTaskExcludeFromRecents(recentTasks); Rect taskRect = hasMultipleTasks ? mMultipleCountFirstTaskRect : mSingleCountFirstTaskRect; - if (!isTopTaskHome && taskRect != null && taskRect.width() > 0 && taskRect.height() > 0) { + if (!isTopTaskHome && !isTaskExcludedFromRecents && + (taskRect != null) && (taskRect.width() > 0) && (taskRect.height() > 0)) { // Loading from thumbnail Bitmap thumbnail; Bitmap firstThumbnail = loadFirstTaskThumbnail(); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index 1df4670..a04cd3e 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -326,7 +326,6 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV b, offsetX, offsetY); } - if (task.isActive) { // Bring an active task to the foreground RecentsTaskLoader.getInstance().getSystemServicesProxy() |