diff options
| author | 2020-05-06 15:32:50 -0700 | |
|---|---|---|
| committer | 2020-05-26 14:26:25 -0700 | |
| commit | d79e4f49d2e27d942cda07c05e281caae1b5be13 (patch) | |
| tree | 76bc12d1b6052c90b7e86aad410ad9e55c991163 | |
| parent | 1961a740b4be2b7a67d5a42c93ee617885e2bf9d (diff) | |
Add climate bar insets
This can be used to support a 3rd kind of system bar to inset the
applicaiton space.
Bug: 152763889
Test: manual
Change-Id: I3ba75886e94a9fe80a0d1a920749d152dda64031
| -rw-r--r-- | core/java/android/view/InsetsState.java | 16 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/view/InsetsStateTest.java | 34 |
2 files changed, 48 insertions, 2 deletions
diff --git a/core/java/android/view/InsetsState.java b/core/java/android/view/InsetsState.java index 9896aa4fe214..244bdb85e6ed 100644 --- a/core/java/android/view/InsetsState.java +++ b/core/java/android/view/InsetsState.java @@ -78,7 +78,9 @@ public class InsetsState implements Parcelable { ITYPE_TOP_DISPLAY_CUTOUT, ITYPE_RIGHT_DISPLAY_CUTOUT, ITYPE_BOTTOM_DISPLAY_CUTOUT, - ITYPE_IME + ITYPE_IME, + ITYPE_CLIMATE_BAR, + ITYPE_EXTRA_NAVIGATION_BAR }) public @interface InternalInsetsType {} @@ -109,7 +111,11 @@ public class InsetsState implements Parcelable { /** Input method window. */ public static final int ITYPE_IME = 13; - static final int LAST_TYPE = ITYPE_IME; + /** Additional system decorations inset type. */ + public static final int ITYPE_CLIMATE_BAR = 14; + public static final int ITYPE_EXTRA_NAVIGATION_BAR = 15; + + static final int LAST_TYPE = ITYPE_EXTRA_NAVIGATION_BAR; // Derived types @@ -417,8 +423,10 @@ public class InsetsState implements Parcelable { public static @Type.InsetsType int toPublicType(@InternalInsetsType int type) { switch (type) { case ITYPE_STATUS_BAR: + case ITYPE_CLIMATE_BAR: return Type.STATUS_BARS; case ITYPE_NAVIGATION_BAR: + case ITYPE_EXTRA_NAVIGATION_BAR: return Type.NAVIGATION_BARS; case ITYPE_CAPTION_BAR: return Type.CAPTION_BAR; @@ -497,6 +505,10 @@ public class InsetsState implements Parcelable { return "ITYPE_BOTTOM_DISPLAY_CUTOUT"; case ITYPE_IME: return "ITYPE_IME"; + case ITYPE_CLIMATE_BAR: + return "ITYPE_CLIMATE_BAR"; + case ITYPE_EXTRA_NAVIGATION_BAR: + return "ITYPE_EXTRA_NAVIGATION_BAR"; default: return "ITYPE_UNKNOWN_" + type; } diff --git a/core/tests/coretests/src/android/view/InsetsStateTest.java b/core/tests/coretests/src/android/view/InsetsStateTest.java index 2884777fc997..daaf31a6bb65 100644 --- a/core/tests/coretests/src/android/view/InsetsStateTest.java +++ b/core/tests/coretests/src/android/view/InsetsStateTest.java @@ -20,6 +20,8 @@ import static android.view.InsetsState.ISIDE_BOTTOM; import static android.view.InsetsState.ISIDE_TOP; import static android.view.InsetsState.ITYPE_BOTTOM_GESTURES; import static android.view.InsetsState.ITYPE_CAPTION_BAR; +import static android.view.InsetsState.ITYPE_CLIMATE_BAR; +import static android.view.InsetsState.ITYPE_EXTRA_NAVIGATION_BAR; import static android.view.InsetsState.ITYPE_IME; import static android.view.InsetsState.ITYPE_NAVIGATION_BAR; import static android.view.InsetsState.ITYPE_STATUS_BAR; @@ -183,6 +185,38 @@ public class InsetsStateTest { } @Test + public void testCalculateInsets_extraNavRightStatusTop() throws Exception { + try (InsetsModeSession session = + new InsetsModeSession(ViewRootImpl.NEW_INSETS_MODE_FULL)) { + mState.getSource(ITYPE_STATUS_BAR).setFrame(new Rect(0, 0, 100, 100)); + mState.getSource(ITYPE_STATUS_BAR).setVisible(true); + mState.getSource(ITYPE_EXTRA_NAVIGATION_BAR).setFrame(new Rect(80, 0, 100, 300)); + mState.getSource(ITYPE_EXTRA_NAVIGATION_BAR).setVisible(true); + WindowInsets insets = mState.calculateInsets(new Rect(0, 0, 100, 300), null, false, + false, DisplayCutout.NO_CUTOUT, 0, 0, null); + assertEquals(Insets.of(0, 100, 20, 0), insets.getSystemWindowInsets()); + assertEquals(Insets.of(0, 100, 0, 0), insets.getInsets(Type.statusBars())); + assertEquals(Insets.of(0, 0, 20, 0), insets.getInsets(Type.navigationBars())); + } + } + + @Test + public void testCalculateInsets_navigationRightClimateTop() throws Exception { + try (InsetsModeSession session = + new InsetsModeSession(ViewRootImpl.NEW_INSETS_MODE_FULL)) { + mState.getSource(ITYPE_CLIMATE_BAR).setFrame(new Rect(0, 0, 100, 100)); + mState.getSource(ITYPE_CLIMATE_BAR).setVisible(true); + mState.getSource(ITYPE_NAVIGATION_BAR).setFrame(new Rect(80, 0, 100, 300)); + mState.getSource(ITYPE_NAVIGATION_BAR).setVisible(true); + WindowInsets insets = mState.calculateInsets(new Rect(0, 0, 100, 300), null, false, + false, DisplayCutout.NO_CUTOUT, 0, 0, null); + assertEquals(Insets.of(0, 100, 20, 0), insets.getSystemWindowInsets()); + assertEquals(Insets.of(0, 100, 0, 0), insets.getInsets(Type.statusBars())); + assertEquals(Insets.of(0, 0, 20, 0), insets.getInsets(Type.navigationBars())); + } + } + + @Test public void testStripForDispatch() { mState.getSource(ITYPE_STATUS_BAR).setFrame(new Rect(0, 0, 100, 100)); mState.getSource(ITYPE_STATUS_BAR).setVisible(true); |