diff options
Diffstat (limited to 'android/arch/paging/NullPaddedList.java')
-rw-r--r-- | android/arch/paging/NullPaddedList.java | 75 |
1 files changed, 70 insertions, 5 deletions
diff --git a/android/arch/paging/NullPaddedList.java b/android/arch/paging/NullPaddedList.java index c7b0b231..43000302 100644 --- a/android/arch/paging/NullPaddedList.java +++ b/android/arch/paging/NullPaddedList.java @@ -16,9 +16,11 @@ package android.arch.paging; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; -import java.util.AbstractList; +import java.util.ArrayList; import java.util.List; /** @@ -29,11 +31,18 @@ import java.util.List; * @hide */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -public class NullPaddedList<Type> extends AbstractList<Type> { +public class NullPaddedList<Type> extends PagedList<Type> { List<Type> mList; - private int mTrailingNullCount; - private int mLeadingNullCount; - private int mPositionOffset; + int mTrailingNullCount; + int mLeadingNullCount; + int mPositionOffset; + + // track the items prepended/appended since the PagedList was initialized + int mNumberPrepended; + int mNumberAppended; + + NullPaddedList() { + } @Override public String toString() { @@ -82,6 +91,20 @@ public class NullPaddedList<Type> extends AbstractList<Type> { mPositionOffset = positionOffset; } + /** + * Create a copy of the passed NullPaddedList. + * + * @param other Other list to copy. + */ + NullPaddedList(NullPaddedList<Type> other) { + mLeadingNullCount = other.getLeadingNullCount(); + mList = other.isImmutable() ? other.mList : new ArrayList<>(other.mList); + mTrailingNullCount = other.getTrailingNullCount(); + + mNumberPrepended = other.getNumberPrepended(); + mNumberAppended = other.getNumberAppended(); + } + // --------------- PagedList API --------------- @Override @@ -101,12 +124,46 @@ public class NullPaddedList<Type> extends AbstractList<Type> { } @Override + public void loadAround(int index) { + // do nothing - immutable, so no fetching will be done + } + + @Override public final int size() { return getLoadedCount() + getLeadingNullCount() + getTrailingNullCount(); } + public boolean isImmutable() { + return true; + } + + @Override + public PagedList<Type> snapshot() { + if (isImmutable()) { + return this; + } + return new NullPaddedList<>(this); + } + + @Override + boolean isContiguous() { + return true; + } + + @Override + public void addWeakCallback(@Nullable PagedList<Type> previousSnapshot, + @NonNull Callback callback) { + // no op, immutable + } + + @Override + public void removeWeakCallback(Callback callback) { + // no op, immutable + } + // --------------- Contiguous API --------------- + @Override public int getPositionOffset() { return mPositionOffset; } @@ -137,4 +194,12 @@ public class NullPaddedList<Type> extends AbstractList<Type> { public int getTrailingNullCount() { return mTrailingNullCount; } + + int getNumberPrepended() { + return mNumberPrepended; + } + + int getNumberAppended() { + return mNumberAppended; + } } |