OSDN Git Service

Properly check for orientation mismatch
authorJorim Jaggi <jjaggi@google.com>
Wed, 28 Jun 2017 18:40:27 +0000 (14:40 -0400)
committerandroid-build-team Robot <android-build-team-robot@google.com>
Thu, 29 Jun 2017 04:39:35 +0000 (04:39 +0000)
Previous check tested against the display, which is wrong. Now
we properly check against the configuration.

Test: go/wm-smoke
Test: Enter split screen, go home, launch app, go home, relaunch
app, ensure no splash screen shown
Test: Enter split screen with 2 apps, lock phone, unlock phone

Change-Id: I62d45b6d3e5aa91dcb5edffed4233a5fed7ac9aa
Fixes: 63075521
(cherry picked from commit 1dda7a62a20c247fe97f5791dc2a199a3723c3bd)

services/core/java/com/android/server/wm/AppWindowContainerController.java

index 5f34c60..4e4398e 100644 (file)
@@ -614,7 +614,7 @@ public class AppWindowContainerController
             return STARTING_WINDOW_TYPE_SPLASH_SCREEN;
         } else if (taskSwitch && allowTaskSnapshot) {
             return snapshot == null ? STARTING_WINDOW_TYPE_NONE
-                    : snapshotOrientationSameAsDisplay(snapshot) || fromRecents
+                    : snapshotOrientationSameAsTask(snapshot) || fromRecents
                             ? STARTING_WINDOW_TYPE_SNAPSHOT : STARTING_WINDOW_TYPE_SPLASH_SCREEN;
         } else {
             return STARTING_WINDOW_TYPE_NONE;
@@ -640,24 +640,11 @@ public class AppWindowContainerController
         return true;
     }
 
-    private boolean snapshotOrientationSameAsDisplay(TaskSnapshot snapshot) {
+    private boolean snapshotOrientationSameAsTask(TaskSnapshot snapshot) {
         if (snapshot == null) {
             return false;
         }
-        final Rect rect = new Rect(0, 0, snapshot.getSnapshot().getWidth(),
-                snapshot.getSnapshot().getHeight());
-        rect.inset(snapshot.getContentInsets());
-        final Rect taskBoundsWithoutInsets = new Rect();
-        mContainer.getTask().getBounds(taskBoundsWithoutInsets);
-        final DisplayInfo di = mContainer.getDisplayContent().getDisplayInfo();
-        final Rect displayBounds = new Rect(0, 0, di.logicalWidth, di.logicalHeight);
-        final Rect stableInsets = new Rect();
-        mService.mPolicy.getStableInsetsLw(di.rotation, di.logicalWidth, di.logicalHeight,
-                stableInsets);
-        displayBounds.inset(stableInsets);
-        final boolean snapshotInLandscape = rect.width() >= rect.height();
-        final boolean displayInLandscape = displayBounds.width() >= displayBounds.height();
-        return snapshotInLandscape == displayInLandscape;
+        return mContainer.getTask().getConfiguration().orientation == snapshot.getOrientation();
     }
 
     public void removeStartingWindow() {