mirror of
https://github.com/M66B/FairEmail.git
synced 2025-02-22 14:11:00 +00:00
Use list position for fallback load
This commit is contained in:
parent
228232f809
commit
03f4972cdd
4 changed files with 52 additions and 28 deletions
|
@ -1498,6 +1498,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
|
|||
args.putLong("folder", intent.getLongExtra("folder", -1));
|
||||
args.putString("thread", intent.getStringExtra("thread"));
|
||||
args.putLong("id", intent.getLongExtra("id", -1));
|
||||
args.putInt("lpos", intent.getIntExtra("lpos", -1));
|
||||
args.putBoolean("filter_archive", intent.getBooleanExtra("filter_archive", true));
|
||||
args.putBoolean("found", found);
|
||||
args.putBoolean("pinned", intent.getBooleanExtra("pinned", false));
|
||||
|
|
|
@ -3307,6 +3307,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
.putExtra("folder", message.folder)
|
||||
.putExtra("thread", message.thread)
|
||||
.putExtra("id", message.id)
|
||||
.putExtra("lpos", getAdapterPosition())
|
||||
.putExtra("filter_archive", !EntityFolder.ARCHIVE.equals(message.folderType))
|
||||
.putExtra("found", viewType == ViewType.SEARCH);
|
||||
|
||||
|
|
|
@ -285,6 +285,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
|||
private boolean server;
|
||||
private String thread;
|
||||
private long id;
|
||||
private int lpos;
|
||||
private boolean filter_archive;
|
||||
private boolean found;
|
||||
private boolean pinned;
|
||||
|
@ -404,6 +405,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
|||
server = args.getBoolean("server", false);
|
||||
thread = args.getString("thread");
|
||||
id = args.getLong("id", -1);
|
||||
lpos = args.getInt("lpos", RecyclerView.NO_POSITION);
|
||||
filter_archive = args.getBoolean("filter_archive", true);
|
||||
found = args.getBoolean("found", false);
|
||||
pinned = args.getBoolean("pinned", false);
|
||||
|
@ -1247,7 +1249,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
|||
|
||||
if (viewType == AdapterMessage.ViewType.THREAD) {
|
||||
ViewModelMessages model = new ViewModelProvider(getActivity()).get(ViewModelMessages.class);
|
||||
model.observePrevNext(getContext(), getViewLifecycleOwner(), id, new ViewModelMessages.IPrevNext() {
|
||||
model.observePrevNext(getContext(), getViewLifecycleOwner(), id, lpos, new ViewModelMessages.IPrevNext() {
|
||||
@Override
|
||||
public void onPrevious(boolean exists, Long id) {
|
||||
boolean reversed = prefs.getBoolean("reversed", false);
|
||||
|
@ -4933,7 +4935,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
|
|||
private void loadMessages(final boolean top) {
|
||||
if (viewType == AdapterMessage.ViewType.THREAD && onclose != null) {
|
||||
ViewModelMessages model = new ViewModelProvider(getActivity()).get(ViewModelMessages.class);
|
||||
model.observePrevNext(getContext(), getViewLifecycleOwner(), id, new ViewModelMessages.IPrevNext() {
|
||||
model.observePrevNext(getContext(), getViewLifecycleOwner(), id, lpos, new ViewModelMessages.IPrevNext() {
|
||||
boolean once = false;
|
||||
|
||||
@Override
|
||||
|
|
|
@ -250,8 +250,8 @@ public class ViewModelMessages extends ViewModel {
|
|||
models.remove(viewType);
|
||||
}
|
||||
|
||||
void observePrevNext(Context context, LifecycleOwner owner, final long id, final IPrevNext intf) {
|
||||
Log.i("Observe prev/next model=" + last);
|
||||
void observePrevNext(Context context, LifecycleOwner owner, final long id, int lpos, final IPrevNext intf) {
|
||||
Log.i("Observe prev/next model=" + last + " id=" + id + " lpos=" + lpos);
|
||||
|
||||
final Model model = models.get(last);
|
||||
if (model == null) {
|
||||
|
@ -263,6 +263,7 @@ public class ViewModelMessages extends ViewModel {
|
|||
}
|
||||
|
||||
Log.i("Observe previous/next id=" + id);
|
||||
//model.list.getValue().loadAround(lpos);
|
||||
model.list.observe(owner, new Observer<PagedList<TupleMessageEx>>() {
|
||||
private boolean fallback = false;
|
||||
|
||||
|
@ -305,11 +306,13 @@ public class ViewModelMessages extends ViewModel {
|
|||
|
||||
Bundle args = new Bundle();
|
||||
args.putLong("id", id);
|
||||
args.putInt("lpos", lpos);
|
||||
|
||||
new SimpleTask<Pair<Long, Long>>() {
|
||||
@Override
|
||||
protected Pair<Long, Long> onExecute(Context context, Bundle args) {
|
||||
long id = args.getLong("id");
|
||||
int lpos = args.getInt("lpos");
|
||||
|
||||
PagedList<TupleMessageEx> plist = model.list.getValue();
|
||||
if (plist == null)
|
||||
|
@ -317,13 +320,34 @@ public class ViewModelMessages extends ViewModel {
|
|||
|
||||
LimitOffsetDataSource<TupleMessageEx> ds = (LimitOffsetDataSource<TupleMessageEx>) plist.getDataSource();
|
||||
int count = ds.countItems();
|
||||
|
||||
if (lpos >= 0) {
|
||||
int from = Math.max(0, lpos - 10);
|
||||
int load = Math.min(20, count - from);
|
||||
Log.i("Observe previous/next load lpos=" + lpos +
|
||||
" range=" + from + "/#" + load);
|
||||
List<TupleMessageEx> messages = ds.loadRange(from, load);
|
||||
for (int j = 0; j < messages.size(); j++)
|
||||
if (messages.get(j).id == id)
|
||||
return getPair(plist, ds, count, from + j);
|
||||
}
|
||||
|
||||
for (int i = 0; i < count; i += 100) {
|
||||
Log.i("Observe previous/next load range=" + i + "/" + count);
|
||||
Log.i("Observe previous/next load" +
|
||||
" range=" + i + "/#" + count);
|
||||
List<TupleMessageEx> messages = ds.loadRange(i, Math.min(100, count - i));
|
||||
for (int j = 0; j < messages.size(); j++)
|
||||
if (messages.get(j).id == id) {
|
||||
int pos = i + j;
|
||||
if (messages.get(j).id == id)
|
||||
return getPair(plist, ds, count, i + j);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private Pair<Long, Long> getPair(
|
||||
PagedList<TupleMessageEx> plist,
|
||||
LimitOffsetDataSource<TupleMessageEx> ds,
|
||||
int count, int pos) {
|
||||
if (pos < plist.size())
|
||||
plist.loadAround(pos);
|
||||
|
||||
|
@ -344,10 +368,6 @@ public class ViewModelMessages extends ViewModel {
|
|||
Log.i("Observe previous/next fallback=" + result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExecuted(Bundle args, Pair<Long, Long> data) {
|
||||
|
|
Loading…
Reference in a new issue