Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7dd058e5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic "ProvideTypedInsetsFrames" into tm-mainline-prod

* changes:
  [automerge] Extend providedInternalInsets to be type specific 2p: 72e2997f
  Extend providedInternalInsets to be type specific
parents 46ceccfe d6be71ef
Loading
Loading
Loading
Loading
+41 −14
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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();
@@ -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) {
@@ -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;
            }
@@ -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=");
+1 −0
Original line number Diff line number Diff line
@@ -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;
+5 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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);
+46 −17
Original line number Diff line number Diff line
@@ -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);
                            }
                        },
@@ -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;
@@ -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);
@@ -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;
            }
@@ -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;
    }

    /**