Improve Split portrait gesture animation
* Crop out taskbar from bottom thumbnail for vertical split * TODO: Need to re-calculate thumbnail sizes if taskbar is stashed. There's also a very slight rounding error somewhere even in the unstashed case that needs to be revisited Bug: 219411750 Test: Start gesture animation in split in potrait Change-Id: Id6653a352d1eac54b205f3efca740b4e56c7facf
This commit is contained in:
@@ -61,26 +61,42 @@ public class PreviewPositionHelper {
|
||||
* Updates the matrix based on the provided parameters
|
||||
*/
|
||||
public void updateThumbnailMatrix(Rect thumbnailBounds, ThumbnailData thumbnailData,
|
||||
int canvasWidth, int canvasHeight, int screenWidthPx, int taskbarSize, boolean isTablet,
|
||||
int canvasWidth, int canvasHeight, int screenWidthPx, int screenHeightPx,
|
||||
int taskbarSize, boolean isTablet,
|
||||
int currentRotation, boolean isRtl) {
|
||||
boolean isRotated = false;
|
||||
boolean isOrientationDifferent;
|
||||
|
||||
float fullscreenTaskWidth = screenWidthPx;
|
||||
if (mSplitBounds != null && !mSplitBounds.appsStackedVertically) {
|
||||
// For landscape, scale the width
|
||||
float taskPercent = mDesiredStagePosition == STAGE_POSITION_TOP_OR_LEFT
|
||||
? mSplitBounds.leftTaskPercent
|
||||
: (1 - (mSplitBounds.leftTaskPercent + mSplitBounds.dividerWidthPercent));
|
||||
// Scale landscape width to that of actual screen
|
||||
fullscreenTaskWidth = screenWidthPx * taskPercent;
|
||||
}
|
||||
int thumbnailRotation = thumbnailData.rotation;
|
||||
int deltaRotate = getRotationDelta(currentRotation, thumbnailRotation);
|
||||
RectF thumbnailClipHint = new RectF();
|
||||
float canvasScreenRatio = canvasWidth / fullscreenTaskWidth;
|
||||
float scaledTaskbarSize = taskbarSize * canvasScreenRatio;
|
||||
thumbnailClipHint.bottom = isTablet ? scaledTaskbarSize : 0;
|
||||
|
||||
float scaledTaskbarSize = 0;
|
||||
if (mSplitBounds != null) {
|
||||
float fullscreenTaskWidth;
|
||||
float fullscreenTaskHeight;
|
||||
float canvasScreenRatio;
|
||||
|
||||
float taskPercent;
|
||||
if (!mSplitBounds.appsStackedVertically) {
|
||||
// For landscape, scale the width
|
||||
taskPercent = mDesiredStagePosition == STAGE_POSITION_TOP_OR_LEFT
|
||||
? mSplitBounds.leftTaskPercent
|
||||
: (1 - (mSplitBounds.leftTaskPercent + mSplitBounds.dividerWidthPercent));
|
||||
// Scale landscape width to that of actual screen
|
||||
fullscreenTaskWidth = screenWidthPx * taskPercent;
|
||||
canvasScreenRatio = canvasWidth / fullscreenTaskWidth;
|
||||
} else {
|
||||
taskPercent = mDesiredStagePosition != STAGE_POSITION_TOP_OR_LEFT
|
||||
? mSplitBounds.leftTaskPercent
|
||||
: (1 - (mSplitBounds.leftTaskPercent + mSplitBounds.dividerWidthPercent));
|
||||
// Scale landscape width to that of actual screen
|
||||
fullscreenTaskHeight = screenHeightPx * taskPercent;
|
||||
canvasScreenRatio = canvasHeight / fullscreenTaskHeight;
|
||||
}
|
||||
scaledTaskbarSize = taskbarSize * canvasScreenRatio;
|
||||
thumbnailClipHint.bottom = isTablet ? scaledTaskbarSize : 0;
|
||||
}
|
||||
|
||||
float scale = thumbnailData.scale;
|
||||
final float thumbnailScale;
|
||||
|
||||
@@ -148,6 +148,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||
|
||||
val currentRotation: Int = display.rotation
|
||||
val displayWidthPx = windowMetrics.bounds.width()
|
||||
val displayHeightPx = windowMetrics.bounds.height()
|
||||
val isRtl = layoutDirection == LAYOUT_DIRECTION_RTL
|
||||
val isTablet = isTablet(context)
|
||||
val taskbarSize =
|
||||
@@ -163,6 +164,7 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||
measuredWidth,
|
||||
measuredHeight,
|
||||
displayWidthPx,
|
||||
displayHeightPx,
|
||||
taskbarSize,
|
||||
isTablet,
|
||||
currentRotation,
|
||||
|
||||
Reference in New Issue
Block a user