From b20247636b0e0a75edcd327a047b9ea7a9d21b77 Mon Sep 17 00:00:00 2001 From: Winson Date: Tue, 5 Apr 2016 17:32:30 -0700 Subject: [PATCH] Disable landscape aspect-scaled behavior for TV. Bug: 27923205 Change-Id: Ibe45ba62a9de9c03480844235efc97e8b8299e61 --- .../com/android/server/wm/AppTransition.java | 20 ++++++++++++------- .../server/wm/WindowManagerService.java | 2 +- .../server/wm/WindowSurfacePlacer.java | 3 ++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index d6842787eef5d..11b01ccb9c684 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, int orientation) { + Bitmap thumbnailHeader, final int taskId, int uiMode, int orientation) { Animation a; final int thumbWidthI = thumbnailHeader.getWidth(); final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1; @@ -896,7 +896,7 @@ public class AppTransition implements Dump { final float toY; final float pivotX; final float pivotY; - if (orientation == Configuration.ORIENTATION_PORTRAIT) { + if (isTvUiMode(uiMode) || orientation == Configuration.ORIENTATION_PORTRAIT) { fromX = mTmpRect.left; fromY = mTmpRect.top; @@ -1028,7 +1028,7 @@ public class AppTransition implements Dump { * activity that is leaving, and the activity that is entering. */ Animation createAspectScaledThumbnailEnterExitAnimationLocked(int thumbTransitState, - int orientation, int transit, Rect containingFrame, Rect contentInsets, + int uiMode, int orientation, int transit, Rect containingFrame, Rect contentInsets, @Nullable Rect surfaceInsets, boolean freeform, int taskId) { Animation a; final int appWidth = containingFrame.width(); @@ -1067,8 +1067,7 @@ public class AppTransition implements Dump { mTmpFromClipRect.inset(contentInsets); mNextAppTransitionInsets.set(contentInsets); - if (orientation == Configuration.ORIENTATION_PORTRAIT) { - // We scale the width and clip to the top/left square + if (isTvUiMode(uiMode) || orientation == Configuration.ORIENTATION_PORTRAIT) { // We scale the width and clip to the top/left square float scale = thumbWidth / (appWidth - contentInsets.left - contentInsets.right); @@ -1401,7 +1400,7 @@ public class AppTransition implements Dump { * to the recents thumbnail and hence need to account for the surface being * bigger. */ - Animation loadAnimation(WindowManager.LayoutParams lp, int transit, boolean enter, + Animation loadAnimation(WindowManager.LayoutParams lp, int transit, boolean enter, int uiMode, int orientation, Rect frame, Rect displayFrame, Rect insets, @Nullable Rect surfaceInsets, boolean isVoiceInteraction, boolean freeform, int taskId) { @@ -1481,7 +1480,7 @@ public class AppTransition implements Dump { mNextAppTransitionScaleUp = (mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_ASPECT_SCALE_UP); a = createAspectScaledThumbnailEnterExitAnimationLocked( - getThumbnailTransitionState(enter), orientation, transit, frame, + getThumbnailTransitionState(enter), uiMode, orientation, transit, frame, insets, surfaceInsets, freeform, taskId); if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) { String animName = mNextAppTransitionScaleUp ? @@ -1922,4 +1921,11 @@ public class AppTransition implements Dump { } return prepared; } + + /** + * @return whether the specified {@param uiMode} is the TV mode. + */ + private boolean isTvUiMode(int uiMode) { + return (uiMode & Configuration.UI_MODE_TYPE_TELEVISION) > 0; + } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 25da773ffc899..dea4cd9b84366 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3058,7 +3058,7 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_APP_TRANSITIONS) Slog.d(TAG_WM, "Loading animation for app transition." + " transit=" + AppTransition.appTransitionToString(transit) + " enter=" + enter + " frame=" + frame + " insets=" + insets + " surfaceInsets=" + surfaceInsets); - Animation a = mAppTransition.loadAnimation(lp, transit, enter, + Animation a = mAppTransition.loadAnimation(lp, transit, enter, mCurConfiguration.uiMode, mCurConfiguration.orientation, frame, displayFrame, insets, surfaceInsets, isVoiceInteraction, freeform, atoken.mTask.mTaskId); if (a != null) { diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index eda2f39480a8d..04aa735bc99d4 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -1582,7 +1582,8 @@ 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, mService.mCurConfiguration.orientation); + insets, thumbnailHeader, taskId, mService.mCurConfiguration.uiMode, + mService.mCurConfiguration.orientation); openingAppAnimator.thumbnailForceAboveLayer = Math.max(openingLayer, closingLayer); openingAppAnimator.deferThumbnailDestruction = !mService.mAppTransition.isNextThumbnailTransitionScaleUp();