diff options
| author | 2016-03-26 00:06:05 +0000 | |
|---|---|---|
| committer | 2016-03-26 00:06:07 +0000 | |
| commit | 3c8a10fb92b51e3d677482d725479c24a2c7faee (patch) | |
| tree | 3732f1f0e107fe6a797074913d9b6b92d6e04ec5 | |
| parent | d26ee111720aebcad486dd1a37b5338040a4f915 (diff) | |
| parent | 0907200095ec73e71c6520580a9b82126058ddf2 (diff) | |
Merge "Fix thumbnail disalignment on curved paths" into nyc-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/AppTransition.java | 32 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowSurfacePlacer.java | 2 |
2 files changed, 26 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 62fa013e1ee6..15a269138658 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -881,7 +881,7 @@ public class AppTransition implements Dump { * when a thumbnail is specified with the pending animation override. */ Animation createThumbnailAspectScaleAnimationLocked(Rect appRect, @Nullable Rect contentInsets, - Bitmap thumbnailHeader, final int taskId) { + Bitmap thumbnailHeader, final int taskId, int orientation) { Animation a; final int thumbWidthI = thumbnailHeader.getWidth(); final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1; @@ -890,12 +890,30 @@ public class AppTransition implements Dump { float scaleW = appWidth / thumbWidth; getNextAppTransitionStartRect(taskId, mTmpRect); - final float toY = mTmpRect.height() / 2 * (scaleW - 1f) + appRect.top; - final float fromY = mTmpRect.top; - final float toX = mTmpRect.width() / 2 * (scaleW - 1f) + appRect.left; - final float fromX = mTmpRect.left; - final float pivotX = mTmpRect.width() / 2; - final float pivotY = mTmpRect.height() / 2; + final float fromX; + final float fromY; + final float toX; + final float toY; + final float pivotX; + final float pivotY; + if (orientation == Configuration.ORIENTATION_PORTRAIT) { + fromX = mTmpRect.left; + fromY = mTmpRect.top; + + // For the curved translate animation to work, the pivot points needs to be at the + // same absolute position as the one from the real surface. + toX = mTmpRect.width() / 2 * (scaleW - 1f) + appRect.left; + toY = appRect.height() / 2 * (1 - 1 / scaleW) + appRect.top; + pivotX = mTmpRect.width() / 2; + pivotY = appRect.height() / 2 / scaleW; + } else { + pivotX = 0; + pivotY = 0; + fromX = mTmpRect.left; + fromY = mTmpRect.top; + toX = appRect.left; + toY = appRect.top; + } final long duration = getAspectScaleDuration(); final Interpolator interpolator = getAspectScaleInterpolator(); if (mNextAppTransitionScaleUp) { diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index 5ff061387314..3b0081d6376f 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -1582,7 +1582,7 @@ class WindowSurfacePlacer { // synchronize its thumbnail surface with the surface for the // open/close animation (only on the way down) anim = mService.mAppTransition.createThumbnailAspectScaleAnimationLocked(appRect, - insets, thumbnailHeader, taskId); + insets, thumbnailHeader, taskId, mService.mCurConfiguration.orientation); openingAppAnimator.thumbnailForceAboveLayer = Math.max(openingLayer, closingLayer); openingAppAnimator.deferThumbnailDestruction = !mService.mAppTransition.isNextThumbnailTransitionScaleUp(); |