mirror of https://github.com/M66B/FairEmail.git
Proper go top, refactoring
This commit is contained in:
parent
c287483dea
commit
10c4deef60
|
@ -160,8 +160,9 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
private boolean authentication;
|
||||
private boolean debug;
|
||||
|
||||
private boolean gotop = false;
|
||||
private AsyncPagedListDiffer<TupleMessageEx> differ;
|
||||
private SelectionTracker<Long> selectionTracker = null;
|
||||
private AsyncPagedListDiffer<TupleMessageEx> differ = new AsyncPagedListDiffer<>(this, DIFF_CALLBACK);
|
||||
|
||||
enum ViewType {UNIFIED, FOLDER, THREAD, SEARCH}
|
||||
|
||||
|
@ -3143,7 +3144,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
}
|
||||
|
||||
AdapterMessage(Context context, LifecycleOwner owner,
|
||||
ViewType viewType, boolean compact, int zoom, String sort, boolean filter_duplicates, IProperties properties) {
|
||||
ViewType viewType, boolean compact, int zoom, String sort, boolean filter_duplicates, final IProperties properties) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
this.TF = Helper.getTimeInstance(context, SimpleDateFormat.SHORT);
|
||||
|
@ -3189,9 +3190,21 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
|
|||
this.autoimages = (this.contacts && prefs.getBoolean("autoimages", false));
|
||||
this.authentication = prefs.getBoolean("authentication", false);
|
||||
this.debug = prefs.getBoolean("debug", false);
|
||||
|
||||
this.differ = new AsyncPagedListDiffer<>(this, DIFF_CALLBACK);
|
||||
this.differ.addPagedListListener(new AsyncPagedListDiffer.PagedListListener<TupleMessageEx>() {
|
||||
@Override
|
||||
public void onCurrentListChanged(@Nullable PagedList<TupleMessageEx> previousList, @Nullable PagedList<TupleMessageEx> currentList) {
|
||||
if (gotop) {
|
||||
gotop = false;
|
||||
properties.scrollTo(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void submitList(PagedList<TupleMessageEx> list) {
|
||||
void submitList(PagedList<TupleMessageEx> list, boolean gotop) {
|
||||
this.gotop = gotop;
|
||||
differ.submitList(list);
|
||||
}
|
||||
|
||||
|
|
|
@ -1788,7 +1788,7 @@ public class FragmentMessages extends FragmentBase {
|
|||
break;
|
||||
}
|
||||
|
||||
loadMessages();
|
||||
loadMessages(false);
|
||||
|
||||
if (selectionTracker != null && selectionTracker.hasSelection())
|
||||
fabMore.show();
|
||||
|
@ -2079,7 +2079,7 @@ public class FragmentMessages extends FragmentBase {
|
|||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
prefs.edit().putString("sort", sort).apply();
|
||||
adapter.setSort(sort);
|
||||
loadMessages();
|
||||
loadMessages(true);
|
||||
}
|
||||
|
||||
private void onMenuFilterRead(boolean filter) {
|
||||
|
@ -2088,7 +2088,7 @@ public class FragmentMessages extends FragmentBase {
|
|||
getActivity().invalidateOptionsMenu();
|
||||
if (selectionTracker != null)
|
||||
selectionTracker.clearSelection();
|
||||
loadMessages();
|
||||
loadMessages(true);
|
||||
}
|
||||
|
||||
private void onMenuFilterSnoozed(boolean filter) {
|
||||
|
@ -2097,7 +2097,7 @@ public class FragmentMessages extends FragmentBase {
|
|||
getActivity().invalidateOptionsMenu();
|
||||
if (selectionTracker != null)
|
||||
selectionTracker.clearSelection();
|
||||
loadMessages();
|
||||
loadMessages(true);
|
||||
}
|
||||
|
||||
private void onMenuFilterDuplicates(boolean filter) {
|
||||
|
@ -2198,13 +2198,7 @@ public class FragmentMessages extends FragmentBase {
|
|||
if (lastUnseen == null || lastUnseen != unseen) {
|
||||
if ((!refreshing && manual) ||
|
||||
(autoscroll && lastUnseen != null && lastUnseen < unseen))
|
||||
// Delay to let list update
|
||||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
rvMessage.scrollToPosition(0);
|
||||
}
|
||||
}, 3000);
|
||||
loadMessages(true);
|
||||
manual = false;
|
||||
lastUnseen = unseen;
|
||||
}
|
||||
|
@ -2221,7 +2215,7 @@ public class FragmentMessages extends FragmentBase {
|
|||
swipeRefresh.setRefreshing(refreshing);
|
||||
}
|
||||
|
||||
private void loadMessages() {
|
||||
private void loadMessages(final boolean top) {
|
||||
if (viewType == AdapterMessage.ViewType.THREAD && autonext) {
|
||||
ViewModelMessages model = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);
|
||||
model.observePrevNext(getViewLifecycleOwner(), id, found, new ViewModelMessages.IPrevNext() {
|
||||
|
@ -2238,7 +2232,7 @@ public class FragmentMessages extends FragmentBase {
|
|||
closeNext = id;
|
||||
if (!once) {
|
||||
once = true;
|
||||
loadMessagesNext();
|
||||
loadMessagesNext(top);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2249,10 +2243,10 @@ public class FragmentMessages extends FragmentBase {
|
|||
}
|
||||
});
|
||||
} else
|
||||
loadMessagesNext();
|
||||
loadMessagesNext(top);
|
||||
}
|
||||
|
||||
private void loadMessagesNext() {
|
||||
private void loadMessagesNext(final boolean top) {
|
||||
ViewModelBrowse modelBrowse = ViewModelProviders.of(getActivity()).get(ViewModelBrowse.class);
|
||||
modelBrowse.set(getContext(), folder, search, REMOTE_PAGE_SIZE);
|
||||
|
||||
|
@ -2344,20 +2338,52 @@ public class FragmentMessages extends FragmentBase {
|
|||
builder.setFetchExecutor(executor);
|
||||
|
||||
modelMessages.setMessages(viewType, getViewLifecycleOwner(), builder.build());
|
||||
modelMessages.observe(viewType, getViewLifecycleOwner(), observer);
|
||||
}
|
||||
modelMessages.observe(viewType, getViewLifecycleOwner(), new Observer<PagedList<TupleMessageEx>>() {
|
||||
private boolean topped = false;
|
||||
|
||||
private Observer<PagedList<TupleMessageEx>> observer = new Observer<PagedList<TupleMessageEx>>() {
|
||||
@Override
|
||||
public void onChanged(@Nullable PagedList<TupleMessageEx> messages) {
|
||||
if (messages == null ||
|
||||
(viewType == AdapterMessage.ViewType.THREAD && messages.size() == 0 &&
|
||||
(autoclose || autonext))) {
|
||||
handleAutoClose();
|
||||
if (messages == null)
|
||||
return;
|
||||
|
||||
if (viewType == AdapterMessage.ViewType.THREAD)
|
||||
if (handleThreadActions(messages))
|
||||
return;
|
||||
|
||||
boolean gotop = (top && !topped);
|
||||
topped = true;
|
||||
Log.i("Submit messages=" + messages.size() + " top=" + gotop);
|
||||
adapter.submitList(messages, gotop);
|
||||
|
||||
// This is to workaround not drawing when the search is expanded
|
||||
new Handler().post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
rvMessage.requestLayout();
|
||||
}
|
||||
});
|
||||
|
||||
rvMessage.setTag(messages.size());
|
||||
|
||||
if (boundaryCallback == null || !boundaryCallback.isLoading())
|
||||
pbWait.setVisibility(View.GONE);
|
||||
if (boundaryCallback == null && messages.size() == 0)
|
||||
tvNoEmail.setVisibility(View.VISIBLE);
|
||||
if (messages.size() > 0) {
|
||||
tvNoEmail.setVisibility(View.GONE);
|
||||
grpReady.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private boolean handleThreadActions(@NonNull PagedList<TupleMessageEx> messages) {
|
||||
// Auto close / next
|
||||
if (messages.size() == 0 && (autoclose || autonext)) {
|
||||
handleAutoClose();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (viewType == AdapterMessage.ViewType.THREAD) {
|
||||
// Mark duplicates
|
||||
Map<String, List<TupleMessageEx>> duplicates = new HashMap<>();
|
||||
for (TupleMessageEx message : messages)
|
||||
|
@ -2459,7 +2485,7 @@ public class FragmentMessages extends FragmentBase {
|
|||
|
||||
if (count == 0) {
|
||||
handleAutoClose();
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2521,32 +2547,9 @@ public class FragmentMessages extends FragmentBase {
|
|||
}
|
||||
}.execute(FragmentMessages.this, args, "messages:navigation");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Log.i("Submit messages=" + messages.size());
|
||||
adapter.submitList(messages);
|
||||
|
||||
// This is to workaround not drawing when the search is expanded
|
||||
new Handler().post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
rvMessage.requestLayout();
|
||||
}
|
||||
});
|
||||
|
||||
rvMessage.setTag(messages.size());
|
||||
|
||||
if (boundaryCallback == null || !boundaryCallback.isLoading())
|
||||
pbWait.setVisibility(View.GONE);
|
||||
if (boundaryCallback == null && messages.size() == 0)
|
||||
tvNoEmail.setVisibility(View.VISIBLE);
|
||||
if (messages.size() > 0) {
|
||||
tvNoEmail.setVisibility(View.GONE);
|
||||
grpReady.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private void handleExpand(long id) {
|
||||
Bundle args = new Bundle();
|
||||
args.putLong("id", id);
|
||||
|
|
Loading…
Reference in New Issue