Merge "Mark occluded home stack as invisible." into nyc-dev
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index 8a92b54..e3035da 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -2370,6 +2370,8 @@
public int displayId;
public int userId;
public boolean visible;
+ // Index of the stack in the display's stack list, can be used for comparison of stack order
+ public int position;
@Override
public int describeContents() {
@@ -2397,6 +2399,7 @@
dest.writeInt(displayId);
dest.writeInt(userId);
dest.writeInt(visible ? 1 : 0);
+ dest.writeInt(position);
if (topActivity != null) {
dest.writeInt(1);
topActivity.writeToParcel(dest, 0);
@@ -2426,6 +2429,7 @@
displayId = source.readInt();
userId = source.readInt();
visible = source.readInt() > 0;
+ position = source.readInt();
if (source.readInt() > 0) {
topActivity = ComponentName.readFromParcel(source);
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
index 15bc279..64f83a9 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -371,11 +371,19 @@
try {
ActivityManager.StackInfo stackInfo = mIam.getStackInfo(
ActivityManager.StackId.HOME_STACK_ID);
+ ActivityManager.StackInfo fullscreenStackInfo = mIam.getStackInfo(
+ ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID);
ComponentName topActivity = stackInfo.topActivity;
- if (isHomeStackVisible != null) {
- isHomeStackVisible.value = stackInfo.visible;
+ boolean homeStackVisibleNotOccluded = stackInfo.visible;
+ if (fullscreenStackInfo != null) {
+ boolean isFullscreenStackOccludingHome = fullscreenStackInfo.visible &&
+ fullscreenStackInfo.position > stackInfo.position;
+ homeStackVisibleNotOccluded &= !isFullscreenStackOccludingHome;
}
- return (stackInfo.visible && topActivity != null
+ if (isHomeStackVisible != null) {
+ isHomeStackVisible.value = homeStackVisibleNotOccluded;
+ }
+ return (homeStackVisibleNotOccluded && topActivity != null
&& topActivity.getPackageName().equals(RecentsImpl.RECENTS_PACKAGE)
&& (topActivity.getClassName().equals(RecentsImpl.RECENTS_ACTIVITY)
|| topActivity.getClassName().equals(RecentsTvImpl.RECENTS_TV_ACTIVITY)));
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 0baca9e..ded9aa8 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -123,7 +123,6 @@
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
-import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL;
@@ -3406,12 +3405,16 @@
}
private StackInfo getStackInfoLocked(ActivityStack stack) {
+ final ActivityDisplay display = mActivityDisplays.get(Display.DEFAULT_DISPLAY);
StackInfo info = new StackInfo();
mWindowManager.getStackBounds(stack.mStackId, info.bounds);
info.displayId = Display.DEFAULT_DISPLAY;
info.stackId = stack.mStackId;
info.userId = stack.mCurrentUser;
info.visible = stack.getStackVisibilityLocked(null) == STACK_VISIBLE;
+ info.position = display != null
+ ? display.mStacks.indexOf(stack)
+ : 0;
ArrayList<TaskRecord> tasks = stack.getAllTasks();
final int numTasks = tasks.size();