@Test public void composeSegment() throws Exception { // zero assertThat(ItemIdComposer.composeSegment(0, 0L), is(0L)); // one assertThat(ItemIdComposer.composeSegment(1, 0L), is(1L << ItemIdComposer.BIT_OFFSET_SEGMENT)); // min assertThat(ItemIdComposer.composeSegment(ItemIdComposer.MIN_SEGMENT, 0L), is(((long) ItemIdComposer.MIN_SEGMENT) << ItemIdComposer.BIT_OFFSET_SEGMENT)); // max assertThat(ItemIdComposer.composeSegment(ItemIdComposer.MAX_SEGMENT, 0L), is(((long) ItemIdComposer.MAX_SEGMENT) << ItemIdComposer.BIT_OFFSET_SEGMENT)); }
@Test public void composeSegment_MinOutOfRange() throws Exception { thrown.expect(IllegalArgumentException.class); //noinspection Range ItemIdComposer.composeSegment(ItemIdComposer.MIN_SEGMENT - 1, 0L); }
@Test public void composeSegment_MaxOutOfRange() throws Exception { thrown.expect(IllegalArgumentException.class); //noinspection Range ItemIdComposer.composeSegment(ItemIdComposer.MAX_SEGMENT + 1, 0L); }
/** * {@inheritDoc} */ @Override public long getItemId(int position) { final long segmentedPosition = getSegmentedPosition(position); final int segment = AdaptersSet.extractSegment(segmentedPosition); final int offset = AdaptersSet.extractSegmentOffset(segmentedPosition); final RecyclerView.Adapter adapter = mAdaptersSet.getAdapter(segment); final int rawViewType = adapter.getItemViewType(offset); final long rawId = adapter.getItemId(offset); final int wrappedViewType = mViewTypeTranslator.wrapItemViewType(segment, rawViewType); final int wrappedSegment = ItemViewTypeComposer.extractSegmentPart(wrappedViewType); return ItemIdComposer.composeSegment(wrappedSegment, rawId); }