From 4c8576d3df4d1e95989491a19373e7e9f3afc4c4 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 3 Sep 2019 10:33:52 +0200 Subject: [PATCH] Added ascending sort --- .../java/eu/faircode/email/AdapterMessage.java | 8 +++++++- .../main/java/eu/faircode/email/DaoMessage.java | 8 ++++---- .../eu/faircode/email/FragmentMessages.java | 17 ++++++++++++++++- .../eu/faircode/email/ViewModelMessages.java | 13 ++++++++----- app/src/main/res/menu/menu_messages.xml | 4 ++++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 40 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index cfae47227f..bc16d742e9 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -160,6 +160,7 @@ public class AdapterMessage extends RecyclerView.Adapter pagedUnified( String type, boolean threading, - String sort, + String sort, boolean ascending, boolean filter_seen, boolean filter_unflagged, boolean filter_snoozed, boolean found, boolean debug); @@ -121,11 +121,11 @@ public interface DaoMessage { " WHEN 'size' = :sort THEN -SUM(message.size)" + " WHEN 'snoozed' = :sort THEN SUM(CASE WHEN message.ui_snoozed IS NULL THEN 0 ELSE 1 END) = 0" + " ELSE 0" + - " END, message.received DESC") + " END, CASE WHEN :ascending THEN message.received ELSE -message.received END") @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH) DataSource.Factory pagedFolder( long folder, boolean threading, - String sort, + String sort, boolean ascending, boolean filter_seen, boolean filter_unflagged, boolean filter_snoozed, boolean found, boolean debug); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 166eacf4c6..04ccd1c819 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -584,9 +584,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. boolean compact = prefs.getBoolean("compact", false); int zoom = prefs.getInt("zoom", compact ? 0 : 1); String sort = prefs.getString("sort", "time"); + boolean ascending = prefs.getBoolean("ascending", false); boolean filter_duplicates = prefs.getBoolean("filter_duplicates", false); - adapter = new AdapterMessage(this, type, viewType, compact, zoom, sort, filter_duplicates, iProperties); + adapter = new AdapterMessage(this, type, viewType, compact, zoom, sort, ascending, filter_duplicates, iProperties); rvMessage.setAdapter(adapter); seekBar.setOnTouchListener(new View.OnTouchListener() { @@ -2448,6 +2449,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. public void onPrepareOptionsMenu(Menu menu) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); String sort = prefs.getString("sort", "time"); + boolean ascending = prefs.getBoolean("ascending", false); boolean filter_seen = prefs.getBoolean("filter_seen", false); boolean filter_unflagged = prefs.getBoolean("filter_unflagged", false); boolean filter_snoozed = prefs.getBoolean("filter_snoozed", true); @@ -2480,6 +2482,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. menu.findItem(R.id.menu_sort_on_size).setChecked(true); else if ("snoozed".equals(sort)) menu.findItem(R.id.menu_sort_on_snoozed).setChecked(true); + menu.findItem(R.id.menu_ascending).setChecked(ascending); menu.findItem(R.id.menu_filter).setVisible(viewType != AdapterMessage.ViewType.SEARCH && !outbox); menu.findItem(R.id.menu_filter_seen).setVisible(viewType != AdapterMessage.ViewType.THREAD); @@ -2550,6 +2553,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. onMenuSort("snoozed"); return true; + case R.id.menu_ascending: + onMenuAscending(!item.isChecked()); + return true; + case R.id.menu_filter_seen: onMenuFilterRead(!item.isChecked()); return true; @@ -2613,6 +2620,14 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. loadMessages(true); } + private void onMenuAscending(boolean ascending) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + prefs.edit().putBoolean("ascending", ascending).apply(); + adapter.setAscending(ascending); + getActivity().invalidateOptionsMenu(); + loadMessages(true); + } + private void onMenuFilterRead(boolean filter) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); prefs.edit().putBoolean("filter_seen", filter).apply(); diff --git a/app/src/main/java/eu/faircode/email/ViewModelMessages.java b/app/src/main/java/eu/faircode/email/ViewModelMessages.java index 3ad4f25f1c..eafad3b318 100644 --- a/app/src/main/java/eu/faircode/email/ViewModelMessages.java +++ b/app/src/main/java/eu/faircode/email/ViewModelMessages.java @@ -89,7 +89,7 @@ public class ViewModelMessages extends ViewModel { db.message().pagedUnified( args.type, args.threading, - args.sort, + args.sort, args.ascending, args.filter_seen, args.filter_unflagged, args.filter_snoozed, false, args.debug), @@ -105,7 +105,7 @@ public class ViewModelMessages extends ViewModel { builder = new LivePagedListBuilder<>( db.message().pagedFolder( args.folder, args.threading, - args.sort, + args.sort, args.ascending, args.filter_seen, args.filter_unflagged, args.filter_snoozed, false, args.debug), @@ -131,7 +131,7 @@ public class ViewModelMessages extends ViewModel { db.message().pagedUnified( null, args.threading, - "time", + "time", false, false, false, false, true, args.debug), @@ -140,7 +140,7 @@ public class ViewModelMessages extends ViewModel { builder = new LivePagedListBuilder<>( db.message().pagedFolder( args.folder, args.threading, - "time", + "time", false, false, false, false, true, args.debug), @@ -301,6 +301,7 @@ public class ViewModelMessages extends ViewModel { private boolean threading; private String sort; + private boolean ascending; private boolean filter_seen; private boolean filter_unflagged; private boolean filter_snoozed; @@ -322,6 +323,7 @@ public class ViewModelMessages extends ViewModel { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); this.threading = prefs.getBoolean("threading", true); this.sort = prefs.getString("sort", "time"); + this.ascending = prefs.getBoolean("ascending", false); this.filter_seen = prefs.getBoolean("filter_seen", false); this.filter_unflagged = prefs.getBoolean("filter_unflagged", false); this.filter_snoozed = prefs.getBoolean("filter_snoozed", true); @@ -342,6 +344,7 @@ public class ViewModelMessages extends ViewModel { this.threading == other.threading && Objects.equals(this.sort, other.sort) && + this.ascending == other.ascending && this.filter_seen == other.filter_seen && this.filter_unflagged == other.filter_unflagged && this.filter_snoozed == other.filter_snoozed && @@ -357,7 +360,7 @@ public class ViewModelMessages extends ViewModel { " thread=" + thread + ":" + id + " query=" + query + ":" + server + "" + " threading=" + threading + - " sort=" + sort + + " sort=" + sort + ":" + ascending + " filter seen=" + filter_seen + " unflagged=" + filter_unflagged + " snoozed=" + filter_snoozed + " debug=" + debug; } diff --git a/app/src/main/res/menu/menu_messages.xml b/app/src/main/res/menu/menu_messages.xml index 0f53d41052..8771ea380c 100644 --- a/app/src/main/res/menu/menu_messages.xml +++ b/app/src/main/res/menu/menu_messages.xml @@ -44,6 +44,10 @@ android:id="@+id/menu_sort_on_snoozed" android:title="@string/title_sort_on_snoozed" /> + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9f4d1392a8..b52a7fb91b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -599,6 +599,7 @@ Subject Size Snoozed + Oldest first Filter out Read