That fuck shit the fascists are using
at master 70 lines 1.7 kB view raw
1package org.signal.pagingtest; 2 3import androidx.annotation.NonNull; 4import androidx.annotation.Nullable; 5 6import org.signal.paging.PagedDataSource; 7 8import java.util.ArrayList; 9import java.util.List; 10import java.util.ListIterator; 11import java.util.UUID; 12 13class MainDataSource implements PagedDataSource<String, Item> { 14 15 private final List<Item> items = new ArrayList<>(); 16 17 MainDataSource(int size) { 18 buildItems(size); 19 } 20 21 @Override 22 public int size() { 23 return items.size(); 24 } 25 26 @Override 27 public @NonNull List<Item> load(int start, int length, int totalSize, @NonNull CancellationSignal cancellationSignal) { 28 try { 29 Thread.sleep(500); 30 } catch (InterruptedException e) { 31 e.printStackTrace(); 32 } 33 34 return items.subList(start, start + length); 35 } 36 37 @Override 38 public @Nullable Item load(String key) { 39 return items.stream().filter(item -> item.key.equals(key)).findFirst().orElse(null); 40 } 41 42 @Override 43 public @NonNull String getKey(@NonNull Item item) { 44 return item.key; 45 } 46 47 public void updateItem(@NonNull String key) { 48 ListIterator<Item> iter = items.listIterator(); 49 while (iter.hasNext()) { 50 if (iter.next().key.equals(key)) { 51 iter.set(new Item(key, System.currentTimeMillis())); 52 break; 53 } 54 } 55 } 56 57 public @NonNull String prepend() { 58 Item item = new Item(UUID.randomUUID().toString(), System.currentTimeMillis()); 59 items.add(0, item); 60 return item.key; 61 } 62 63 private void buildItems(int size) { 64 items.clear(); 65 66 for (int i = 0; i < size; i++) { 67 items.add(new Item(UUID.randomUUID().toString(), System.currentTimeMillis())); 68 } 69 } 70}