Loading core/java/android/view/InsetsFrameProvider.java +26 −33 Original line number Diff line number Diff line Loading @@ -62,9 +62,7 @@ public class InsetsFrameProvider implements Parcelable { */ public static final int SOURCE_ARBITRARY_RECTANGLE = 3; private final IBinder mOwner; private final int mIndex; private final @InsetsType int mType; private final int mId; /** * The selection of the starting rectangle to be converted into source frame. Loading Loading @@ -122,30 +120,30 @@ public class InsetsFrameProvider implements Parcelable { * @param type the {@link InsetsType}. * @see InsetsSource#createId(Object, int, int) */ public InsetsFrameProvider(IBinder owner, @IntRange(from = 0, to = 2047) int index, public InsetsFrameProvider(Object owner, @IntRange(from = 0, to = 2047) int index, @InsetsType int type) { if (index < 0 || index >= 2048) { throw new IllegalArgumentException(); mId = InsetsSource.createId(owner, index, type); } // This throws IllegalArgumentException if the type is not valid. WindowInsets.Type.indexOf(type); mOwner = owner; mIndex = index; mType = type; } public IBinder getOwner() { return mOwner; /** * Returns an unique integer which identifies the insets source. */ public int getId() { return mId; } /** * Returns the index specified in {@link #InsetsFrameProvider(IBinder, int, int)}. */ public int getIndex() { return mIndex; return InsetsSource.getIndex(mId); } /** * Returns the {@link InsetsType} specified in {@link #InsetsFrameProvider(IBinder, int, int)}. */ public int getType() { return mType; return InsetsSource.getType(mId); } public InsetsFrameProvider setSource(int source) { Loading Loading @@ -211,9 +209,9 @@ public class InsetsFrameProvider implements Parcelable { @Override public String toString() { final StringBuilder sb = new StringBuilder("InsetsFrameProvider: {"); sb.append("owner=").append(mOwner); sb.append(", index=").append(mIndex); sb.append(", type=").append(WindowInsets.Type.toString(mType)); sb.append("id=#").append(Integer.toHexString(mId)); sb.append(", index=").append(getIndex()); sb.append(", type=").append(WindowInsets.Type.toString(getType())); sb.append(", source=").append(sourceToString(mSource)); sb.append(", flags=[").append(InsetsSource.flagsToString(mFlags)).append("]"); if (mInsetsSize != null) { Loading Loading @@ -244,9 +242,7 @@ public class InsetsFrameProvider implements Parcelable { } public InsetsFrameProvider(Parcel in) { mOwner = in.readStrongBinder(); mIndex = in.readInt(); mType = in.readInt(); mId = in.readInt(); mSource = in.readInt(); mFlags = in.readInt(); mInsetsSize = in.readTypedObject(Insets.CREATOR); Loading @@ -256,9 +252,7 @@ public class InsetsFrameProvider implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeStrongBinder(mOwner); out.writeInt(mIndex); out.writeInt(mType); out.writeInt(mId); out.writeInt(mSource); out.writeInt(mFlags); out.writeTypedObject(mInsetsSize, flags); Loading @@ -267,7 +261,7 @@ public class InsetsFrameProvider implements Parcelable { } public boolean idEquals(InsetsFrameProvider o) { return Objects.equals(mOwner, o.mOwner) && mIndex == o.mIndex && mType == o.mType; return mId == o.mId; } @Override Loading @@ -279,8 +273,7 @@ public class InsetsFrameProvider implements Parcelable { return false; } final InsetsFrameProvider other = (InsetsFrameProvider) o; return Objects.equals(mOwner, other.mOwner) && mIndex == other.mIndex && mType == other.mType && mSource == other.mSource && mFlags == other.mFlags return mId == other.mId && mSource == other.mSource && mFlags == other.mFlags && Objects.equals(mInsetsSize, other.mInsetsSize) && Arrays.equals(mInsetsSizeOverrides, other.mInsetsSizeOverrides) && Objects.equals(mArbitraryRectangle, other.mArbitraryRectangle); Loading @@ -288,7 +281,7 @@ public class InsetsFrameProvider implements Parcelable { @Override public int hashCode() { return Objects.hash(mOwner, mIndex, mType, mSource, mFlags, mInsetsSize, return Objects.hash(mId, mSource, mFlags, mInsetsSize, Arrays.hashCode(mInsetsSizeOverrides), mArbitraryRectangle); } Loading Loading @@ -319,7 +312,7 @@ public class InsetsFrameProvider implements Parcelable { protected InsetsSizeOverride(Parcel in) { mWindowType = in.readInt(); mInsetsSize = in.readParcelable(null, Insets.class); mInsetsSize = in.readTypedObject(Insets.CREATOR); } public InsetsSizeOverride(int windowType, Insets insetsSize) { Loading Loading @@ -354,7 +347,7 @@ public class InsetsFrameProvider implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(mWindowType); out.writeParcelable(mInsetsSize, flags); out.writeTypedObject(mInsetsSize, flags); } @Override Loading core/java/android/view/InsetsSource.java +20 −2 Original line number Diff line number Diff line Loading @@ -271,7 +271,7 @@ public class InsetsSource implements Parcelable { * @param index An owner may have multiple sources with the same type. For example, the system * server might have multiple display cutout sources. This is used to identify * which one is which. The value must be in a range of [0, 2047]. * @param type The {@link WindowInsets.Type.InsetsType type} of the source. * @param type The {@link InsetsType type} of the source. * @return a unique integer as the identifier. */ public static int createId(Object owner, @IntRange(from = 0, to = 2047) int index, Loading @@ -282,11 +282,29 @@ public class InsetsSource implements Parcelable { // owner takes top 16 bits; // index takes 11 bits since the 6th bit; // type takes bottom 5 bits. return (((owner != null ? owner.hashCode() : 1) % (1 << 16)) << 16) return ((System.identityHashCode(owner) % (1 << 16)) << 16) + (index << 5) + WindowInsets.Type.indexOf(type); } /** * Gets the index from the ID. * * @see #createId(Object, int, int) */ public static int getIndex(int id) { return (id % (1 << 16)) >> 5; } /** * Gets the {@link InsetsType} from the ID. * * @see #createId(Object, int, int) */ public static int getType(int id) { return 1 << (id % 32); } public static String flagsToString(@Flags int flags) { final StringJoiner joiner = new StringJoiner(" "); if ((flags & FLAG_SUPPRESS_SCRIM) != 0) { Loading core/tests/coretests/src/android/view/InsetsSourceTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -227,5 +227,25 @@ public class InsetsSourceTest { assertEquals(numTotalSources, sources.size()); } @Test public void testGetIndex() { for (int index = 0; index < 2048; index++) { for (int type = FIRST; type <= LAST; type = type << 1) { final int id = InsetsSource.createId(null, index, type); assertEquals(index, InsetsSource.getIndex(id)); } } } @Test public void testGetType() { for (int index = 0; index < 2048; index++) { for (int type = FIRST; type <= LAST; type = type << 1) { final int id = InsetsSource.createId(null, index, type); assertEquals(type, InsetsSource.getType(id)); } } } // Parcel and equals already tested via InsetsStateTest } services/core/java/com/android/server/wm/DisplayPolicy.java +3 −5 Original line number Diff line number Diff line Loading @@ -1095,11 +1095,9 @@ public class DisplayPolicy { } else { overrideProviders = null; } final @InsetsType int type = provider.getType(); final int id = InsetsSource.createId( provider.getOwner(), provider.getIndex(), type); mDisplayContent.getInsetsStateController().getOrCreateSourceProvider(id, type) .setWindowContainer(win, frameProvider, overrideProviders); mDisplayContent.getInsetsStateController().getOrCreateSourceProvider( provider.getId(), provider.getType()).setWindowContainer( win, frameProvider, overrideProviders); mInsetsSourceWindowsExceptIme.add(win); } } Loading services/core/java/com/android/server/wm/InsetsPolicy.java +2 −5 Original line number Diff line number Diff line Loading @@ -311,16 +311,13 @@ class InsetsPolicy { state.removeSource(ID_IME); } else if (attrs.providedInsets != null) { for (InsetsFrameProvider provider : attrs.providedInsets) { final int id = InsetsSource.createId( provider.getOwner(), provider.getIndex(), provider.getType()); final @InsetsType int type = provider.getType(); if ((type & WindowInsets.Type.systemBars()) == 0) { if ((provider.getType() & WindowInsets.Type.systemBars()) == 0) { continue; } if (state == originalState) { state = new InsetsState(state); } state.removeSource(id); state.removeSource(provider.getId()); } } Loading Loading
core/java/android/view/InsetsFrameProvider.java +26 −33 Original line number Diff line number Diff line Loading @@ -62,9 +62,7 @@ public class InsetsFrameProvider implements Parcelable { */ public static final int SOURCE_ARBITRARY_RECTANGLE = 3; private final IBinder mOwner; private final int mIndex; private final @InsetsType int mType; private final int mId; /** * The selection of the starting rectangle to be converted into source frame. Loading Loading @@ -122,30 +120,30 @@ public class InsetsFrameProvider implements Parcelable { * @param type the {@link InsetsType}. * @see InsetsSource#createId(Object, int, int) */ public InsetsFrameProvider(IBinder owner, @IntRange(from = 0, to = 2047) int index, public InsetsFrameProvider(Object owner, @IntRange(from = 0, to = 2047) int index, @InsetsType int type) { if (index < 0 || index >= 2048) { throw new IllegalArgumentException(); mId = InsetsSource.createId(owner, index, type); } // This throws IllegalArgumentException if the type is not valid. WindowInsets.Type.indexOf(type); mOwner = owner; mIndex = index; mType = type; } public IBinder getOwner() { return mOwner; /** * Returns an unique integer which identifies the insets source. */ public int getId() { return mId; } /** * Returns the index specified in {@link #InsetsFrameProvider(IBinder, int, int)}. */ public int getIndex() { return mIndex; return InsetsSource.getIndex(mId); } /** * Returns the {@link InsetsType} specified in {@link #InsetsFrameProvider(IBinder, int, int)}. */ public int getType() { return mType; return InsetsSource.getType(mId); } public InsetsFrameProvider setSource(int source) { Loading Loading @@ -211,9 +209,9 @@ public class InsetsFrameProvider implements Parcelable { @Override public String toString() { final StringBuilder sb = new StringBuilder("InsetsFrameProvider: {"); sb.append("owner=").append(mOwner); sb.append(", index=").append(mIndex); sb.append(", type=").append(WindowInsets.Type.toString(mType)); sb.append("id=#").append(Integer.toHexString(mId)); sb.append(", index=").append(getIndex()); sb.append(", type=").append(WindowInsets.Type.toString(getType())); sb.append(", source=").append(sourceToString(mSource)); sb.append(", flags=[").append(InsetsSource.flagsToString(mFlags)).append("]"); if (mInsetsSize != null) { Loading Loading @@ -244,9 +242,7 @@ public class InsetsFrameProvider implements Parcelable { } public InsetsFrameProvider(Parcel in) { mOwner = in.readStrongBinder(); mIndex = in.readInt(); mType = in.readInt(); mId = in.readInt(); mSource = in.readInt(); mFlags = in.readInt(); mInsetsSize = in.readTypedObject(Insets.CREATOR); Loading @@ -256,9 +252,7 @@ public class InsetsFrameProvider implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeStrongBinder(mOwner); out.writeInt(mIndex); out.writeInt(mType); out.writeInt(mId); out.writeInt(mSource); out.writeInt(mFlags); out.writeTypedObject(mInsetsSize, flags); Loading @@ -267,7 +261,7 @@ public class InsetsFrameProvider implements Parcelable { } public boolean idEquals(InsetsFrameProvider o) { return Objects.equals(mOwner, o.mOwner) && mIndex == o.mIndex && mType == o.mType; return mId == o.mId; } @Override Loading @@ -279,8 +273,7 @@ public class InsetsFrameProvider implements Parcelable { return false; } final InsetsFrameProvider other = (InsetsFrameProvider) o; return Objects.equals(mOwner, other.mOwner) && mIndex == other.mIndex && mType == other.mType && mSource == other.mSource && mFlags == other.mFlags return mId == other.mId && mSource == other.mSource && mFlags == other.mFlags && Objects.equals(mInsetsSize, other.mInsetsSize) && Arrays.equals(mInsetsSizeOverrides, other.mInsetsSizeOverrides) && Objects.equals(mArbitraryRectangle, other.mArbitraryRectangle); Loading @@ -288,7 +281,7 @@ public class InsetsFrameProvider implements Parcelable { @Override public int hashCode() { return Objects.hash(mOwner, mIndex, mType, mSource, mFlags, mInsetsSize, return Objects.hash(mId, mSource, mFlags, mInsetsSize, Arrays.hashCode(mInsetsSizeOverrides), mArbitraryRectangle); } Loading Loading @@ -319,7 +312,7 @@ public class InsetsFrameProvider implements Parcelable { protected InsetsSizeOverride(Parcel in) { mWindowType = in.readInt(); mInsetsSize = in.readParcelable(null, Insets.class); mInsetsSize = in.readTypedObject(Insets.CREATOR); } public InsetsSizeOverride(int windowType, Insets insetsSize) { Loading Loading @@ -354,7 +347,7 @@ public class InsetsFrameProvider implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(mWindowType); out.writeParcelable(mInsetsSize, flags); out.writeTypedObject(mInsetsSize, flags); } @Override Loading
core/java/android/view/InsetsSource.java +20 −2 Original line number Diff line number Diff line Loading @@ -271,7 +271,7 @@ public class InsetsSource implements Parcelable { * @param index An owner may have multiple sources with the same type. For example, the system * server might have multiple display cutout sources. This is used to identify * which one is which. The value must be in a range of [0, 2047]. * @param type The {@link WindowInsets.Type.InsetsType type} of the source. * @param type The {@link InsetsType type} of the source. * @return a unique integer as the identifier. */ public static int createId(Object owner, @IntRange(from = 0, to = 2047) int index, Loading @@ -282,11 +282,29 @@ public class InsetsSource implements Parcelable { // owner takes top 16 bits; // index takes 11 bits since the 6th bit; // type takes bottom 5 bits. return (((owner != null ? owner.hashCode() : 1) % (1 << 16)) << 16) return ((System.identityHashCode(owner) % (1 << 16)) << 16) + (index << 5) + WindowInsets.Type.indexOf(type); } /** * Gets the index from the ID. * * @see #createId(Object, int, int) */ public static int getIndex(int id) { return (id % (1 << 16)) >> 5; } /** * Gets the {@link InsetsType} from the ID. * * @see #createId(Object, int, int) */ public static int getType(int id) { return 1 << (id % 32); } public static String flagsToString(@Flags int flags) { final StringJoiner joiner = new StringJoiner(" "); if ((flags & FLAG_SUPPRESS_SCRIM) != 0) { Loading
core/tests/coretests/src/android/view/InsetsSourceTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -227,5 +227,25 @@ public class InsetsSourceTest { assertEquals(numTotalSources, sources.size()); } @Test public void testGetIndex() { for (int index = 0; index < 2048; index++) { for (int type = FIRST; type <= LAST; type = type << 1) { final int id = InsetsSource.createId(null, index, type); assertEquals(index, InsetsSource.getIndex(id)); } } } @Test public void testGetType() { for (int index = 0; index < 2048; index++) { for (int type = FIRST; type <= LAST; type = type << 1) { final int id = InsetsSource.createId(null, index, type); assertEquals(type, InsetsSource.getType(id)); } } } // Parcel and equals already tested via InsetsStateTest }
services/core/java/com/android/server/wm/DisplayPolicy.java +3 −5 Original line number Diff line number Diff line Loading @@ -1095,11 +1095,9 @@ public class DisplayPolicy { } else { overrideProviders = null; } final @InsetsType int type = provider.getType(); final int id = InsetsSource.createId( provider.getOwner(), provider.getIndex(), type); mDisplayContent.getInsetsStateController().getOrCreateSourceProvider(id, type) .setWindowContainer(win, frameProvider, overrideProviders); mDisplayContent.getInsetsStateController().getOrCreateSourceProvider( provider.getId(), provider.getType()).setWindowContainer( win, frameProvider, overrideProviders); mInsetsSourceWindowsExceptIme.add(win); } } Loading
services/core/java/com/android/server/wm/InsetsPolicy.java +2 −5 Original line number Diff line number Diff line Loading @@ -311,16 +311,13 @@ class InsetsPolicy { state.removeSource(ID_IME); } else if (attrs.providedInsets != null) { for (InsetsFrameProvider provider : attrs.providedInsets) { final int id = InsetsSource.createId( provider.getOwner(), provider.getIndex(), provider.getType()); final @InsetsType int type = provider.getType(); if ((type & WindowInsets.Type.systemBars()) == 0) { if ((provider.getType() & WindowInsets.Type.systemBars()) == 0) { continue; } if (state == originalState) { state = new InsetsState(state); } state.removeSource(id); state.removeSource(provider.getId()); } } Loading