Merge "Merge cherrypicks of [1791247, 1791267, 1791248] into sparse-7542236-L11900000950626321" into sparse-7542236-L11900000950626321
diff --git a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/PackageDeviceInfo.java b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/PackageDeviceInfo.java
index 735b805..4ed65de 100644
--- a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/PackageDeviceInfo.java
+++ b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/PackageDeviceInfo.java
@@ -139,6 +139,8 @@
         store.startArray(REQUESTED_PERMISSIONS);
         if (pkg.requestedPermissions != null && pkg.requestedPermissions.length > 0) {
             for (String permission : pkg.requestedPermissions) {
+                if (permission == null) continue;
+
                 try {
                     final PermissionInfo pi = pm.getPermissionInfo(permission, 0);
 
@@ -146,8 +148,6 @@
                     store.addResult(PERMISSION_NAME, permission);
                     writePermissionsDetails(pi, store);
 
-                    if (permission == null) continue;
-
                     final boolean isPlatformPermission = systemPermissions.contains(permission);
                     if (isPlatformPermission) {
                       final boolean isAndroidPermission = permission.startsWith(PLATFORM_PERMISSION_PREFIX);
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java b/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
index 87dedb4..b7c4fb0 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/AssistantStackTests.java
@@ -292,7 +292,29 @@
             int windowingMode = mWmState.getFocusedStackWindowingMode();
             // In a multi-window environment the home activity might not be fully covered
             assumeTrue(windowingMode == WINDOWING_MODE_FULLSCREEN);
-            mWmState.waitAndAssertVisibilityGone(homeActivity);
+
+            // A WM Shell can implement a policy where there are more than one default
+            // Task Display Areas.
+            // If there are two task display areas, for example, left and right.
+            // When an activity is organized in left task display area it is still running in
+            // WINDOWING_MODE_FULLSCREEN. Having said that, home activity in default task display
+            // area is not fully covered. Thus, home activity is still resumed and visible.
+            // More than that, in the current AOSP 11 implementation, visibility and activity
+            // lifecycle work differently if activities are in the same task display area or in
+            // different task display areas.
+            // For example, if two task display areas have the exact same bounds,
+            // for the user, an activity running in the top task display area covers the activity
+            // running in the bottom task display area. However, because they are in separate
+            // display areas they will be both resumed.
+            // There can be cases where the bounds match but because tasks are in different
+            // task display area they are both resumed.
+            // So we check the activity bounds for two activities to confirm if task display
+            // areas are the same. If not the same, we will skip the visibility asserting test.
+            if (compareActivityBounds(homeActivity,
+                    ComponentName.unflattenFromString(mWmState.getFocusedActivity()))) {
+                mWmState.waitAndAssertVisibilityGone(homeActivity);
+            }
+
             mBroadcastActionTrigger.doAction(TEST_ACTIVITY_ACTION_FINISH_SELF);
             mWmState.waitForFocusedStack(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_ASSISTANT);
             assertAssistantStackExists();
@@ -438,4 +460,16 @@
             super.set(getActivityName(assistantName));
         }
     }
+
+    /**
+     * Compare if bounds were the same between activities
+     */
+    private boolean compareActivityBounds(ComponentName activityName1,
+            ComponentName activityName2) {
+        if (mWmState.getTaskByActivity(activityName1).getBounds()
+                .equals(mWmState.getTaskByActivity(activityName2).getBounds())) {
+            return true;
+        }
+        return false;
+    }
 }
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java b/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
index b90f642..9782c43 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/PinnedStackTests.java
@@ -1018,8 +1018,10 @@
         launchActivity(PIP_ACTIVITY);
         waitForExitPipToFullscreen(PIP_ACTIVITY);
         assertPinnedStackDoesNotExist();
-        mWmState.waitForLastOrientation(ORIENTATION_LANDSCAPE);
-        assertEquals(ORIENTATION_LANDSCAPE, mWmState.getLastOrientation());
+        mWmState.waitForActivityOrientation(PIP_ACTIVITY, ORIENTATION_LANDSCAPE);
+
+        final ActivityTask pipActivityTask = mWmState.getTaskByActivity(PIP_ACTIVITY);
+        assertEquals(ORIENTATION_LANDSCAPE, pipActivityTask.mOverrideConfiguration.orientation);
     }
 
     @Test