Loading core/java/android/view/WindowManager.java +41 −14 Original line number Diff line number Diff line Loading @@ -3590,12 +3590,13 @@ public interface WindowManager extends ViewManager { /** * If specified, the insets provided by this window will be our window frame minus the * insets specified by providedInternalInsets. This should not be used together with * {@link WindowState#mGivenContentInsets}. If both of them are set, both will be applied. * insets specified by providedInternalInsets for each type. This should not be used * together with {@link WindowState#mGivenContentInsets}. If both of them are set, both will * be applied. * * @hide */ public Insets providedInternalInsets = Insets.NONE; public Insets[] providedInternalInsets; /** * If specified, the insets provided by this window for the IME will be our window frame Loading @@ -3603,7 +3604,7 @@ public interface WindowManager extends ViewManager { * * @hide */ public Insets providedInternalImeInsets = Insets.NONE; public Insets[] providedInternalImeInsets; /** * If specified, the frame that used to calculate relative {@link RoundedCorner} will be Loading Loading @@ -3989,8 +3990,18 @@ public interface WindowManager extends ViewManager { } else { out.writeInt(0); } providedInternalInsets.writeToParcel(out, 0 /* parcelableFlags */); providedInternalImeInsets.writeToParcel(out, 0 /* parcelableFlags */); if (providedInternalInsets != null) { out.writeInt(providedInternalInsets.length); out.writeTypedArray(providedInternalInsets, 0 /* parcelableFlags */); } else { out.writeInt(0); } if (providedInternalImeInsets != null) { out.writeInt(providedInternalImeInsets.length); out.writeTypedArray(providedInternalImeInsets, 0 /* parcelableFlags */); } else { out.writeInt(0); } out.writeBoolean(insetsRoundedCornerFrame); if (paramsForRotation != null) { checkNonRecursiveParams(); Loading Loading @@ -4070,8 +4081,16 @@ public interface WindowManager extends ViewManager { providesInsetsTypes = new int[insetsTypesLength]; in.readIntArray(providesInsetsTypes); } providedInternalInsets = Insets.CREATOR.createFromParcel(in); providedInternalImeInsets = Insets.CREATOR.createFromParcel(in); int providedInternalInsetsLength = in.readInt(); if (providedInternalInsetsLength > 0) { providedInternalInsets = new Insets[providedInternalInsetsLength]; in.readTypedArray(providedInternalInsets, Insets.CREATOR); } int providedInternalImeInsetsLength = in.readInt(); if (providedInternalImeInsetsLength > 0) { providedInternalImeInsets = new Insets[providedInternalImeInsetsLength]; in.readTypedArray(providedInternalImeInsets, Insets.CREATOR); } insetsRoundedCornerFrame = in.readBoolean(); int paramsForRotationLength = in.readInt(); if (paramsForRotationLength > 0) { Loading Loading @@ -4374,12 +4393,12 @@ public interface WindowManager extends ViewManager { changes |= LAYOUT_CHANGED; } if (!providedInternalInsets.equals(o.providedInternalInsets)) { if (!Arrays.equals(providedInternalInsets, o.providedInternalInsets)) { providedInternalInsets = o.providedInternalInsets; changes |= LAYOUT_CHANGED; } if (!providedInternalImeInsets.equals(o.providedInternalImeInsets)) { if (!Arrays.equals(providedInternalImeInsets, o.providedInternalImeInsets)) { providedInternalImeInsets = o.providedInternalImeInsets; changes |= LAYOUT_CHANGED; } Loading Loading @@ -4590,13 +4609,21 @@ public interface WindowManager extends ViewManager { sb.append(InsetsState.typeToString(providesInsetsTypes[i])); } } if (!providedInternalInsets.equals(Insets.NONE)) { if (providedInternalInsets != null) { sb.append(System.lineSeparator()); sb.append(" providedInternalInsets="); sb.append(providedInternalInsets); for (int i = 0; i < providedInternalInsets.length; ++i) { if (i > 0) sb.append(' '); sb.append((providedInternalInsets[i])); } } if (!providedInternalImeInsets.equals(Insets.NONE)) { if (providedInternalImeInsets != null) { sb.append(System.lineSeparator()); sb.append(" providedInternalImeInsets="); sb.append(providedInternalImeInsets); for (int i = 0; i < providedInternalImeInsets.length; ++i) { if (i > 0) sb.append(' '); sb.append((providedInternalImeInsets[i])); } } if (insetsRoundedCornerFrame) { sb.append(" insetsRoundedCornerFrame="); Loading packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java +1 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ public class WindowManagerWrapper { public static final int ITYPE_RIGHT_TAPPABLE_ELEMENT = InsetsState.ITYPE_RIGHT_TAPPABLE_ELEMENT; public static final int ITYPE_BOTTOM_TAPPABLE_ELEMENT = InsetsState.ITYPE_BOTTOM_TAPPABLE_ELEMENT; public static final int ITYPE_SIZE = InsetsState.SIZE; public static final int ANIMATION_DURATION_RESIZE = InsetsController.ANIMATION_DURATION_RESIZE; public static final Interpolator RESIZE_INTERPOLATOR = InsetsController.RESIZE_INTERPOLATOR; Loading packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +5 −2 Original line number Diff line number Diff line Loading @@ -83,6 +83,7 @@ import android.util.Log; import android.view.Display; import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.InsetsState; import android.view.InsetsState.InternalInsetsType; import android.view.InsetsVisibilities; import android.view.KeyEvent; Loading Loading @@ -1558,10 +1559,12 @@ public class NavigationBar extends ViewController<NavigationBarView> implements | WindowManager.LayoutParams.FLAG_SLIPPERY, PixelFormat.TRANSLUCENT); lp.gravity = gravity; lp.providedInternalInsets = new Insets[InsetsState.SIZE]; if (insetsHeight != -1) { lp.providedInternalInsets = Insets.of(0, height - insetsHeight, 0, 0); lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] = Insets.of(0, height - insetsHeight, 0, 0); } else { lp.providedInternalInsets = Insets.NONE; lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] = null; } lp.token = new Binder(); lp.accessibilityTitle = mContext.getString(R.string.nav_bar); Loading services/core/java/com/android/server/wm/DisplayPolicy.java +46 −17 Original line number Diff line number Diff line Loading @@ -1146,8 +1146,13 @@ public class DisplayPolicy { mDisplayContent.setInsetProvider(ITYPE_NAVIGATION_BAR, win, (displayFrames, windowContainer, inOutFrame) -> { if (!mNavButtonForcedVisible) { inOutFrame.inset(win.getLayoutingAttrs( displayFrames.mRotation).providedInternalInsets); final Insets[] providedInternalInsets = win.getLayoutingAttrs( displayFrames.mRotation).providedInternalInsets; if (providedInternalInsets != null && providedInternalInsets.length > ITYPE_NAVIGATION_BAR && providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) { inOutFrame.inset(providedInternalInsets[ITYPE_NAVIGATION_BAR]); } inOutFrame.inset(win.mGivenContentInsets); } }, Loading Loading @@ -1193,13 +1198,16 @@ public class DisplayPolicy { if (attrs.providesInsetsTypes != null) { for (@InternalInsetsType int insetsType : attrs.providesInsetsTypes) { final TriConsumer<DisplayFrames, WindowContainer, Rect> imeFrameProvider = !attrs.providedInternalImeInsets.equals(Insets.NONE) ? (displayFrames, windowContainer, inOutFrame) -> { inOutFrame.inset(win.getLayoutingAttrs( displayFrames.mRotation) .providedInternalImeInsets); (displayFrames, windowContainer, inOutFrame) -> { final Insets[] providedInternalImeInsets = win.getLayoutingAttrs(displayFrames.mRotation) .providedInternalImeInsets; if (providedInternalImeInsets != null && providedInternalImeInsets.length > insetsType && providedInternalImeInsets[insetsType] != null) { inOutFrame.inset(providedInternalImeInsets[insetsType]); } : null; }; switch (insetsType) { case ITYPE_STATUS_BAR: mStatusBarAlt = win; Loading @@ -1220,8 +1228,13 @@ public class DisplayPolicy { } mDisplayContent.setInsetProvider(insetsType, win, (displayFrames, windowContainer, inOutFrame) -> { inOutFrame.inset(win.getLayoutingAttrs( displayFrames.mRotation).providedInternalInsets); final Insets[] providedInternalInsets = win.getLayoutingAttrs( displayFrames.mRotation).providedInternalInsets; if (providedInternalInsets != null && providedInternalInsets.length > insetsType && providedInternalInsets[insetsType] != null) { inOutFrame.inset(providedInternalInsets[insetsType]); } inOutFrame.inset(win.mGivenContentInsets); }, imeFrameProvider); mInsetsSourceWindowsExceptIme.add(win); Loading Loading @@ -1937,15 +1950,23 @@ public class DisplayPolicy { && lp.paramsForRotation[rotation] != null) { lp = lp.paramsForRotation[rotation]; } final Insets providedInternalInsets; if (lp.providedInternalInsets != null && lp.providedInternalInsets.length > ITYPE_NAVIGATION_BAR && lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) { providedInternalInsets = lp.providedInternalInsets[ITYPE_NAVIGATION_BAR]; } else { providedInternalInsets = Insets.NONE; } if (position == NAV_BAR_LEFT) { if (lp.width > lp.providedInternalInsets.right) { return lp.width - lp.providedInternalInsets.right; if (lp.width > providedInternalInsets.right) { return lp.width - providedInternalInsets.right; } else { return 0; } } else if (position == NAV_BAR_RIGHT) { if (lp.width > lp.providedInternalInsets.left) { return lp.width - lp.providedInternalInsets.left; if (lp.width > providedInternalInsets.left) { return lp.width - providedInternalInsets.left; } else { return 0; } Loading Loading @@ -1994,10 +2015,18 @@ public class DisplayPolicy { return 0; } LayoutParams lp = mNavigationBar.getLayoutingAttrs(rotation); if (lp.height < lp.providedInternalInsets.top) { final Insets providedInternalInsets; if (lp.providedInternalInsets != null && lp.providedInternalInsets.length > ITYPE_NAVIGATION_BAR && lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) { providedInternalInsets = lp.providedInternalInsets[ITYPE_NAVIGATION_BAR]; } else { providedInternalInsets = Insets.NONE; } if (lp.height < providedInternalInsets.top) { return 0; } return lp.height - lp.providedInternalInsets.top; return lp.height - providedInternalInsets.top; } /** Loading Loading
core/java/android/view/WindowManager.java +41 −14 Original line number Diff line number Diff line Loading @@ -3590,12 +3590,13 @@ public interface WindowManager extends ViewManager { /** * If specified, the insets provided by this window will be our window frame minus the * insets specified by providedInternalInsets. This should not be used together with * {@link WindowState#mGivenContentInsets}. If both of them are set, both will be applied. * insets specified by providedInternalInsets for each type. This should not be used * together with {@link WindowState#mGivenContentInsets}. If both of them are set, both will * be applied. * * @hide */ public Insets providedInternalInsets = Insets.NONE; public Insets[] providedInternalInsets; /** * If specified, the insets provided by this window for the IME will be our window frame Loading @@ -3603,7 +3604,7 @@ public interface WindowManager extends ViewManager { * * @hide */ public Insets providedInternalImeInsets = Insets.NONE; public Insets[] providedInternalImeInsets; /** * If specified, the frame that used to calculate relative {@link RoundedCorner} will be Loading Loading @@ -3989,8 +3990,18 @@ public interface WindowManager extends ViewManager { } else { out.writeInt(0); } providedInternalInsets.writeToParcel(out, 0 /* parcelableFlags */); providedInternalImeInsets.writeToParcel(out, 0 /* parcelableFlags */); if (providedInternalInsets != null) { out.writeInt(providedInternalInsets.length); out.writeTypedArray(providedInternalInsets, 0 /* parcelableFlags */); } else { out.writeInt(0); } if (providedInternalImeInsets != null) { out.writeInt(providedInternalImeInsets.length); out.writeTypedArray(providedInternalImeInsets, 0 /* parcelableFlags */); } else { out.writeInt(0); } out.writeBoolean(insetsRoundedCornerFrame); if (paramsForRotation != null) { checkNonRecursiveParams(); Loading Loading @@ -4070,8 +4081,16 @@ public interface WindowManager extends ViewManager { providesInsetsTypes = new int[insetsTypesLength]; in.readIntArray(providesInsetsTypes); } providedInternalInsets = Insets.CREATOR.createFromParcel(in); providedInternalImeInsets = Insets.CREATOR.createFromParcel(in); int providedInternalInsetsLength = in.readInt(); if (providedInternalInsetsLength > 0) { providedInternalInsets = new Insets[providedInternalInsetsLength]; in.readTypedArray(providedInternalInsets, Insets.CREATOR); } int providedInternalImeInsetsLength = in.readInt(); if (providedInternalImeInsetsLength > 0) { providedInternalImeInsets = new Insets[providedInternalImeInsetsLength]; in.readTypedArray(providedInternalImeInsets, Insets.CREATOR); } insetsRoundedCornerFrame = in.readBoolean(); int paramsForRotationLength = in.readInt(); if (paramsForRotationLength > 0) { Loading Loading @@ -4374,12 +4393,12 @@ public interface WindowManager extends ViewManager { changes |= LAYOUT_CHANGED; } if (!providedInternalInsets.equals(o.providedInternalInsets)) { if (!Arrays.equals(providedInternalInsets, o.providedInternalInsets)) { providedInternalInsets = o.providedInternalInsets; changes |= LAYOUT_CHANGED; } if (!providedInternalImeInsets.equals(o.providedInternalImeInsets)) { if (!Arrays.equals(providedInternalImeInsets, o.providedInternalImeInsets)) { providedInternalImeInsets = o.providedInternalImeInsets; changes |= LAYOUT_CHANGED; } Loading Loading @@ -4590,13 +4609,21 @@ public interface WindowManager extends ViewManager { sb.append(InsetsState.typeToString(providesInsetsTypes[i])); } } if (!providedInternalInsets.equals(Insets.NONE)) { if (providedInternalInsets != null) { sb.append(System.lineSeparator()); sb.append(" providedInternalInsets="); sb.append(providedInternalInsets); for (int i = 0; i < providedInternalInsets.length; ++i) { if (i > 0) sb.append(' '); sb.append((providedInternalInsets[i])); } } if (!providedInternalImeInsets.equals(Insets.NONE)) { if (providedInternalImeInsets != null) { sb.append(System.lineSeparator()); sb.append(" providedInternalImeInsets="); sb.append(providedInternalImeInsets); for (int i = 0; i < providedInternalImeInsets.length; ++i) { if (i > 0) sb.append(' '); sb.append((providedInternalImeInsets[i])); } } if (insetsRoundedCornerFrame) { sb.append(" insetsRoundedCornerFrame="); Loading
packages/SystemUI/shared/src/com/android/systemui/shared/system/WindowManagerWrapper.java +1 −0 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ public class WindowManagerWrapper { public static final int ITYPE_RIGHT_TAPPABLE_ELEMENT = InsetsState.ITYPE_RIGHT_TAPPABLE_ELEMENT; public static final int ITYPE_BOTTOM_TAPPABLE_ELEMENT = InsetsState.ITYPE_BOTTOM_TAPPABLE_ELEMENT; public static final int ITYPE_SIZE = InsetsState.SIZE; public static final int ANIMATION_DURATION_RESIZE = InsetsController.ANIMATION_DURATION_RESIZE; public static final Interpolator RESIZE_INTERPOLATOR = InsetsController.RESIZE_INTERPOLATOR; Loading
packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBar.java +5 −2 Original line number Diff line number Diff line Loading @@ -83,6 +83,7 @@ import android.util.Log; import android.view.Display; import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.InsetsState; import android.view.InsetsState.InternalInsetsType; import android.view.InsetsVisibilities; import android.view.KeyEvent; Loading Loading @@ -1558,10 +1559,12 @@ public class NavigationBar extends ViewController<NavigationBarView> implements | WindowManager.LayoutParams.FLAG_SLIPPERY, PixelFormat.TRANSLUCENT); lp.gravity = gravity; lp.providedInternalInsets = new Insets[InsetsState.SIZE]; if (insetsHeight != -1) { lp.providedInternalInsets = Insets.of(0, height - insetsHeight, 0, 0); lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] = Insets.of(0, height - insetsHeight, 0, 0); } else { lp.providedInternalInsets = Insets.NONE; lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] = null; } lp.token = new Binder(); lp.accessibilityTitle = mContext.getString(R.string.nav_bar); Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +46 −17 Original line number Diff line number Diff line Loading @@ -1146,8 +1146,13 @@ public class DisplayPolicy { mDisplayContent.setInsetProvider(ITYPE_NAVIGATION_BAR, win, (displayFrames, windowContainer, inOutFrame) -> { if (!mNavButtonForcedVisible) { inOutFrame.inset(win.getLayoutingAttrs( displayFrames.mRotation).providedInternalInsets); final Insets[] providedInternalInsets = win.getLayoutingAttrs( displayFrames.mRotation).providedInternalInsets; if (providedInternalInsets != null && providedInternalInsets.length > ITYPE_NAVIGATION_BAR && providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) { inOutFrame.inset(providedInternalInsets[ITYPE_NAVIGATION_BAR]); } inOutFrame.inset(win.mGivenContentInsets); } }, Loading Loading @@ -1193,13 +1198,16 @@ public class DisplayPolicy { if (attrs.providesInsetsTypes != null) { for (@InternalInsetsType int insetsType : attrs.providesInsetsTypes) { final TriConsumer<DisplayFrames, WindowContainer, Rect> imeFrameProvider = !attrs.providedInternalImeInsets.equals(Insets.NONE) ? (displayFrames, windowContainer, inOutFrame) -> { inOutFrame.inset(win.getLayoutingAttrs( displayFrames.mRotation) .providedInternalImeInsets); (displayFrames, windowContainer, inOutFrame) -> { final Insets[] providedInternalImeInsets = win.getLayoutingAttrs(displayFrames.mRotation) .providedInternalImeInsets; if (providedInternalImeInsets != null && providedInternalImeInsets.length > insetsType && providedInternalImeInsets[insetsType] != null) { inOutFrame.inset(providedInternalImeInsets[insetsType]); } : null; }; switch (insetsType) { case ITYPE_STATUS_BAR: mStatusBarAlt = win; Loading @@ -1220,8 +1228,13 @@ public class DisplayPolicy { } mDisplayContent.setInsetProvider(insetsType, win, (displayFrames, windowContainer, inOutFrame) -> { inOutFrame.inset(win.getLayoutingAttrs( displayFrames.mRotation).providedInternalInsets); final Insets[] providedInternalInsets = win.getLayoutingAttrs( displayFrames.mRotation).providedInternalInsets; if (providedInternalInsets != null && providedInternalInsets.length > insetsType && providedInternalInsets[insetsType] != null) { inOutFrame.inset(providedInternalInsets[insetsType]); } inOutFrame.inset(win.mGivenContentInsets); }, imeFrameProvider); mInsetsSourceWindowsExceptIme.add(win); Loading Loading @@ -1937,15 +1950,23 @@ public class DisplayPolicy { && lp.paramsForRotation[rotation] != null) { lp = lp.paramsForRotation[rotation]; } final Insets providedInternalInsets; if (lp.providedInternalInsets != null && lp.providedInternalInsets.length > ITYPE_NAVIGATION_BAR && lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) { providedInternalInsets = lp.providedInternalInsets[ITYPE_NAVIGATION_BAR]; } else { providedInternalInsets = Insets.NONE; } if (position == NAV_BAR_LEFT) { if (lp.width > lp.providedInternalInsets.right) { return lp.width - lp.providedInternalInsets.right; if (lp.width > providedInternalInsets.right) { return lp.width - providedInternalInsets.right; } else { return 0; } } else if (position == NAV_BAR_RIGHT) { if (lp.width > lp.providedInternalInsets.left) { return lp.width - lp.providedInternalInsets.left; if (lp.width > providedInternalInsets.left) { return lp.width - providedInternalInsets.left; } else { return 0; } Loading Loading @@ -1994,10 +2015,18 @@ public class DisplayPolicy { return 0; } LayoutParams lp = mNavigationBar.getLayoutingAttrs(rotation); if (lp.height < lp.providedInternalInsets.top) { final Insets providedInternalInsets; if (lp.providedInternalInsets != null && lp.providedInternalInsets.length > ITYPE_NAVIGATION_BAR && lp.providedInternalInsets[ITYPE_NAVIGATION_BAR] != null) { providedInternalInsets = lp.providedInternalInsets[ITYPE_NAVIGATION_BAR]; } else { providedInternalInsets = Insets.NONE; } if (lp.height < providedInternalInsets.top) { return 0; } return lp.height - lp.providedInternalInsets.top; return lp.height - providedInternalInsets.top; } /** Loading