That fuck shit the fascists are using
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}