Loading core/java/android/view/InsetsSource.java +3 −3 Original line number Diff line number Diff line Loading @@ -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. Loading core/java/com/android/internal/policy/DecorView.java +8 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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) { Loading core/java/com/android/internal/widget/DecorCaptionView.java +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading core/tests/coretests/src/android/view/InsetsSourceTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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)); Loading Loading
core/java/android/view/InsetsSource.java +3 −3 Original line number Diff line number Diff line Loading @@ -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. Loading
core/java/com/android/internal/policy/DecorView.java +8 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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) { Loading
core/java/com/android/internal/widget/DecorCaptionView.java +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading
core/tests/coretests/src/android/view/InsetsSourceTest.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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)); Loading