Loading core/java/android/view/InsetsState.java +2 −0 Original line number Diff line number Diff line Loading @@ -458,9 +458,11 @@ public class InsetsState implements Parcelable { final ArraySet<Integer> result = new ArraySet<>(); if ((types & Type.STATUS_BARS) != 0) { result.add(ITYPE_STATUS_BAR); result.add(ITYPE_CLIMATE_BAR); } if ((types & Type.NAVIGATION_BARS) != 0) { result.add(ITYPE_NAVIGATION_BAR); result.add(ITYPE_EXTRA_NAVIGATION_BAR); } if ((types & Type.CAPTION_BAR) != 0) { result.add(ITYPE_CAPTION_BAR); Loading core/tests/coretests/src/android/view/InsetsStateTest.java +18 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,22 @@ public class InsetsStateTest { assertEquals(Insets.of(0, 0, 20, 0), insets.getInsets(navigationBars())); } @Test public void testCalculateInsets_extraNavRightClimateTop() throws Exception { mState.getSource(ITYPE_CLIMATE_BAR).setFrame(new Rect(0, 0, 100, 100)); mState.getSource(ITYPE_CLIMATE_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, 0, TYPE_APPLICATION, WINDOWING_MODE_UNDEFINED, null); // ITYPE_CLIMATE_BAR is a type of status bar and ITYPE_EXTRA_NAVIGATION_BAR is a type // of navigation bar. 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_imeIgnoredWithoutAdjustResize() { mState.getSource(ITYPE_STATUS_BAR).setFrame(new Rect(0, 0, 100, 100)); Loading Loading @@ -336,6 +352,8 @@ public class InsetsStateTest { public void testGetDefaultVisibility() { assertTrue(InsetsState.getDefaultVisibility(ITYPE_STATUS_BAR)); assertTrue(InsetsState.getDefaultVisibility(ITYPE_NAVIGATION_BAR)); assertTrue(InsetsState.getDefaultVisibility(ITYPE_CLIMATE_BAR)); assertTrue(InsetsState.getDefaultVisibility(ITYPE_EXTRA_NAVIGATION_BAR)); assertTrue(InsetsState.getDefaultVisibility(ITYPE_CAPTION_BAR)); assertFalse(InsetsState.getDefaultVisibility(ITYPE_IME)); } Loading services/core/java/com/android/server/wm/DisplayPolicy.java +77 −6 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ import static android.view.InsetsState.ITYPE_BOTTOM_DISPLAY_CUTOUT; import static android.view.InsetsState.ITYPE_BOTTOM_GESTURES; import static android.view.InsetsState.ITYPE_BOTTOM_TAPPABLE_ELEMENT; 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_LEFT_DISPLAY_CUTOUT; import static android.view.InsetsState.ITYPE_LEFT_GESTURES; Loading Loading @@ -215,7 +217,8 @@ public class DisplayPolicy { /** Use the transit animation in style resource (see {@link #selectAnimation}). */ static final int ANIMATION_STYLEABLE = 0; private static final int[] SHOW_TYPES_FOR_SWIPE = {ITYPE_NAVIGATION_BAR, ITYPE_STATUS_BAR}; private static final int[] SHOW_TYPES_FOR_SWIPE = {ITYPE_NAVIGATION_BAR, ITYPE_STATUS_BAR, ITYPE_CLIMATE_BAR, ITYPE_EXTRA_NAVIGATION_BAR}; private static final int[] SHOW_TYPES_FOR_PANIC = {ITYPE_NAVIGATION_BAR}; private final WindowManagerService mService; Loading Loading @@ -301,6 +304,16 @@ public class DisplayPolicy { private WindowState mNavigationBarAlt = null; @WindowManagerPolicy.AltBarPosition private int mNavigationBarAltPosition = ALT_BAR_UNKNOWN; // Alternative climate bar for when flexible insets mapping is used to place a climate bar on // the screen. private WindowState mClimateBarAlt = null; @WindowManagerPolicy.AltBarPosition private int mClimateBarAltPosition = ALT_BAR_UNKNOWN; // Alternative extra nav bar for when flexible insets mapping is used to place an extra nav bar // on the screen. private WindowState mExtraNavBarAlt = null; @WindowManagerPolicy.AltBarPosition private int mExtraNavBarAltPosition = ALT_BAR_UNKNOWN; /** See {@link #getNavigationBarFrameHeight} */ private int[] mNavigationBarFrameHeightForRotationDefault = new int[4]; Loading Loading @@ -669,6 +682,12 @@ public class DisplayPolicy { if (mNavigationBarAlt != null && mNavigationBarAltPosition == pos) { requestTransientBars(mNavigationBarAlt); } if (mClimateBarAlt != null && mClimateBarAltPosition == pos) { requestTransientBars(mClimateBarAlt); } if (mExtraNavBarAlt != null && mExtraNavBarAltPosition == pos) { requestTransientBars(mExtraNavBarAlt); } } void systemReady() { Loading Loading @@ -936,6 +955,12 @@ public class DisplayPolicy { if (mNavigationBarAlt == win) { mNavigationBarAltPosition = getAltBarPosition(attrs); } if (mClimateBarAlt == win) { mClimateBarAltPosition = getAltBarPosition(attrs); } if (mExtraNavBarAlt == win) { mExtraNavBarAltPosition = getAltBarPosition(attrs); } } /** Loading Loading @@ -1033,6 +1058,16 @@ public class DisplayPolicy { return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON; } break; case ITYPE_CLIMATE_BAR: if (mClimateBarAlt != null && mClimateBarAlt.isAlive()) { return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON; } break; case ITYPE_EXTRA_NAVIGATION_BAR: if (mExtraNavBarAlt != null && mExtraNavBarAlt.isAlive()) { return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON; } break; } } } Loading Loading @@ -1146,6 +1181,14 @@ public class DisplayPolicy { mNavigationBarAlt = win; mNavigationBarAltPosition = getAltBarPosition(attrs); break; case ITYPE_CLIMATE_BAR: mClimateBarAlt = win; mClimateBarAltPosition = getAltBarPosition(attrs); break; case ITYPE_EXTRA_NAVIGATION_BAR: mExtraNavBarAlt = win; mExtraNavBarAltPosition = getAltBarPosition(attrs); break; } mDisplayContent.setInsetProvider(insetsType, win, null); } Loading Loading @@ -1194,6 +1237,8 @@ public class DisplayPolicy { switch (insetsType) { case ITYPE_NAVIGATION_BAR: case ITYPE_STATUS_BAR: case ITYPE_CLIMATE_BAR: case ITYPE_EXTRA_NAVIGATION_BAR: case ITYPE_CAPTION_BAR: if (++count > 1) { throw new IllegalArgumentException( Loading Loading @@ -1223,6 +1268,12 @@ public class DisplayPolicy { if (mDisplayContent.isDefaultDisplay) { mService.mPolicy.setKeyguardCandidateLw(null); } } else if (mClimateBarAlt == win) { mClimateBarAlt = null; mDisplayContent.setInsetProvider(ITYPE_CLIMATE_BAR, null, null); } else if (mExtraNavBarAlt == win) { mExtraNavBarAlt = null; mDisplayContent.setInsetProvider(ITYPE_EXTRA_NAVIGATION_BAR, null, null); } if (mLastFocusedWindow == win) { mLastFocusedWindow = null; Loading Loading @@ -1311,7 +1362,8 @@ public class DisplayPolicy { return R.anim.dock_left_enter; } } } else if (win == mStatusBarAlt || win == mNavigationBarAlt) { } else if (win == mStatusBarAlt || win == mNavigationBarAlt || win == mClimateBarAlt || win == mExtraNavBarAlt) { if (win.getAttrs().windowAnimations != 0) { return ANIMATION_STYLEABLE; } Loading Loading @@ -2810,10 +2862,19 @@ public class DisplayPolicy { } final InsetsState requestedState = controlTarget.getRequestedInsetsState(); final @InsetsType int restorePositionTypes = (requestedState.getSourceOrDefaultVisibility( ITYPE_NAVIGATION_BAR) ? Type.navigationBars() : 0) | ( requestedState.getSourceOrDefaultVisibility(ITYPE_STATUS_BAR) ? Type.statusBars() : 0); final @InsetsType int restorePositionTypes = (requestedState.getSourceOrDefaultVisibility(ITYPE_NAVIGATION_BAR) ? Type.navigationBars() : 0) | (requestedState.getSourceOrDefaultVisibility(ITYPE_STATUS_BAR) ? Type.statusBars() : 0) | (mExtraNavBarAlt != null && requestedState.getSourceOrDefaultVisibility( ITYPE_EXTRA_NAVIGATION_BAR) ? Type.navigationBars() : 0) | (mClimateBarAlt != null && requestedState.getSourceOrDefaultVisibility( ITYPE_CLIMATE_BAR) ? Type.statusBars() : 0); if (swipeTarget == mNavigationBar && (restorePositionTypes & Type.navigationBars()) != 0) { Loading Loading @@ -3326,6 +3387,16 @@ public class DisplayPolicy { pw.print(prefix); pw.print("mNavigationBarAltPosition="); pw.println(mNavigationBarAltPosition); } if (mClimateBarAlt != null) { pw.print(prefix); pw.print("mClimateBarAlt="); pw.println(mClimateBarAlt); pw.print(prefix); pw.print("mClimateBarAltPosition="); pw.println(mClimateBarAltPosition); } if (mExtraNavBarAlt != null) { pw.print(prefix); pw.print("mExtraNavBarAlt="); pw.println(mExtraNavBarAlt); pw.print(prefix); pw.print("mExtraNavBarAltPosition="); pw.println(mExtraNavBarAltPosition); } if (mFocusedWindow != null) { pw.print(prefix); pw.print("mFocusedWindow="); pw.println(mFocusedWindow); } Loading services/core/java/com/android/server/wm/InsetsSourceProvider.java +4 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.wm; 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; Loading Loading @@ -93,6 +95,8 @@ class InsetsSourceProvider { case ITYPE_STATUS_BAR: case ITYPE_NAVIGATION_BAR: case ITYPE_IME: case ITYPE_CLIMATE_BAR: case ITYPE_EXTRA_NAVIGATION_BAR: mControllable = true; break; default: Loading services/core/java/com/android/server/wm/InsetsStateController.java +28 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; 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_INVALID; Loading @@ -42,6 +43,7 @@ import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.InsetsState.InternalInsetsType; import android.view.WindowManager; import android.view.WindowManager.LayoutParams.WindowType; import com.android.internal.protolog.common.ProtoLog; import com.android.server.inputmethod.InputMethodManagerInternal; Loading Loading @@ -115,7 +117,7 @@ class InsetsStateController { } InsetsState getInsetsForWindowMetrics(@NonNull WindowManager.LayoutParams attrs) { final @InternalInsetsType int type = getInsetsTypeForWindowType(attrs.type); final @InternalInsetsType int type = getInsetsTypeForLayoutParams(attrs); final WindowToken token = mDisplayContent.getWindowToken(attrs.token); final @WindowingMode int windowingMode = token != null ? token.getWindowingMode() : WINDOWING_MODE_UNDEFINED; Loading @@ -135,7 +137,9 @@ class InsetsStateController { return false; } private static @InternalInsetsType int getInsetsTypeForWindowType(int type) { private static @InternalInsetsType int getInsetsTypeForLayoutParams(WindowManager.LayoutParams attrs) { @WindowType int type = attrs.type; switch (type) { case TYPE_STATUS_BAR: return ITYPE_STATUS_BAR; Loading @@ -143,9 +147,22 @@ class InsetsStateController { return ITYPE_NAVIGATION_BAR; case TYPE_INPUT_METHOD: return ITYPE_IME; default: return ITYPE_INVALID; } // If not one of the types above, check whether an internal inset mapping is specified. if (attrs.providesInsetsTypes != null) { for (@InternalInsetsType int insetsType : attrs.providesInsetsTypes) { switch (insetsType) { case ITYPE_STATUS_BAR: case ITYPE_NAVIGATION_BAR: case ITYPE_CLIMATE_BAR: case ITYPE_EXTRA_NAVIGATION_BAR: return insetsType; } } } return ITYPE_INVALID; } /** @see #getInsetsForDispatch */ Loading @@ -158,14 +175,15 @@ class InsetsStateController { state.removeSource(type); // Navigation bar doesn't get influenced by anything else if (type == ITYPE_NAVIGATION_BAR) { if (type == ITYPE_NAVIGATION_BAR || type == ITYPE_EXTRA_NAVIGATION_BAR) { state.removeSource(ITYPE_IME); state.removeSource(ITYPE_STATUS_BAR); state.removeSource(ITYPE_CLIMATE_BAR); state.removeSource(ITYPE_CAPTION_BAR); } // Status bar doesn't get influenced by caption bar if (type == ITYPE_STATUS_BAR) { if (type == ITYPE_STATUS_BAR || type == ITYPE_CLIMATE_BAR) { state.removeSource(ITYPE_CAPTION_BAR); } Loading Loading @@ -336,8 +354,12 @@ class InsetsStateController { @Nullable InsetsControlTarget fakeNavControlling) { onControlChanged(ITYPE_STATUS_BAR, statusControlling); onControlChanged(ITYPE_NAVIGATION_BAR, navControlling); onControlChanged(ITYPE_CLIMATE_BAR, statusControlling); onControlChanged(ITYPE_EXTRA_NAVIGATION_BAR, navControlling); onControlFakeTargetChanged(ITYPE_STATUS_BAR, fakeStatusControlling); onControlFakeTargetChanged(ITYPE_NAVIGATION_BAR, fakeNavControlling); onControlFakeTargetChanged(ITYPE_CLIMATE_BAR, fakeStatusControlling); onControlFakeTargetChanged(ITYPE_EXTRA_NAVIGATION_BAR, fakeNavControlling); notifyPendingInsetsControlChanged(); } Loading Loading
core/java/android/view/InsetsState.java +2 −0 Original line number Diff line number Diff line Loading @@ -458,9 +458,11 @@ public class InsetsState implements Parcelable { final ArraySet<Integer> result = new ArraySet<>(); if ((types & Type.STATUS_BARS) != 0) { result.add(ITYPE_STATUS_BAR); result.add(ITYPE_CLIMATE_BAR); } if ((types & Type.NAVIGATION_BARS) != 0) { result.add(ITYPE_NAVIGATION_BAR); result.add(ITYPE_EXTRA_NAVIGATION_BAR); } if ((types & Type.CAPTION_BAR) != 0) { result.add(ITYPE_CAPTION_BAR); Loading
core/tests/coretests/src/android/view/InsetsStateTest.java +18 −0 Original line number Diff line number Diff line Loading @@ -123,6 +123,22 @@ public class InsetsStateTest { assertEquals(Insets.of(0, 0, 20, 0), insets.getInsets(navigationBars())); } @Test public void testCalculateInsets_extraNavRightClimateTop() throws Exception { mState.getSource(ITYPE_CLIMATE_BAR).setFrame(new Rect(0, 0, 100, 100)); mState.getSource(ITYPE_CLIMATE_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, 0, TYPE_APPLICATION, WINDOWING_MODE_UNDEFINED, null); // ITYPE_CLIMATE_BAR is a type of status bar and ITYPE_EXTRA_NAVIGATION_BAR is a type // of navigation bar. 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_imeIgnoredWithoutAdjustResize() { mState.getSource(ITYPE_STATUS_BAR).setFrame(new Rect(0, 0, 100, 100)); Loading Loading @@ -336,6 +352,8 @@ public class InsetsStateTest { public void testGetDefaultVisibility() { assertTrue(InsetsState.getDefaultVisibility(ITYPE_STATUS_BAR)); assertTrue(InsetsState.getDefaultVisibility(ITYPE_NAVIGATION_BAR)); assertTrue(InsetsState.getDefaultVisibility(ITYPE_CLIMATE_BAR)); assertTrue(InsetsState.getDefaultVisibility(ITYPE_EXTRA_NAVIGATION_BAR)); assertTrue(InsetsState.getDefaultVisibility(ITYPE_CAPTION_BAR)); assertFalse(InsetsState.getDefaultVisibility(ITYPE_IME)); } Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +77 −6 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ import static android.view.InsetsState.ITYPE_BOTTOM_DISPLAY_CUTOUT; import static android.view.InsetsState.ITYPE_BOTTOM_GESTURES; import static android.view.InsetsState.ITYPE_BOTTOM_TAPPABLE_ELEMENT; 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_LEFT_DISPLAY_CUTOUT; import static android.view.InsetsState.ITYPE_LEFT_GESTURES; Loading Loading @@ -215,7 +217,8 @@ public class DisplayPolicy { /** Use the transit animation in style resource (see {@link #selectAnimation}). */ static final int ANIMATION_STYLEABLE = 0; private static final int[] SHOW_TYPES_FOR_SWIPE = {ITYPE_NAVIGATION_BAR, ITYPE_STATUS_BAR}; private static final int[] SHOW_TYPES_FOR_SWIPE = {ITYPE_NAVIGATION_BAR, ITYPE_STATUS_BAR, ITYPE_CLIMATE_BAR, ITYPE_EXTRA_NAVIGATION_BAR}; private static final int[] SHOW_TYPES_FOR_PANIC = {ITYPE_NAVIGATION_BAR}; private final WindowManagerService mService; Loading Loading @@ -301,6 +304,16 @@ public class DisplayPolicy { private WindowState mNavigationBarAlt = null; @WindowManagerPolicy.AltBarPosition private int mNavigationBarAltPosition = ALT_BAR_UNKNOWN; // Alternative climate bar for when flexible insets mapping is used to place a climate bar on // the screen. private WindowState mClimateBarAlt = null; @WindowManagerPolicy.AltBarPosition private int mClimateBarAltPosition = ALT_BAR_UNKNOWN; // Alternative extra nav bar for when flexible insets mapping is used to place an extra nav bar // on the screen. private WindowState mExtraNavBarAlt = null; @WindowManagerPolicy.AltBarPosition private int mExtraNavBarAltPosition = ALT_BAR_UNKNOWN; /** See {@link #getNavigationBarFrameHeight} */ private int[] mNavigationBarFrameHeightForRotationDefault = new int[4]; Loading Loading @@ -669,6 +682,12 @@ public class DisplayPolicy { if (mNavigationBarAlt != null && mNavigationBarAltPosition == pos) { requestTransientBars(mNavigationBarAlt); } if (mClimateBarAlt != null && mClimateBarAltPosition == pos) { requestTransientBars(mClimateBarAlt); } if (mExtraNavBarAlt != null && mExtraNavBarAltPosition == pos) { requestTransientBars(mExtraNavBarAlt); } } void systemReady() { Loading Loading @@ -936,6 +955,12 @@ public class DisplayPolicy { if (mNavigationBarAlt == win) { mNavigationBarAltPosition = getAltBarPosition(attrs); } if (mClimateBarAlt == win) { mClimateBarAltPosition = getAltBarPosition(attrs); } if (mExtraNavBarAlt == win) { mExtraNavBarAltPosition = getAltBarPosition(attrs); } } /** Loading Loading @@ -1033,6 +1058,16 @@ public class DisplayPolicy { return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON; } break; case ITYPE_CLIMATE_BAR: if (mClimateBarAlt != null && mClimateBarAlt.isAlive()) { return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON; } break; case ITYPE_EXTRA_NAVIGATION_BAR: if (mExtraNavBarAlt != null && mExtraNavBarAlt.isAlive()) { return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON; } break; } } } Loading Loading @@ -1146,6 +1181,14 @@ public class DisplayPolicy { mNavigationBarAlt = win; mNavigationBarAltPosition = getAltBarPosition(attrs); break; case ITYPE_CLIMATE_BAR: mClimateBarAlt = win; mClimateBarAltPosition = getAltBarPosition(attrs); break; case ITYPE_EXTRA_NAVIGATION_BAR: mExtraNavBarAlt = win; mExtraNavBarAltPosition = getAltBarPosition(attrs); break; } mDisplayContent.setInsetProvider(insetsType, win, null); } Loading Loading @@ -1194,6 +1237,8 @@ public class DisplayPolicy { switch (insetsType) { case ITYPE_NAVIGATION_BAR: case ITYPE_STATUS_BAR: case ITYPE_CLIMATE_BAR: case ITYPE_EXTRA_NAVIGATION_BAR: case ITYPE_CAPTION_BAR: if (++count > 1) { throw new IllegalArgumentException( Loading Loading @@ -1223,6 +1268,12 @@ public class DisplayPolicy { if (mDisplayContent.isDefaultDisplay) { mService.mPolicy.setKeyguardCandidateLw(null); } } else if (mClimateBarAlt == win) { mClimateBarAlt = null; mDisplayContent.setInsetProvider(ITYPE_CLIMATE_BAR, null, null); } else if (mExtraNavBarAlt == win) { mExtraNavBarAlt = null; mDisplayContent.setInsetProvider(ITYPE_EXTRA_NAVIGATION_BAR, null, null); } if (mLastFocusedWindow == win) { mLastFocusedWindow = null; Loading Loading @@ -1311,7 +1362,8 @@ public class DisplayPolicy { return R.anim.dock_left_enter; } } } else if (win == mStatusBarAlt || win == mNavigationBarAlt) { } else if (win == mStatusBarAlt || win == mNavigationBarAlt || win == mClimateBarAlt || win == mExtraNavBarAlt) { if (win.getAttrs().windowAnimations != 0) { return ANIMATION_STYLEABLE; } Loading Loading @@ -2810,10 +2862,19 @@ public class DisplayPolicy { } final InsetsState requestedState = controlTarget.getRequestedInsetsState(); final @InsetsType int restorePositionTypes = (requestedState.getSourceOrDefaultVisibility( ITYPE_NAVIGATION_BAR) ? Type.navigationBars() : 0) | ( requestedState.getSourceOrDefaultVisibility(ITYPE_STATUS_BAR) ? Type.statusBars() : 0); final @InsetsType int restorePositionTypes = (requestedState.getSourceOrDefaultVisibility(ITYPE_NAVIGATION_BAR) ? Type.navigationBars() : 0) | (requestedState.getSourceOrDefaultVisibility(ITYPE_STATUS_BAR) ? Type.statusBars() : 0) | (mExtraNavBarAlt != null && requestedState.getSourceOrDefaultVisibility( ITYPE_EXTRA_NAVIGATION_BAR) ? Type.navigationBars() : 0) | (mClimateBarAlt != null && requestedState.getSourceOrDefaultVisibility( ITYPE_CLIMATE_BAR) ? Type.statusBars() : 0); if (swipeTarget == mNavigationBar && (restorePositionTypes & Type.navigationBars()) != 0) { Loading Loading @@ -3326,6 +3387,16 @@ public class DisplayPolicy { pw.print(prefix); pw.print("mNavigationBarAltPosition="); pw.println(mNavigationBarAltPosition); } if (mClimateBarAlt != null) { pw.print(prefix); pw.print("mClimateBarAlt="); pw.println(mClimateBarAlt); pw.print(prefix); pw.print("mClimateBarAltPosition="); pw.println(mClimateBarAltPosition); } if (mExtraNavBarAlt != null) { pw.print(prefix); pw.print("mExtraNavBarAlt="); pw.println(mExtraNavBarAlt); pw.print(prefix); pw.print("mExtraNavBarAltPosition="); pw.println(mExtraNavBarAltPosition); } if (mFocusedWindow != null) { pw.print(prefix); pw.print("mFocusedWindow="); pw.println(mFocusedWindow); } Loading
services/core/java/com/android/server/wm/InsetsSourceProvider.java +4 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.wm; 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; Loading Loading @@ -93,6 +95,8 @@ class InsetsSourceProvider { case ITYPE_STATUS_BAR: case ITYPE_NAVIGATION_BAR: case ITYPE_IME: case ITYPE_CLIMATE_BAR: case ITYPE_EXTRA_NAVIGATION_BAR: mControllable = true; break; default: Loading
services/core/java/com/android/server/wm/InsetsStateController.java +28 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; 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_INVALID; Loading @@ -42,6 +43,7 @@ import android.view.InsetsSourceControl; import android.view.InsetsState; import android.view.InsetsState.InternalInsetsType; import android.view.WindowManager; import android.view.WindowManager.LayoutParams.WindowType; import com.android.internal.protolog.common.ProtoLog; import com.android.server.inputmethod.InputMethodManagerInternal; Loading Loading @@ -115,7 +117,7 @@ class InsetsStateController { } InsetsState getInsetsForWindowMetrics(@NonNull WindowManager.LayoutParams attrs) { final @InternalInsetsType int type = getInsetsTypeForWindowType(attrs.type); final @InternalInsetsType int type = getInsetsTypeForLayoutParams(attrs); final WindowToken token = mDisplayContent.getWindowToken(attrs.token); final @WindowingMode int windowingMode = token != null ? token.getWindowingMode() : WINDOWING_MODE_UNDEFINED; Loading @@ -135,7 +137,9 @@ class InsetsStateController { return false; } private static @InternalInsetsType int getInsetsTypeForWindowType(int type) { private static @InternalInsetsType int getInsetsTypeForLayoutParams(WindowManager.LayoutParams attrs) { @WindowType int type = attrs.type; switch (type) { case TYPE_STATUS_BAR: return ITYPE_STATUS_BAR; Loading @@ -143,9 +147,22 @@ class InsetsStateController { return ITYPE_NAVIGATION_BAR; case TYPE_INPUT_METHOD: return ITYPE_IME; default: return ITYPE_INVALID; } // If not one of the types above, check whether an internal inset mapping is specified. if (attrs.providesInsetsTypes != null) { for (@InternalInsetsType int insetsType : attrs.providesInsetsTypes) { switch (insetsType) { case ITYPE_STATUS_BAR: case ITYPE_NAVIGATION_BAR: case ITYPE_CLIMATE_BAR: case ITYPE_EXTRA_NAVIGATION_BAR: return insetsType; } } } return ITYPE_INVALID; } /** @see #getInsetsForDispatch */ Loading @@ -158,14 +175,15 @@ class InsetsStateController { state.removeSource(type); // Navigation bar doesn't get influenced by anything else if (type == ITYPE_NAVIGATION_BAR) { if (type == ITYPE_NAVIGATION_BAR || type == ITYPE_EXTRA_NAVIGATION_BAR) { state.removeSource(ITYPE_IME); state.removeSource(ITYPE_STATUS_BAR); state.removeSource(ITYPE_CLIMATE_BAR); state.removeSource(ITYPE_CAPTION_BAR); } // Status bar doesn't get influenced by caption bar if (type == ITYPE_STATUS_BAR) { if (type == ITYPE_STATUS_BAR || type == ITYPE_CLIMATE_BAR) { state.removeSource(ITYPE_CAPTION_BAR); } Loading Loading @@ -336,8 +354,12 @@ class InsetsStateController { @Nullable InsetsControlTarget fakeNavControlling) { onControlChanged(ITYPE_STATUS_BAR, statusControlling); onControlChanged(ITYPE_NAVIGATION_BAR, navControlling); onControlChanged(ITYPE_CLIMATE_BAR, statusControlling); onControlChanged(ITYPE_EXTRA_NAVIGATION_BAR, navControlling); onControlFakeTargetChanged(ITYPE_STATUS_BAR, fakeStatusControlling); onControlFakeTargetChanged(ITYPE_NAVIGATION_BAR, fakeNavControlling); onControlFakeTargetChanged(ITYPE_CLIMATE_BAR, fakeStatusControlling); onControlFakeTargetChanged(ITYPE_EXTRA_NAVIGATION_BAR, fakeNavControlling); notifyPendingInsetsControlChanged(); } Loading