OSDN Git Service

2D Recents: Fix issues with thumbnail scaling transitions
authorManu Cornet <manucornet@google.com>
Tue, 24 Jan 2017 09:19:05 +0000 (18:19 +0900)
committerManu Cornet <manucornet@google.com>
Tue, 24 Jan 2017 09:19:08 +0000 (18:19 +0900)
Draw the task view header again, make sure it is visible through
the whole transition, and that it scales as appropriate.

Bug: 33752154
Test: Checked/screencasted app -> recents -> app transitions.
Change-Id: I9b87183cba51d5469ea9d45181bccfafeb85cff2

packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
services/core/java/com/android/server/wm/AppTransition.java

index 0e42a54..4cfdc3d 100644 (file)
@@ -733,11 +733,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
             Task toTask = new Task();
             TaskViewTransform toTransform = getThumbnailTransitionTransform(stackView, toTask,
                     windowOverrideRect);
-            // When using a grid layout, the header is already visible on screen at the target
-            // location, making it unnecessary to draw it in the transition thumbnail.
-            Bitmap thumbnail = stackView.useGridLayout()
-                    ? mThumbTransitionBitmapCache.createAshmemBitmap()
-                    : drawThumbnailTransitionBitmap(toTask, toTransform,
+            Bitmap thumbnail = drawThumbnailTransitionBitmap(toTask, toTransform,
                             mThumbTransitionBitmapCache);
             if (thumbnail != null) {
                 RectF toTaskRect = toTransform.rect;
index 2379374..124d021 100644 (file)
@@ -925,9 +925,9 @@ public class AppTransition implements Dump {
         float scaleW = appWidth / thumbWidth;
         getNextAppTransitionStartRect(taskId, mTmpRect);
         final float fromX;
-        final float fromY;
+        float fromY;
         final float toX;
-        final float toY;
+        float toY;
         final float pivotX;
         final float pivotY;
         if (shouldScaleDownThumbnailTransition(uiMode, orientation)) {
@@ -940,6 +940,12 @@ public class AppTransition implements Dump {
             toY = appRect.height() / 2 * (1 - 1 / scaleW) + appRect.top;
             pivotX = mTmpRect.width() / 2;
             pivotY = appRect.height() / 2 / scaleW;
+            if (mGridLayoutRecentsEnabled) {
+                // In the grid layout, the header is displayed above the thumbnail instead of
+                // overlapping it.
+                fromY -= thumbHeightI;
+                toY -= thumbHeightI * scaleW;
+            }
         } else {
             pivotX = 0;
             pivotY = 0;
@@ -988,7 +994,10 @@ public class AppTransition implements Dump {
             // This AnimationSet uses the Interpolators assigned above.
             AnimationSet set = new AnimationSet(false);
             set.addAnimation(scale);
-            set.addAnimation(alpha);
+            if (!mGridLayoutRecentsEnabled) {
+                // In the grid layout, the header should be shown for the whole animation.
+                set.addAnimation(alpha);
+            }
             set.addAnimation(translate);
             set.addAnimation(clipAnim);
             a = set;
@@ -1007,7 +1016,10 @@ public class AppTransition implements Dump {
             // This AnimationSet uses the Interpolators assigned above.
             AnimationSet set = new AnimationSet(false);
             set.addAnimation(scale);
-            set.addAnimation(alpha);
+            if (!mGridLayoutRecentsEnabled) {
+                // In the grid layout, the header should be shown for the whole animation.
+                set.addAnimation(alpha);
+            }
             set.addAnimation(translate);
             a = set;