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

Commit c5c1623e authored by Tony Huang's avatar Tony Huang Committed by Android (Google) Code Review
Browse files

Merge "Keep split bounds after configuration update" into sc-v2-dev

parents 29dd7455 fbc5f923
Loading
Loading
Loading
Loading
+16 −1
Original line number Original line Diff line number Diff line
@@ -93,6 +93,7 @@ public final class SplitLayout {
    private final Rect mDividerBounds = new Rect();
    private final Rect mDividerBounds = new Rect();
    private final Rect mBounds1 = new Rect();
    private final Rect mBounds1 = new Rect();
    private final Rect mBounds2 = new Rect();
    private final Rect mBounds2 = new Rect();
    private final Rect mTmpBounds = new Rect();
    private final SplitLayoutHandler mSplitLayoutHandler;
    private final SplitLayoutHandler mSplitLayoutHandler;
    private final SplitWindowManager mSplitWindowManager;
    private final SplitWindowManager mSplitWindowManager;
    private final DisplayImeController mDisplayImeController;
    private final DisplayImeController mDisplayImeController;
@@ -188,9 +189,10 @@ public final class SplitLayout {
        final int rotation = configuration.windowConfiguration.getRotation();
        final int rotation = configuration.windowConfiguration.getRotation();
        final Rect rootBounds = configuration.windowConfiguration.getBounds();
        final Rect rootBounds = configuration.windowConfiguration.getBounds();
        if (rotation != mRotation || !mRootBounds.equals(rootBounds)) {
        if (rotation != mRotation || !mRootBounds.equals(rootBounds)) {
            mTmpBounds.set(mRootBounds);
            mRootBounds.set(rootBounds);
            mRootBounds.set(rootBounds);
            mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
            mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
            resetDividerPosition();
            initDividerPosition(mTmpBounds);
            affectsLayout = true;
            affectsLayout = true;
        }
        }


@@ -202,6 +204,19 @@ public final class SplitLayout {
        return affectsLayout;
        return affectsLayout;
    }
    }


    private void initDividerPosition(Rect oldBounds) {
        final float snapRatio = (float) mDividePosition
                / (float) (isLandscape(oldBounds) ? oldBounds.width() : oldBounds.height());
        // Estimate position by previous ratio.
        final float length =
                (float) (isLandscape() ? mRootBounds.width() : mRootBounds.height());
        final int estimatePosition = (int) (length * snapRatio);
        // Init divider position by estimated position using current bounds snap algorithm.
        mDividePosition = mDividerSnapAlgorithm.calculateNonDismissingSnapTarget(
                estimatePosition).position;
        updateBounds(mDividePosition);
    }

    /** Updates recording bounds of divider window and both of the splits. */
    /** Updates recording bounds of divider window and both of the splits. */
    private void updateBounds(int position) {
    private void updateBounds(int position) {
        mDividerBounds.set(mRootBounds);
        mDividerBounds.set(mRootBounds);