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:
Vinit Nayak
2022-11-02 22:37:43 -07:00
parent 5e093f4a7e
commit b9ee5167c6
2 changed files with 31 additions and 13 deletions

View File

@@ -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;

View File

@@ -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,