Low priority paging

pull/147/head
M66B 6 years ago
parent 5930e5e561
commit c16fa09dab

@ -50,6 +50,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -125,6 +127,8 @@ public class FragmentMessages extends FragmentEx {
private BoundaryCallbackMessages searchCallback = null;
private ExecutorService executor = Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory);
private static final int LOCAL_PAGE_SIZE = 100;
private static final int REMOTE_PAGE_SIZE = 10;
private static final int UNDO_TIMEOUT = 5000; // milliseconds
@ -1622,7 +1626,6 @@ public class FragmentMessages extends FragmentEx {
model.set(getContext(), folder, search, REMOTE_PAGE_SIZE);
// Observe folder/messages/search
if (TextUtils.isEmpty(search)) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
String sort = prefs.getString("sort", "time");
boolean debug = prefs.getBoolean("debug", false);
@ -1631,10 +1634,11 @@ public class FragmentMessages extends FragmentEx {
if (messages != null)
messages.removeObservers(getViewLifecycleOwner());
LivePagedListBuilder<Integer, TupleMessageEx> builder = null;
switch (viewType) {
case UNIFIED:
messages = new LivePagedListBuilder<>(
db.message().pagedUnifiedInbox(threading, sort, debug), LOCAL_PAGE_SIZE).build();
builder = new LivePagedListBuilder<>(
db.message().pagedUnifiedInbox(threading, sort, debug), LOCAL_PAGE_SIZE);
break;
case FOLDER:
@ -1662,23 +1666,21 @@ public class FragmentMessages extends FragmentEx {
}
});
PagedList.Config config = new PagedList.Config.Builder()
PagedList.Config configFolder = new PagedList.Config.Builder()
.setPageSize(LOCAL_PAGE_SIZE)
.setPrefetchDistance(REMOTE_PAGE_SIZE)
.build();
LivePagedListBuilder<Integer, TupleMessageEx> builder = new LivePagedListBuilder<>(
db.message().pagedFolder(folder, threading, sort, false, debug), config);
builder = new LivePagedListBuilder<>(
db.message().pagedFolder(folder, threading, sort, false, debug), configFolder);
builder.setBoundaryCallback(searchCallback);
messages = builder.build();
break;
case THREAD:
messages = new LivePagedListBuilder<>(
db.message().pagedThread(account, thread, threading ? null : id, debug), LOCAL_PAGE_SIZE).build();
builder = new LivePagedListBuilder<>(
db.message().pagedThread(account, thread, threading ? null : id, debug), LOCAL_PAGE_SIZE);
break;
}
} else {
case SEARCH:
if (searchCallback == null)
searchCallback = new BoundaryCallbackMessages(this, model,
new BoundaryCallbackMessages.IBoundaryCallbackMessages() {
@ -1706,16 +1708,19 @@ public class FragmentMessages extends FragmentEx {
}
});
PagedList.Config config = new PagedList.Config.Builder()
PagedList.Config configSearch = new PagedList.Config.Builder()
.setPageSize(LOCAL_PAGE_SIZE)
.setPrefetchDistance(REMOTE_PAGE_SIZE)
.build();
LivePagedListBuilder<Integer, TupleMessageEx> builder = new LivePagedListBuilder<>(
db.message().pagedFolder(folder, threading, "time", true, false), config);
builder = new LivePagedListBuilder<>(
db.message().pagedFolder(folder, threading, "time", true, false), configSearch);
builder.setBoundaryCallback(searchCallback);
messages = builder.build();
break;
}
builder.setFetchExecutor(executor);
messages = builder.build();
messages.observe(getViewLifecycleOwner(), new Observer<PagedList<TupleMessageEx>>() {
@Override
public void onChanged(@Nullable PagedList<TupleMessageEx> messages) {

Loading…
Cancel
Save