/** * Checks whether the passed item ID is a group's one. * * @param rawId raw item ID value (return value of {@link androidx.recyclerview.widget.RecyclerView.ViewHolder#getItemId()}) * @return True for the a group view type, otherwise false */ public static boolean isGroupItemId(long rawId) { return ItemIdComposer.isExpandableGroup(rawId); }
/** * Extracts "Child ID" part from composed ID. * * @param composedId Composed ID * @return Child ID part. If the specified composed ID is not a child of an expandable group, returns {@link RecyclerView#NO_ID}. */ @IntRange(from = MIN_CHILD_ID, to = MAX_CHILD_ID) public static long extractExpandableChildIdPart(long composedId) { if ((composedId == RecyclerView.NO_ID) || isExpandableGroup(composedId)) { return RecyclerView.NO_ID; } return (composedId << (64 - BIT_WIDTH_CHILD_ID - BIT_OFFSET_CHILD_ID)) >> (64 - BIT_WIDTH_CHILD_ID); }
/** * Extracts "Group ID" part from composed ID. * * @param composedId Composed ID * @return Group ID part. If the specified composed ID is not an expandable group, returns {@link RecyclerView#NO_ID}. */ @IntRange(from = MIN_GROUP_ID, to = MAX_GROUP_ID) public static long extractExpandableGroupIdPart(long composedId) { if ((composedId == RecyclerView.NO_ID) || !isExpandableGroup(composedId)) { return RecyclerView.NO_ID; } return (composedId << (64 - BIT_WIDTH_GROUP_ID - BIT_OFFSET_GROUP_ID)) >> (64 - BIT_WIDTH_GROUP_ID); }
@Test public void isExpandableGroup() throws Exception { // zero assertThat(ItemIdComposer.isExpandableGroup(0L), is(false)); // NO_ID assertThat(ItemIdComposer.isExpandableGroup(RecyclerView.NO_ID), is(false)); // not group - 1 assertThat(ItemIdComposer.isExpandableGroup(ItemIdComposer.BIT_MASK_CHILD_ID >> 1), is(false)); // not group - 2 assertThat(ItemIdComposer.isExpandableGroup(ItemIdComposer.BIT_MASK_CHILD_ID & ~1), is(false)); // is group - 1 assertThat(ItemIdComposer.isExpandableGroup(ItemIdComposer.BIT_MASK_CHILD_ID), is(true)); // is group - 2 assertThat(ItemIdComposer.isExpandableGroup(ItemIdComposer.BIT_MASK_GROUP_ID | ItemIdComposer.BIT_MASK_CHILD_ID), is(true)); }