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

Commit 9f804f75 authored by Yunfan Chen's avatar Yunfan Chen Committed by Android (Google) Code Review
Browse files

Merge "Report caption insets change when layout" into rvc-dev

parents 240839a8 a07fb93c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -116,15 +116,15 @@ public class InsetsSource implements Parcelable {
        if (!ignoreVisibility && !mVisible) {
            return Insets.NONE;
        }
        if (!getIntersection(frame, relativeFrame, mTmpFrame)) {
            return Insets.NONE;
        }
        // During drag-move and drag-resizing, the caption insets position may not get updated
        // before the app frame get updated. To layout the app content correctly during drag events,
        // we always return the insets with the corresponding height covering the top.
        if (getType() == ITYPE_CAPTION_BAR) {
            return Insets.of(0, frame.height(), 0, 0);
        }
        if (!getIntersection(frame, relativeFrame, mTmpFrame)) {
            return Insets.NONE;
        }

        // TODO: Currently, non-floating IME always intersects at bottom due to issues with cutout.
        // However, we should let the policy decide from the server.
+8 −2
Original line number Diff line number Diff line
@@ -2019,10 +2019,17 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
            if (getForeground() != null) {
                drawableChanged();
            }
            getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight());
        }
    }

    /**
     * An interface to be called when the caption visibility or height changed, to report the
     * corresponding insets change to the InsetsController.
     */
    public void notifyCaptionHeightChanged() {
        getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight());
    }

    void setWindow(PhoneWindow phoneWindow) {
        mWindow = phoneWindow;
        Context context = getContext();
@@ -2093,7 +2100,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
            mDecorCaptionView.onConfigurationChanged(displayWindowDecor);
            enableCaption(displayWindowDecor);
        }
        getWindowInsetsController().setCaptionInsetsHeight(getCaptionInsetsHeight());
    }

    void onResourcesLoaded(LayoutInflater inflater, int layoutResource) {
+3 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.view.ViewOutlineProvider;
import android.view.Window;

import com.android.internal.R;
import com.android.internal.policy.DecorView;
import com.android.internal.policy.PhoneWindow;

import java.util.ArrayList;
@@ -305,6 +306,8 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener,
            }
        }

        ((DecorView) mOwner.getDecorView()).notifyCaptionHeightChanged();

        // This assumes that the caption bar is at the top.
        mOwner.notifyRestrictedCaptionAreaCallback(mMaximize.getLeft(), mMaximize.getTop(),
                mClose.getRight(), mClose.getBottom());
+14 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.view;

import static android.view.InsetsState.ITYPE_CAPTION_BAR;
import static android.view.InsetsState.ITYPE_IME;
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;

@@ -46,11 +47,13 @@ public class InsetsSourceTest {

    private InsetsSource mSource = new InsetsSource(ITYPE_NAVIGATION_BAR);
    private InsetsSource mImeSource = new InsetsSource(ITYPE_IME);
    private InsetsSource mCaptionSource = new InsetsSource(ITYPE_CAPTION_BAR);

    @Before
    public void setUp() {
        mSource.setVisible(true);
        mImeSource.setVisible(true);
        mCaptionSource.setVisible(true);
    }

    @Test
@@ -101,6 +104,17 @@ public class InsetsSourceTest {
        assertEquals(Insets.of(0, 0, 0, 100), insets);
    }

    @Test
    public void testCalculateInsets_caption_resizing() {
        mCaptionSource.setFrame(new Rect(0, 0, 100, 100));
        Insets insets = mCaptionSource.calculateInsets(new Rect(0, 0, 200, 200), false);
        assertEquals(Insets.of(0, 100, 0, 0), insets);
        insets = mCaptionSource.calculateInsets(new Rect(0, 0, 50, 200), false);
        assertEquals(Insets.of(0, 100, 0, 0), insets);
        insets = mCaptionSource.calculateInsets(new Rect(100, 100, 200, 500), false);
        assertEquals(Insets.of(0, 100, 0, 0), insets);
    }

    @Test
    public void testCalculateInsets_invisible() {
        mSource.setFrame(new Rect(0, 0, 500, 100));