summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Heemin Seog <hseog@google.com> 2020-05-06 15:32:50 -0700
committer Heemin Seog <hseog@google.com> 2020-05-26 14:26:25 -0700
commitd79e4f49d2e27d942cda07c05e281caae1b5be13 (patch)
tree76bc12d1b6052c90b7e86aad410ad9e55c991163
parent1961a740b4be2b7a67d5a42c93ee617885e2bf9d (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.java16
-rw-r--r--core/tests/coretests/src/android/view/InsetsStateTest.java34
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);