OSDN Git Service

Fixing rotation issues.
authorWinson Chung <winsonc@google.com>
Fri, 31 Mar 2017 01:15:30 +0000 (18:15 -0700)
committerWinson Chung <winsonc@google.com>
Fri, 31 Mar 2017 21:00:10 +0000 (14:00 -0700)
- Ensuring that we can update the stack bounds of non-docked stacks upon
  rotation while split screen is enabled (previously disabled)
- Fix issue where subsequent bounds calculations were using the animation
  target bounds from the prior orientation

Bug: 36657966
Test: android.server.cts.ActivityManagerPinnedStackTests
Change-Id: I810e35f907721ef5c781b914adac3273ea8da5c8

services/core/java/com/android/server/am/ActivityStackSupervisor.java
services/core/java/com/android/server/wm/TaskStack.java

index b623b2f..c65ca79 100644 (file)
@@ -2252,9 +2252,10 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
             return;
         }
 
-        if (!allowResizeInDockedMode && getStack(DOCKED_STACK_ID) != null) {
-            // If the docked stack exist we don't allow resizes of stacks not caused by the docked
-            // stack size changing so things don't get out of sync.
+        if (!allowResizeInDockedMode && !StackId.tasksAreFloating(stackId) &&
+                getStack(DOCKED_STACK_ID) != null) {
+            // If the docked stack exists, don't resize non-floating stacks independently of the
+            // size computed from the docked stack size (otherwise they will be out of sync)
             return;
         }
 
index dc437ea..8b5f5ac 100644 (file)
@@ -340,7 +340,7 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye
      * @return the source bounds for the bounds animation.
      */
     void getAnimatingSourceBounds(Rect outBounds) {
-        if (mBoundsAnimationSourceBounds != null) {
+        if (!mBoundsAnimationSourceBounds.isEmpty()) {
             outBounds.set(mBoundsAnimationSourceBounds);
             return;
         }
@@ -419,6 +419,11 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye
             // we can just update and return them here
             setBounds(mBounds);
             mBoundsAfterRotation.set(mBounds);
+
+            // Once we've set the bounds based on the rotation of the old bounds in the new
+            // orientation, clear the animation target bounds since they are obsolete
+            mBoundsAnimationTarget.setEmpty();
+            mBoundsAnimationSourceBounds.setEmpty();
             return true;
         }