Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8edca84c authored by Jeremy Sim's avatar Jeremy Sim Committed by Android (Google) Code Review
Browse files

Merge "Prevent doubling up on split placeholder insets" into tm-qpr-dev

parents ddbe35cc 0ac47083
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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);

+12 −4
Original line number Diff line number Diff line
@@ -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) {
+21 −13
Original line number Diff line number Diff line
@@ -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) {