summaryrefslogtreecommitdiff
path: root/android/arch/paging/NullPaddedList.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/arch/paging/NullPaddedList.java')
-rw-r--r--android/arch/paging/NullPaddedList.java75
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;
+ }
}