mirror of https://github.com/M66B/FairEmail.git
Low priority paging
This commit is contained in:
parent
5930e5e561
commit
c16fa09dab
|
@ -50,6 +50,8 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
@ -125,6 +127,8 @@ public class FragmentMessages extends FragmentEx {
|
||||||
|
|
||||||
private BoundaryCallbackMessages searchCallback = null;
|
private BoundaryCallbackMessages searchCallback = null;
|
||||||
|
|
||||||
|
private ExecutorService executor = Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory);
|
||||||
|
|
||||||
private static final int LOCAL_PAGE_SIZE = 100;
|
private static final int LOCAL_PAGE_SIZE = 100;
|
||||||
private static final int REMOTE_PAGE_SIZE = 10;
|
private static final int REMOTE_PAGE_SIZE = 10;
|
||||||
private static final int UNDO_TIMEOUT = 5000; // milliseconds
|
private static final int UNDO_TIMEOUT = 5000; // milliseconds
|
||||||
|
@ -1622,100 +1626,101 @@ public class FragmentMessages extends FragmentEx {
|
||||||
model.set(getContext(), folder, search, REMOTE_PAGE_SIZE);
|
model.set(getContext(), folder, search, REMOTE_PAGE_SIZE);
|
||||||
|
|
||||||
// Observe folder/messages/search
|
// Observe folder/messages/search
|
||||||
if (TextUtils.isEmpty(search)) {
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
String sort = prefs.getString("sort", "time");
|
||||||
String sort = prefs.getString("sort", "time");
|
boolean debug = prefs.getBoolean("debug", false);
|
||||||
boolean debug = prefs.getBoolean("debug", false);
|
|
||||||
|
|
||||||
// Sort changed
|
// Sort changed
|
||||||
if (messages != null)
|
if (messages != null)
|
||||||
messages.removeObservers(getViewLifecycleOwner());
|
messages.removeObservers(getViewLifecycleOwner());
|
||||||
|
|
||||||
switch (viewType) {
|
LivePagedListBuilder<Integer, TupleMessageEx> builder = null;
|
||||||
case UNIFIED:
|
switch (viewType) {
|
||||||
messages = new LivePagedListBuilder<>(
|
case UNIFIED:
|
||||||
db.message().pagedUnifiedInbox(threading, sort, debug), LOCAL_PAGE_SIZE).build();
|
builder = new LivePagedListBuilder<>(
|
||||||
break;
|
db.message().pagedUnifiedInbox(threading, sort, debug), LOCAL_PAGE_SIZE);
|
||||||
|
break;
|
||||||
|
|
||||||
case FOLDER:
|
case FOLDER:
|
||||||
if (searchCallback == null)
|
if (searchCallback == null)
|
||||||
searchCallback = new BoundaryCallbackMessages(this, model,
|
searchCallback = new BoundaryCallbackMessages(this, model,
|
||||||
new BoundaryCallbackMessages.IBoundaryCallbackMessages() {
|
new BoundaryCallbackMessages.IBoundaryCallbackMessages() {
|
||||||
@Override
|
@Override
|
||||||
public void onLoading() {
|
public void onLoading() {
|
||||||
pbWait.setVisibility(View.VISIBLE);
|
pbWait.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaded() {
|
public void onLoaded() {
|
||||||
pbWait.setVisibility(View.GONE);
|
pbWait.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable ex) {
|
public void onError(Throwable ex) {
|
||||||
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
|
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
|
||||||
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
|
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
|
||||||
.setMessage(Helper.formatThrowable(ex))
|
.setMessage(Helper.formatThrowable(ex))
|
||||||
.setPositiveButton(android.R.string.cancel, null)
|
.setPositiveButton(android.R.string.cancel, null)
|
||||||
.create()
|
.create()
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
PagedList.Config config = new PagedList.Config.Builder()
|
PagedList.Config configFolder = new PagedList.Config.Builder()
|
||||||
.setPageSize(LOCAL_PAGE_SIZE)
|
.setPageSize(LOCAL_PAGE_SIZE)
|
||||||
.setPrefetchDistance(REMOTE_PAGE_SIZE)
|
.setPrefetchDistance(REMOTE_PAGE_SIZE)
|
||||||
.build();
|
.build();
|
||||||
LivePagedListBuilder<Integer, TupleMessageEx> builder = new LivePagedListBuilder<>(
|
builder = new LivePagedListBuilder<>(
|
||||||
db.message().pagedFolder(folder, threading, sort, false, debug), config);
|
db.message().pagedFolder(folder, threading, sort, false, debug), configFolder);
|
||||||
builder.setBoundaryCallback(searchCallback);
|
builder.setBoundaryCallback(searchCallback);
|
||||||
messages = builder.build();
|
break;
|
||||||
|
|
||||||
break;
|
case THREAD:
|
||||||
|
builder = new LivePagedListBuilder<>(
|
||||||
|
db.message().pagedThread(account, thread, threading ? null : id, debug), LOCAL_PAGE_SIZE);
|
||||||
|
break;
|
||||||
|
|
||||||
case THREAD:
|
case SEARCH:
|
||||||
messages = new LivePagedListBuilder<>(
|
if (searchCallback == null)
|
||||||
db.message().pagedThread(account, thread, threading ? null : id, debug), LOCAL_PAGE_SIZE).build();
|
searchCallback = new BoundaryCallbackMessages(this, model,
|
||||||
break;
|
new BoundaryCallbackMessages.IBoundaryCallbackMessages() {
|
||||||
}
|
@Override
|
||||||
} else {
|
public void onLoading() {
|
||||||
if (searchCallback == null)
|
tvNoEmail.setVisibility(View.GONE);
|
||||||
searchCallback = new BoundaryCallbackMessages(this, model,
|
pbWait.setVisibility(View.VISIBLE);
|
||||||
new BoundaryCallbackMessages.IBoundaryCallbackMessages() {
|
}
|
||||||
@Override
|
|
||||||
public void onLoading() {
|
|
||||||
tvNoEmail.setVisibility(View.GONE);
|
|
||||||
pbWait.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaded() {
|
public void onLoaded() {
|
||||||
pbWait.setVisibility(View.GONE);
|
pbWait.setVisibility(View.GONE);
|
||||||
if (messages.getValue() == null || messages.getValue().size() == 0)
|
if (messages.getValue() == null || messages.getValue().size() == 0)
|
||||||
tvNoEmail.setVisibility(View.VISIBLE);
|
tvNoEmail.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable ex) {
|
public void onError(Throwable ex) {
|
||||||
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
|
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED))
|
||||||
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
|
new DialogBuilderLifecycle(getContext(), getViewLifecycleOwner())
|
||||||
.setMessage(Helper.formatThrowable(ex))
|
.setMessage(Helper.formatThrowable(ex))
|
||||||
.setPositiveButton(android.R.string.cancel, null)
|
.setPositiveButton(android.R.string.cancel, null)
|
||||||
.create()
|
.create()
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
PagedList.Config config = new PagedList.Config.Builder()
|
PagedList.Config configSearch = new PagedList.Config.Builder()
|
||||||
.setPageSize(LOCAL_PAGE_SIZE)
|
.setPageSize(LOCAL_PAGE_SIZE)
|
||||||
.setPrefetchDistance(REMOTE_PAGE_SIZE)
|
.setPrefetchDistance(REMOTE_PAGE_SIZE)
|
||||||
.build();
|
.build();
|
||||||
LivePagedListBuilder<Integer, TupleMessageEx> builder = new LivePagedListBuilder<>(
|
builder = new LivePagedListBuilder<>(
|
||||||
db.message().pagedFolder(folder, threading, "time", true, false), config);
|
db.message().pagedFolder(folder, threading, "time", true, false), configSearch);
|
||||||
builder.setBoundaryCallback(searchCallback);
|
builder.setBoundaryCallback(searchCallback);
|
||||||
messages = builder.build();
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
builder.setFetchExecutor(executor);
|
||||||
|
|
||||||
|
messages = builder.build();
|
||||||
messages.observe(getViewLifecycleOwner(), new Observer<PagedList<TupleMessageEx>>() {
|
messages.observe(getViewLifecycleOwner(), new Observer<PagedList<TupleMessageEx>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onChanged(@Nullable PagedList<TupleMessageEx> messages) {
|
public void onChanged(@Nullable PagedList<TupleMessageEx> messages) {
|
||||||
|
|
Loading…
Reference in New Issue