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

Commit 43c79704 authored by Jeremy Sim's avatar Jeremy Sim
Browse files

Fix placement bug with split staging icon in RtL

Fixes a bug where switching the phone to RtL caused Overview's split staging icon to be placed incorrectly.

The bug was caused by the fact that FrameLayout margins were not working consistently in RtL. This may be another bug; more investigation required (b/201920967).

This fix makes it so that the icon is positioned using setX and setY rather than margins.

Fixes: 227372971
Test: Manual
Change-Id: I6e5371d20e8e2e4e6f41ba93d0dfa36ed085c103
parent db2c7265
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -239,12 +239,10 @@ public class FloatingTaskView extends FrameLayout {
     *                        offscreen).
     */
    void centerIconView(IconView iconView, float onScreenRectCenterX, float onScreenRectCenterY) {
        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) iconView.getLayoutParams();
        mOrientationHandler.updateStagedSplitIconParams(params, onScreenRectCenterX,
        mOrientationHandler.updateStagedSplitIconParams(iconView, onScreenRectCenterX,
                onScreenRectCenterY, mFullscreenParams.mScaleX, mFullscreenParams.mScaleY,
                iconView.getDrawableWidth(), iconView.getDrawableHeight(),
                mActivity.getDeviceProfile(), mStagePosition);
        iconView.setLayoutParams(params);
    }

    private static class SplitOverlayProperties {
+5 −6
Original line number Diff line number Diff line
@@ -413,16 +413,15 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler {
    }

    @Override
    public void updateStagedSplitIconParams(FrameLayout.LayoutParams out, float onScreenRectCenterX,
    public void updateStagedSplitIconParams(View out, float onScreenRectCenterX,
            float onScreenRectCenterY, float fullscreenScaleX, float fullscreenScaleY,
            int drawableWidth, int drawableHeight, DeviceProfile dp,
            @StagePosition int stagePosition) {
        float inset = dp.getInsets().top;
        out.leftMargin = Math.round(onScreenRectCenterX / fullscreenScaleX
                - 1.0f * drawableWidth / 2);
        out.topMargin = Math.round((onScreenRectCenterY + (inset / 2f)) / fullscreenScaleY
                - 1.0f * drawableHeight / 2);

        out.setX(Math.round(onScreenRectCenterX / fullscreenScaleX
                - 1.0f * drawableWidth / 2));
        out.setY(Math.round((onScreenRectCenterY + (inset / 2f)) / fullscreenScaleY
                - 1.0f * drawableHeight / 2));
    }

    @Override
+2 −2
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ public interface PagedOrientationHandler {

    /**
     * Centers an icon in the split staging area, accounting for insets.
     * @param out The LayoutParams of the icon that needs to be centered.
     * @param out The icon that needs to be centered.
     * @param onScreenRectCenterX The x-center of the on-screen staging area (most of the Rect is
     *                        offscreen).
     * @param onScreenRectCenterY The y-center of the on-screen staging area (most of the Rect is
@@ -129,7 +129,7 @@ public interface PagedOrientationHandler {
     * @param dp The device profile, used to report rotation and hardware insets.
     * @param stagePosition 0 if the staging area is pinned to top/left, 1 for bottom/right.
     */
    void updateStagedSplitIconParams(FrameLayout.LayoutParams out, float onScreenRectCenterX,
    void updateStagedSplitIconParams(View out, float onScreenRectCenterX,
            float onScreenRectCenterY, float fullscreenScaleX, float fullscreenScaleY,
            int drawableWidth, int drawableHeight, DeviceProfile dp,
            @StagePosition int stagePosition);
+11 −11
Original line number Diff line number Diff line
@@ -487,29 +487,29 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
    }

    @Override
    public void updateStagedSplitIconParams(FrameLayout.LayoutParams out, float onScreenRectCenterX,
    public void updateStagedSplitIconParams(View out, float onScreenRectCenterX,
            float onScreenRectCenterY, float fullscreenScaleX, float fullscreenScaleY,
            int drawableWidth, int drawableHeight, DeviceProfile dp,
            @StagePosition int stagePosition) {
        boolean pinToRight = stagePosition == STAGE_POSITION_BOTTOM_OR_RIGHT;
        if (!dp.isLandscape) {
            float inset = dp.getInsets().top;
            out.leftMargin = Math.round(onScreenRectCenterX / fullscreenScaleX
                    - 1.0f * drawableWidth / 2);
            out.topMargin = Math.round((onScreenRectCenterY + (inset / 2f)) / fullscreenScaleY
                    - 1.0f * drawableHeight / 2);
            out.setX(Math.round(onScreenRectCenterX / fullscreenScaleX
                    - 1.0f * drawableWidth / 2));
            out.setY(Math.round((onScreenRectCenterY + (inset / 2f)) / fullscreenScaleY
                    - 1.0f * drawableHeight / 2));
        } else {
            if (pinToRight) {
                float inset = dp.getInsets().right;
                out.leftMargin = Math.round((onScreenRectCenterX - (inset / 2f)) / fullscreenScaleX
                        - 1.0f * drawableWidth / 2);
                out.setX(Math.round((onScreenRectCenterX - (inset / 2f)) / fullscreenScaleX
                        - 1.0f * drawableWidth / 2));
            } else {
                float inset = dp.getInsets().left;
                out.leftMargin = Math.round((onScreenRectCenterX + (inset / 2f)) / fullscreenScaleX
                        - 1.0f * drawableWidth / 2);
                out.setX(Math.round((onScreenRectCenterX + (inset / 2f)) / fullscreenScaleX
                        - 1.0f * drawableWidth / 2));
            }
            out.topMargin = Math.round(onScreenRectCenterY / fullscreenScaleY
                    - 1.0f * drawableHeight / 2);
            out.setY(Math.round(onScreenRectCenterY / fullscreenScaleY
                    - 1.0f * drawableHeight / 2));
        }
    }