From efd3d1b41f5c9ced2b6eed4ab6f95a267bcde9f2 Mon Sep 17 00:00:00 2001 From: Filip Gruszczynski Date: Wed, 14 Oct 2015 13:57:55 -0700 Subject: Fix misaligned from and to recents animation. Because of the small translation that accounts for the status bar, the animating window gets cropped at the beginning of from recents and at the end of to recents animation. Change-Id: I36878c6ff84903db05335890b03199878174c5af --- .../java/com/android/server/wm/AppTransition.java | 28 ++++++++++------------ .../com/android/server/wm/WindowStateAnimator.java | 2 -- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index cc51d204e98d..9f44fea94d4a 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -760,26 +760,24 @@ public class AppTransition implements Dump { a = createAspectScaledThumbnailEnterNonFullscreenAnimationLocked( containingFrame, surfaceInsets, taskId); } else { + mTmpFromClipRect.set(containingFrame); + // exclude top screen decor (status bar) region from the source clip. + mTmpFromClipRect.top = contentInsets.top; // App window scaling up to become full screen + mTmpToClipRect.set(containingFrame); if (orientation == Configuration.ORIENTATION_PORTRAIT) { // In portrait, we scale the width and clip to the top/left square scale = thumbWidth / appWidth; scaledTopDecor = (int) (scale * contentInsets.top); int unscaledThumbHeight = (int) (thumbHeight / scale); - mTmpFromClipRect.set(containingFrame); - mTmpFromClipRect.bottom = (mTmpFromClipRect.top + unscaledThumbHeight); - mTmpToClipRect.set(containingFrame); + mTmpFromClipRect.bottom = mTmpFromClipRect.top + unscaledThumbHeight; } else { // In landscape, we scale the height and clip to the top/left square scale = thumbHeight / (appHeight - contentInsets.top); scaledTopDecor = (int) (scale * contentInsets.top); int unscaledThumbWidth = (int) (thumbWidth / scale); - mTmpFromClipRect.set(containingFrame); - mTmpFromClipRect.right = (mTmpFromClipRect.left + unscaledThumbWidth); - mTmpToClipRect.set(containingFrame); + mTmpFromClipRect.right = mTmpFromClipRect.left + unscaledThumbWidth; } - // exclude top screen decor (status bar) region from the source clip. - mTmpFromClipRect.top = contentInsets.top; mNextAppTransitionInsets.set(contentInsets); @@ -821,25 +819,23 @@ public class AppTransition implements Dump { } case THUMBNAIL_TRANSITION_EXIT_SCALE_DOWN: { // App window scaling down from full screen + mTmpFromClipRect.set(containingFrame); + mTmpToClipRect.set(containingFrame); + // exclude top screen decor (status bar) region from the destination clip. + mTmpToClipRect.top = contentInsets.top; if (orientation == Configuration.ORIENTATION_PORTRAIT) { // In portrait, we scale the width and clip to the top/left square scale = thumbWidth / appWidth; scaledTopDecor = (int) (scale * contentInsets.top); int unscaledThumbHeight = (int) (thumbHeight / scale); - mTmpFromClipRect.set(containingFrame); - mTmpToClipRect.set(containingFrame); - mTmpToClipRect.bottom = (mTmpToClipRect.top + unscaledThumbHeight); + mTmpToClipRect.bottom = mTmpToClipRect.top + unscaledThumbHeight; } else { // In landscape, we scale the height and clip to the top/left square scale = thumbHeight / (appHeight - contentInsets.top); scaledTopDecor = (int) (scale * contentInsets.top); int unscaledThumbWidth = (int) (thumbWidth / scale); - mTmpFromClipRect.set(containingFrame); - mTmpToClipRect.set(containingFrame); - mTmpToClipRect.right = (mTmpToClipRect.left + unscaledThumbWidth); + mTmpToClipRect.right = mTmpToClipRect.left + unscaledThumbWidth; } - // exclude top screen decor (status bar) region from the destination clip. - mTmpToClipRect.top = contentInsets.top; mNextAppTransitionInsets.set(contentInsets); diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 3c897fa519b8..191360426e94 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1190,8 +1190,6 @@ class WindowStateAnimator { mDtDy = tmpFloats[Matrix.MSCALE_Y]; float x = tmpFloats[Matrix.MTRANS_X]; float y = tmpFloats[Matrix.MTRANS_Y]; - int w = frame.width(); - int h = frame.height(); mWin.mShownPosition.set((int) x, (int) y); // Now set the alpha... but because our current hardware -- cgit v1.2.3-59-g8ed1b