Refine getIndex and getType of InsetsSource

The methods used "%" to clear higher bits, but it wouldn't work if the
integer is negative. This CLs uses "&" to clear bits that we don't want.

Fix: 281709596
Test: atest InsetsSourceTest
Change-Id: I845926f8b7d784d82b3f020736b478adf9482910
This commit is contained in:
Tiger
2023-05-10 17:58:28 +08:00
parent 706cc5848c
commit f12b45f335

View File

@@ -293,16 +293,23 @@ public class InsetsSource implements Parcelable {
* @see #createId(Object, int, int)
*/
public static int getIndex(int id) {
return (id % (1 << 16)) >> 5;
// start: ????????????????***********?????
// & 65535: 0000000000000000***********?????
// >> 5: 000000000000000000000***********
return (id & 65535) >> 5;
}
/**
* Gets the {@link InsetsType} from the ID.
*
* @see #createId(Object, int, int)
* @see WindowInsets.Type#indexOf(int)
*/
public static int getType(int id) {
return 1 << (id % 32);
// start: ???????????????????????????*****
// & 31: 000000000000000000000000000*****
// 1 <<: See WindowInsets.Type#indexOf
return 1 << (id & 31);
}
public static String flagsToString(@Flags int flags) {