Added sorting on starred+unread

This commit is contained in:
M66B 2024-03-06 08:21:43 +01:00
parent efb9c49036
commit 0087f4ff03
5 changed files with 50 additions and 26 deletions

View File

@ -104,21 +104,25 @@ public interface DaoMessage {
" ORDER BY CASE WHEN :found THEN 0 ELSE -IFNULL(message.importance, 1) END" +
", CASE WHEN :group_category THEN account.category ELSE '' END COLLATE NOCASE" +
", CASE" +
" WHEN 'unread' = :sort THEN SUM(1 - message.ui_seen) = 0" +
" WHEN 'starred' = :sort THEN COUNT(message.id) - SUM(1 - message.ui_flagged) = 0" +
" WHEN 'priority' = :sort THEN -IFNULL(message.priority, 1)" +
" WHEN 'sender' = :sort THEN LOWER(message.sender)" +
" WHEN 'subject' = :sort THEN LOWER(message.subject)" +
" WHEN 'size' = :sort THEN -SUM(message.total)" +
" WHEN 'attachments' = :sort THEN -SUM(message.attachments)" +
" WHEN 'snoozed' = :sort THEN SUM(CASE WHEN message.ui_snoozed IS NULL THEN 0 ELSE 1 END) = 0" +
" WHEN 'unread' = :sort1 THEN SUM(1 - message.ui_seen) = 0" +
" WHEN 'starred' = :sort1 THEN COUNT(message.id) - SUM(1 - message.ui_flagged) = 0" +
" WHEN 'priority' = :sort1 THEN -IFNULL(message.priority, 1)" +
" WHEN 'sender' = :sort1 THEN LOWER(message.sender)" +
" WHEN 'subject' = :sort1 THEN LOWER(message.subject)" +
" WHEN 'size' = :sort1 THEN -SUM(message.total)" +
" WHEN 'attachments' = :sort1 THEN -SUM(message.attachments)" +
" WHEN 'snoozed' = :sort1 THEN SUM(CASE WHEN message.ui_snoozed IS NULL THEN 0 ELSE 1 END) = 0" +
" ELSE 0" +
" END" +
", CASE" +
" WHEN 'unread' = :sort2 THEN SUM(1 - message.ui_seen) = 0" +
" ELSE 0" +
" END" +
", CASE WHEN :ascending THEN message.received ELSE -message.received END")
DataSource.Factory<Integer, TupleMessageEx> pagedUnified(
String type,
boolean threading, boolean group_category,
String sort, boolean ascending,
String sort1, String sort2, boolean ascending,
boolean filter_seen, boolean filter_unflagged, boolean filter_unknown, boolean filter_snoozed, boolean filter_deleted, String filter_language,
boolean found,
boolean debug);
@ -178,20 +182,24 @@ public interface DaoMessage {
" AND (:filter_language IS NULL OR SUM(message.language = :filter_language) > 0 OR " + is_outbox + ")" +
" ORDER BY CASE WHEN :found THEN 0 ELSE -IFNULL(message.importance, 1) END" +
", CASE" +
" WHEN 'unread' = :sort THEN SUM(1 - message.ui_seen) = 0" +
" WHEN 'starred' = :sort THEN COUNT(message.id) - SUM(1 - message.ui_flagged) = 0" +
" WHEN 'priority' = :sort THEN -IFNULL(message.priority, 1)" +
" WHEN 'sender' = :sort THEN LOWER(message.sender)" +
" WHEN 'subject' = :sort THEN LOWER(message.subject)" +
" WHEN 'size' = :sort THEN -SUM(message.total)" +
" WHEN 'attachments' = :sort THEN -SUM(message.attachments)" +
" WHEN 'snoozed' = :sort THEN SUM(CASE WHEN message.ui_snoozed IS NULL THEN 0 ELSE 1 END) = 0" +
" WHEN 'unread' = :sort1 THEN SUM(1 - message.ui_seen) = 0" +
" WHEN 'starred' = :sort1 THEN COUNT(message.id) - SUM(1 - message.ui_flagged) = 0" +
" WHEN 'priority' = :sort1 THEN -IFNULL(message.priority, 1)" +
" WHEN 'sender' = :sort1 THEN LOWER(message.sender)" +
" WHEN 'subject' = :sort1 THEN LOWER(message.subject)" +
" WHEN 'size' = :sort1 THEN -SUM(message.total)" +
" WHEN 'attachments' = :sort1 THEN -SUM(message.attachments)" +
" WHEN 'snoozed' = :sort1 THEN SUM(CASE WHEN message.ui_snoozed IS NULL THEN 0 ELSE 1 END) = 0" +
" ELSE 0" +
" END" +
", CASE" +
" WHEN 'unread' = :sort2 THEN SUM(1 - message.ui_seen) = 0" +
" ELSE 0" +
" END" +
", CASE WHEN :ascending THEN message.received ELSE -message.received END")
DataSource.Factory<Integer, TupleMessageEx> pagedFolder(
long folder, boolean threading,
String sort, boolean ascending,
String sort1, String sort2, boolean ascending,
boolean filter_seen, boolean filter_unflagged, boolean filter_unknown, boolean filter_snoozed, boolean filter_deleted, String filter_language,
boolean found,
boolean debug);

View File

@ -5943,6 +5943,7 @@ public class FragmentMessages extends FragmentBase
menu.findItem(R.id.menu_sort_on_unread).setVisible(false);
menu.findItem(R.id.menu_sort_on_priority).setVisible(false);
menu.findItem(R.id.menu_sort_on_starred).setVisible(false);
menu.findItem(R.id.menu_sort_on_starred_unread).setVisible(false);
menu.findItem(R.id.menu_sort_on_sender).setVisible(false);
menu.findItem(R.id.menu_sort_on_subject).setVisible(false);
menu.findItem(R.id.menu_sort_on_size).setVisible(false);
@ -5960,6 +5961,8 @@ public class FragmentMessages extends FragmentBase
menu.findItem(R.id.menu_sort_on_unread).setChecked(true);
else if ("starred".equals(sort))
menu.findItem(R.id.menu_sort_on_starred).setChecked(true);
else if ("starred+unread".equals(sort))
menu.findItem(R.id.menu_sort_on_starred_unread).setChecked(true);
else if ("priority".equals(sort))
menu.findItem(R.id.menu_sort_on_priority).setChecked(true);
else if ("sender".equals(sort))
@ -6104,6 +6107,10 @@ public class FragmentMessages extends FragmentBase
item.setChecked(true);
onMenuSort("starred");
return true;
} else if (itemId == R.id.menu_sort_on_starred_unread) {
item.setChecked(true);
onMenuSort("starred+unread");
return true;
} else if (itemId == R.id.menu_sort_on_priority) {
item.setChecked(true);
onMenuSort("priority");

View File

@ -124,7 +124,7 @@ public class ViewModelMessages extends ViewModel {
args.type,
args.threading,
args.group_category,
args.sort, args.ascending,
args.sort1, args.sort2, args.ascending,
args.filter_seen,
args.filter_unflagged,
args.filter_unknown,
@ -146,7 +146,7 @@ public class ViewModelMessages extends ViewModel {
builder = new LivePagedListBuilder<>(
db.message().pagedFolder(
args.folder, args.threading,
args.sort, args.ascending,
args.sort1, args.sort2, args.ascending,
args.filter_seen,
args.filter_unflagged,
args.filter_unknown,
@ -184,7 +184,7 @@ public class ViewModelMessages extends ViewModel {
db.message().pagedUnified(
null,
args.threading, false,
"time", false,
"time", "", false,
false, false, false, false, false,
null,
true,
@ -194,7 +194,7 @@ public class ViewModelMessages extends ViewModel {
builder = new LivePagedListBuilder<>(
db.message().pagedFolder(
args.folder, args.threading,
"time", false,
"time", "", false,
false, false, false, false, false,
null,
true,
@ -508,7 +508,8 @@ public class ViewModelMessages extends ViewModel {
private boolean threading;
private boolean group_category;
private String sort;
private String sort1;
private String sort2;
private boolean ascending;
private boolean filter_seen;
private boolean filter_unflagged;
@ -540,7 +541,10 @@ public class ViewModelMessages extends ViewModel {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
this.group_category = prefs.getBoolean("group_category", false);
this.sort = prefs.getString(FragmentMessages.getSort(context, viewType, type), "time");
String sort = prefs.getString(FragmentMessages.getSort(context, viewType, type), "time");
String[] sorts = sort.split("\\+");
this.sort1 = sorts[0];
this.sort2 = (sorts.length > 1 ? sorts[1] : "");
this.ascending = prefs.getBoolean(FragmentMessages.getSortOrder(context, viewType, type), outbox);
this.filter_seen = prefs.getBoolean(FragmentMessages.getFilter(context, "seen", viewType, type), false);
this.filter_unflagged = prefs.getBoolean(FragmentMessages.getFilter(context, "unflagged", viewType, type), false);
@ -569,7 +573,8 @@ public class ViewModelMessages extends ViewModel {
this.threading == other.threading &&
this.group_category == other.group_category &&
Objects.equals(this.sort, other.sort) &&
Objects.equals(this.sort1, other.sort1) &&
Objects.equals(this.sort2, other.sort2) &&
this.ascending == other.ascending &&
this.filter_seen == other.filter_seen &&
this.filter_unflagged == other.filter_unflagged &&
@ -591,7 +596,7 @@ public class ViewModelMessages extends ViewModel {
" criteria=" + criteria + ":" + server + "" +
" threading=" + threading +
" category=" + group_category +
" sort=" + sort + ":" + ascending +
" sort=" + sort1 + "/" + sort2 + ":" + ascending +
" filter seen=" + filter_seen +
" unflagged=" + filter_unflagged +
" unknown=" + filter_unknown +

View File

@ -58,6 +58,9 @@
<item
android:id="@+id/menu_sort_on_starred"
android:title="@string/title_sort_on_starred" />
<item
android:id="@+id/menu_sort_on_starred_unread"
android:title="@string/title_sort_on_starred_unread" />
<item
android:id="@+id/menu_sort_on_priority"
android:title="@string/title_sort_on_priority" />

View File

@ -1910,6 +1910,7 @@
<string name="title_sort_on_time">Time</string>
<string name="title_sort_on_unread">Unread</string>
<string name="title_sort_on_starred">Starred</string>
<string name="title_sort_on_starred_unread">Starred, unread</string>
<string name="title_sort_on_priority">Priority</string>
<string name="title_sort_on_sender">Sender</string>
<string name="title_sort_on_subject">Subject</string>