Added ascending sort

This commit is contained in:
M66B 2019-09-03 10:33:52 +02:00
parent 25387866b1
commit 4c8576d3df
6 changed files with 40 additions and 11 deletions

View File

@ -160,6 +160,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private boolean compact;
private int zoom;
private String sort;
private boolean ascending;
private boolean filter_duplicates;
private IProperties properties;
@ -3049,7 +3050,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
AdapterMessage(Fragment parentFragment,
String type, ViewType viewType,
boolean compact, int zoom, String sort, boolean filter_duplicates,
boolean compact, int zoom, String sort, boolean ascending, boolean filter_duplicates,
final IProperties properties) {
this.parentFragment = parentFragment;
this.type = type;
@ -3057,6 +3058,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.compact = compact;
this.zoom = zoom;
this.sort = sort;
this.ascending = ascending;
this.filter_duplicates = filter_duplicates;
this.properties = properties;
@ -3168,6 +3170,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
return this.sort;
}
void setAscending(boolean ascending) {
this.ascending = ascending;
}
void setFilterDuplicates(boolean filter_duplicates) {
if (this.filter_duplicates != filter_duplicates) {
this.filter_duplicates = filter_duplicates;

View File

@ -76,12 +76,12 @@ 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<Integer, TupleMessageEx> 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<Integer, TupleMessageEx> pagedFolder(
long folder, boolean threading,
String sort,
String sort, boolean ascending,
boolean filter_seen, boolean filter_unflagged, boolean filter_snoozed,
boolean found,
boolean debug);

View File

@ -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();

View File

@ -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;
}

View File

@ -44,6 +44,10 @@
android:id="@+id/menu_sort_on_snoozed"
android:title="@string/title_sort_on_snoozed" />
</group>
<item
android:id="@+id/menu_ascending"
android:checkable="true"
android:title="@string/title_sort_ascending" />
</menu>
</item>

View File

@ -599,6 +599,7 @@
<string name="title_sort_on_subject">Subject</string>
<string name="title_sort_on_size">Size</string>
<string name="title_sort_on_snoozed">Snoozed</string>
<string name="title_sort_ascending">Oldest first</string>
<string name="title_filter">Filter out</string>
<string name="title_filter_seen">Read</string>