diff options
Diffstat (limited to 'services')
4 files changed, 20 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 4c06cbe..9033c9c 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -501,12 +501,15 @@ public class AppTransition implements Dump { return a; } - private Animation createClipRevealAnimationLocked(int transit, boolean enter, - int appWidth, int appHeight) { + private Animation createClipRevealAnimationLocked(int transit, boolean enter, Rect appFrame) { final Animation anim; if (enter) { // Reveal will expand and move faster in horizontal direction + // Start from upper left of start and move to final position + final int appWidth = appFrame.width(); + final int appHeight = appFrame.height(); + // Start from size of launch icon, expand to full width/height Animation clipAnimLR = new ClipRectLRAnimation( (appWidth - mNextAppTransitionStartWidth) / 2, @@ -521,9 +524,9 @@ public class AppTransition implements Dump { // Start from middle of launch icon area, move to 0, 0 int startMiddleX = mNextAppTransitionStartX + - (mNextAppTransitionStartWidth - appWidth) / 2; + (mNextAppTransitionStartWidth - appWidth) / 2 - appFrame.left; int startMiddleY = mNextAppTransitionStartY + - (mNextAppTransitionStartHeight - appHeight) / 2; + (mNextAppTransitionStartHeight - appHeight) / 2 - appFrame.top; TranslateXAnimation translateX = new TranslateXAnimation( Animation.ABSOLUTE, startMiddleX, Animation.ABSOLUTE, 0); @@ -940,7 +943,7 @@ public class AppTransition implements Dump { Animation loadAnimation(WindowManager.LayoutParams lp, int transit, boolean enter, int appWidth, int appHeight, int orientation, Rect containingFrame, Rect contentInsets, - boolean isFullScreen, boolean isVoiceInteraction) { + Rect appFrame, boolean isFullScreen, boolean isVoiceInteraction) { Animation a; if (isVoiceInteraction && (transit == TRANSIT_ACTIVITY_OPEN || transit == TRANSIT_TASK_OPEN @@ -977,9 +980,7 @@ public class AppTransition implements Dump { + " anim=" + a + " nextAppTransition=ANIM_CUSTOM_IN_PLACE" + " transit=" + transit + " Callers=" + Debug.getCallers(3)); } else if (mNextAppTransitionType == NEXT_TRANSIT_TYPE_CLIP_REVEAL) { - a = createClipRevealAnimationLocked(transit, enter, - containingFrame.right - containingFrame.left, - containingFrame.bottom - containingFrame.top); + a = createClipRevealAnimationLocked(transit, enter, appFrame); if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG, "applyAnimation:" + " anim=" + a + " nextAppTransition=ANIM_CLIP_REVEAL" diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index f29d524..584892b 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3412,6 +3412,7 @@ public class WindowManagerService extends IWindowManager.Stub WindowState win = atoken.findMainWindow(); Rect containingFrame = new Rect(0, 0, width, height); Rect contentInsets = new Rect(); + Rect appFrame = new Rect(0, 0, width, height); boolean isFullScreen = true; if (win != null) { if (win.mContainingFrame != null) { @@ -3420,6 +3421,9 @@ public class WindowManagerService extends IWindowManager.Stub if (win.mContentInsets != null) { contentInsets.set(win.mContentInsets); } + if (win.mFrame != null) { + appFrame.set(win.mFrame); + } isFullScreen = ((win.mSystemUiVisibility & SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN) == SYSTEM_UI_FLAGS_LAYOUT_STABLE_FULLSCREEN) || @@ -3433,8 +3437,8 @@ public class WindowManagerService extends IWindowManager.Stub enter = false; } Animation a = mAppTransition.loadAnimation(lp, transit, enter, width, height, - mCurConfiguration.orientation, containingFrame, contentInsets, isFullScreen, - isVoiceInteraction); + mCurConfiguration.orientation, containingFrame, contentInsets, appFrame, + isFullScreen, isVoiceInteraction); if (a != null) { if (DEBUG_ANIM) { RuntimeException e = null; diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 16d27fa..cd9689e 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1635,6 +1635,10 @@ final class WindowState implements WindowManagerPolicy.WindowState { pw.println(); pw.print(prefix); pw.print("mSystemDecorRect="); mSystemDecorRect.printShortString(pw); pw.print(" last="); mLastSystemDecorRect.printShortString(pw); + if (mWinAnimator.mHasClipRect) { + pw.print(" mLastClipRect="); + mWinAnimator.mLastClipRect.printShortString(pw); + } pw.println(); } if (mEnforceSizeCompat) { diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 1a30cba..d6726c1 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1139,8 +1139,6 @@ class WindowStateAnimator { mShownAlpha *= appTransformation.getAlpha(); if (appTransformation.hasClipRect()) { mClipRect.set(appTransformation.getClipRect()); - // Account for non-fullscreen windows - mClipRect.offset(frame.left, frame.top); if (mWin.mHScale > 0) { mClipRect.left /= mWin.mHScale; mClipRect.right /= mWin.mHScale; @@ -1223,7 +1221,7 @@ class WindowStateAnimator { } } - void applyDecorRect(final Rect decorRect) { + private void applyDecorRect(final Rect decorRect) { final WindowState w = mWin; final int width = w.mFrame.width(); final int height = w.mFrame.height(); |