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();