Merge "Prevent doubling up on split placeholder insets" into tm-qpr-dev
This commit is contained in:
@@ -218,6 +218,9 @@ public class DeviceProfile {
|
||||
public int overviewRowSpacing;
|
||||
public int overviewGridSideMargin;
|
||||
|
||||
// Split staging
|
||||
public int splitPlaceholderInset;
|
||||
|
||||
// Widgets
|
||||
private final ViewScaleProvider mViewScaleProvider;
|
||||
|
||||
@@ -459,6 +462,8 @@ public class DeviceProfile {
|
||||
overviewRowSpacing = res.getDimensionPixelSize(R.dimen.overview_grid_row_spacing);
|
||||
overviewGridSideMargin = res.getDimensionPixelSize(R.dimen.overview_grid_side_margin);
|
||||
|
||||
splitPlaceholderInset = res.getDimensionPixelSize(R.dimen.split_placeholder_inset);
|
||||
|
||||
// Calculate all of the remaining variables.
|
||||
extraSpace = updateAvailableDimensions(res);
|
||||
|
||||
|
||||
@@ -424,8 +424,8 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler {
|
||||
// In fake land/seascape, the placeholder always needs to go to the "top" of the device,
|
||||
// which is the same bounds as 0 rotation.
|
||||
int width = dp.widthPx;
|
||||
int insetThickness = dp.getInsets().top;
|
||||
out.set(0, 0, width, placeholderHeight + insetThickness);
|
||||
int insetSizeAdjustment = getPlaceholderSizeAdjustment(dp);
|
||||
out.set(0, 0, width, placeholderHeight + insetSizeAdjustment);
|
||||
out.inset(placeholderInset, 0);
|
||||
|
||||
// Adjust the top to account for content off screen. This will help to animate the view in
|
||||
@@ -442,13 +442,21 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler {
|
||||
float onScreenRectCenterY, float fullscreenScaleX, float fullscreenScaleY,
|
||||
int drawableWidth, int drawableHeight, DeviceProfile dp,
|
||||
@StagePosition int stagePosition) {
|
||||
float inset = dp.getInsets().top;
|
||||
float insetAdjustment = getPlaceholderSizeAdjustment(dp) / 2f;
|
||||
out.setX(Math.round(onScreenRectCenterX / fullscreenScaleX
|
||||
- 1.0f * drawableWidth / 2));
|
||||
out.setY(Math.round((onScreenRectCenterY + (inset / 2f)) / fullscreenScaleY
|
||||
out.setY(Math.round((onScreenRectCenterY + insetAdjustment) / fullscreenScaleY
|
||||
- 1.0f * drawableHeight / 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* The split placeholder comes with a default inset to buffer the icon from the top of the
|
||||
* screen. But if the device already has a large inset (from cutouts etc), use that instead.
|
||||
*/
|
||||
private int getPlaceholderSizeAdjustment(DeviceProfile dp) {
|
||||
return Math.max(dp.getInsets().top - dp.splitPlaceholderInset, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSplitInstructionsParams(View out, DeviceProfile dp, int splitInstructionsHeight,
|
||||
int splitInstructionsWidth, int threeButtonNavShift) {
|
||||
|
||||
@@ -445,13 +445,9 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
|
||||
int screenWidth = dp.widthPx;
|
||||
int screenHeight = dp.heightPx;
|
||||
boolean pinToRight = stagePosition == STAGE_POSITION_BOTTOM_OR_RIGHT;
|
||||
int insetThickness;
|
||||
if (!dp.isLandscape) {
|
||||
insetThickness = dp.getInsets().top;
|
||||
} else {
|
||||
insetThickness = pinToRight ? dp.getInsets().right : dp.getInsets().left;
|
||||
}
|
||||
out.set(0, 0, screenWidth, placeholderHeight + insetThickness);
|
||||
int insetSizeAdjustment = getPlaceholderSizeAdjustment(dp, pinToRight);
|
||||
|
||||
out.set(0, 0, screenWidth, placeholderHeight + insetSizeAdjustment);
|
||||
if (!dp.isLandscape) {
|
||||
// portrait, phone or tablet - spans width of screen, nothing else to do
|
||||
out.inset(placeholderInset, 0);
|
||||
@@ -496,20 +492,18 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
|
||||
int drawableWidth, int drawableHeight, DeviceProfile dp,
|
||||
@StagePosition int stagePosition) {
|
||||
boolean pinToRight = stagePosition == STAGE_POSITION_BOTTOM_OR_RIGHT;
|
||||
float insetAdjustment = getPlaceholderSizeAdjustment(dp, pinToRight) / 2f;
|
||||
if (!dp.isLandscape) {
|
||||
float inset = dp.getInsets().top;
|
||||
out.setX(Math.round(onScreenRectCenterX / fullscreenScaleX
|
||||
- 1.0f * drawableWidth / 2));
|
||||
out.setY(Math.round((onScreenRectCenterY + (inset / 2f)) / fullscreenScaleY
|
||||
out.setY(Math.round((onScreenRectCenterY + insetAdjustment) / fullscreenScaleY
|
||||
- 1.0f * drawableHeight / 2));
|
||||
} else {
|
||||
if (pinToRight) {
|
||||
float inset = dp.getInsets().right;
|
||||
out.setX(Math.round((onScreenRectCenterX - (inset / 2f)) / fullscreenScaleX
|
||||
out.setX(Math.round((onScreenRectCenterX - insetAdjustment) / fullscreenScaleX
|
||||
- 1.0f * drawableWidth / 2));
|
||||
} else {
|
||||
float inset = dp.getInsets().left;
|
||||
out.setX(Math.round((onScreenRectCenterX + (inset / 2f)) / fullscreenScaleX
|
||||
out.setX(Math.round((onScreenRectCenterX + insetAdjustment) / fullscreenScaleX
|
||||
- 1.0f * drawableWidth / 2));
|
||||
}
|
||||
out.setY(Math.round(onScreenRectCenterY / fullscreenScaleY
|
||||
@@ -517,6 +511,20 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The split placeholder comes with a default inset to buffer the icon from the top of the
|
||||
* screen. But if the device already has a large inset (from cutouts etc), use that instead.
|
||||
*/
|
||||
private int getPlaceholderSizeAdjustment(DeviceProfile dp, boolean pinToRight) {
|
||||
int insetThickness;
|
||||
if (!dp.isLandscape) {
|
||||
insetThickness = dp.getInsets().top;
|
||||
} else {
|
||||
insetThickness = pinToRight ? dp.getInsets().right : dp.getInsets().left;
|
||||
}
|
||||
return Math.max(insetThickness - dp.splitPlaceholderInset, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSplitInstructionsParams(View out, DeviceProfile dp, int splitInstructionsHeight,
|
||||
int splitInstructionsWidth, int threeButtonNavShift) {
|
||||
|
||||
Reference in New Issue
Block a user