mirror of https://github.com/M66B/FairEmail.git
Added filtering unflagged messages
This commit is contained in:
parent
42ff71fe4c
commit
d0054214b4
|
@ -69,6 +69,7 @@ public interface DaoMessage {
|
|||
" GROUP BY account.id, CASE WHEN message.thread IS NULL OR NOT :threading THEN message.id ELSE message.thread END" +
|
||||
" HAVING :found OR SUM(unified) > 0" +
|
||||
" AND (NOT :filter_seen OR " + unseen_unified + " > 0)" +
|
||||
" AND (NOT :filter_unflagged OR COUNT(message.id) - " + unflagged_unified + " > 0)" +
|
||||
" ORDER BY" +
|
||||
" CASE" +
|
||||
" WHEN 'unread' = :sort THEN " + unseen_unified + " = 0" +
|
||||
|
@ -81,7 +82,11 @@ public interface DaoMessage {
|
|||
" END, message.received DESC")
|
||||
@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
|
||||
DataSource.Factory<Integer, TupleMessageEx> pagedUnifiedInbox(
|
||||
boolean threading, String sort, boolean filter_seen, boolean filter_snoozed, boolean found, boolean debug);
|
||||
boolean threading,
|
||||
String sort,
|
||||
boolean filter_seen, boolean filter_unflagged, boolean filter_snoozed,
|
||||
boolean found,
|
||||
boolean debug);
|
||||
|
||||
String unseen_folder = "SUM(CASE WHEN message.ui_seen" +
|
||||
" OR (folder.id <> :folder AND folder.type = '" + EntityFolder.ARCHIVE + "')" +
|
||||
|
@ -116,6 +121,7 @@ public interface DaoMessage {
|
|||
" GROUP BY CASE WHEN message.thread IS NULL OR NOT :threading THEN message.id ELSE message.thread END" +
|
||||
" HAVING SUM(CASE WHEN folder.id = :folder THEN 1 ELSE 0 END) > 0" +
|
||||
" AND (NOT :filter_seen OR " + unseen_folder + " > 0 OR folder.type = '" + EntityFolder.OUTBOX + "')" +
|
||||
" AND (NOT :filter_unflagged OR COUNT(message.id) - " + unflagged_folder + " > 0 OR folder.type = '" + EntityFolder.OUTBOX + "')" +
|
||||
" ORDER BY" +
|
||||
" CASE" +
|
||||
" WHEN 'unread' = :sort THEN " + unseen_folder + " = 0" +
|
||||
|
@ -128,7 +134,11 @@ public interface DaoMessage {
|
|||
" END, message.received DESC")
|
||||
@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
|
||||
DataSource.Factory<Integer, TupleMessageEx> pagedFolder(
|
||||
long folder, boolean threading, String sort, boolean filter_seen, boolean filter_snoozed, boolean found, boolean debug);
|
||||
long folder, boolean threading,
|
||||
String sort,
|
||||
boolean filter_seen, boolean filter_unflagged, boolean filter_snoozed,
|
||||
boolean found,
|
||||
boolean debug);
|
||||
|
||||
@Query("SELECT message.*" +
|
||||
", account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor, account.notify AS accountNotify" +
|
||||
|
|
|
@ -2286,9 +2286,11 @@ public class FragmentMessages extends FragmentBase {
|
|||
|
||||
menu.findItem(R.id.menu_filter).setVisible(viewType != AdapterMessage.ViewType.SEARCH && !outbox);
|
||||
menu.findItem(R.id.menu_filter_seen).setVisible(viewType != AdapterMessage.ViewType.THREAD);
|
||||
menu.findItem(R.id.menu_filter_unflagged).setVisible(viewType != AdapterMessage.ViewType.THREAD);
|
||||
menu.findItem(R.id.menu_filter_snoozed).setVisible(viewType != AdapterMessage.ViewType.THREAD);
|
||||
menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD);
|
||||
menu.findItem(R.id.menu_filter_seen).setChecked(prefs.getBoolean("filter_seen", false));
|
||||
menu.findItem(R.id.menu_filter_unflagged).setChecked(prefs.getBoolean("filter_unflagged", false));
|
||||
menu.findItem(R.id.menu_filter_snoozed).setChecked(prefs.getBoolean("filter_snoozed", true));
|
||||
menu.findItem(R.id.menu_filter_duplicates).setChecked(prefs.getBoolean("filter_duplicates", false));
|
||||
|
||||
|
@ -2347,6 +2349,10 @@ public class FragmentMessages extends FragmentBase {
|
|||
onMenuFilterRead(!item.isChecked());
|
||||
return true;
|
||||
|
||||
case R.id.menu_filter_unflagged:
|
||||
onMenuFilterUnflagged(!item.isChecked());
|
||||
return true;
|
||||
|
||||
case R.id.menu_filter_snoozed:
|
||||
onMenuFilterSnoozed(!item.isChecked());
|
||||
return true;
|
||||
|
@ -2403,6 +2409,15 @@ public class FragmentMessages extends FragmentBase {
|
|||
loadMessages(true);
|
||||
}
|
||||
|
||||
private void onMenuFilterUnflagged(boolean filter) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
prefs.edit().putBoolean("filter_unflagged", filter).apply();
|
||||
getActivity().invalidateOptionsMenu();
|
||||
if (selectionTracker != null)
|
||||
selectionTracker.clearSelection();
|
||||
loadMessages(true);
|
||||
}
|
||||
|
||||
private void onMenuFilterSnoozed(boolean filter) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
prefs.edit().putBoolean("filter_snoozed", filter).apply();
|
||||
|
@ -2592,10 +2607,13 @@ public class FragmentMessages extends FragmentBase {
|
|||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
String sort = prefs.getString("sort", "time");
|
||||
boolean filter_seen = prefs.getBoolean("filter_seen", false);
|
||||
boolean filter_unflagged = prefs.getBoolean("filter_unflagged", false);
|
||||
boolean filter_snoozed = prefs.getBoolean("filter_snoozed", true);
|
||||
boolean debug = prefs.getBoolean("debug", false);
|
||||
Log.i("Load messages type=" + viewType +
|
||||
" sort=" + sort + " filter seen=" + filter_seen + " snoozed=" + filter_snoozed + " debug=" + debug);
|
||||
" sort=" + sort +
|
||||
" filter seen=" + filter_seen + " unflagged=" + filter_unflagged + " snoozed=" + filter_snoozed +
|
||||
" debug=" + debug);
|
||||
|
||||
// Sort changed
|
||||
final ViewModelMessages modelMessages = ViewModelProviders.of(getActivity()).get(ViewModelMessages.class);
|
||||
|
@ -2606,7 +2624,13 @@ public class FragmentMessages extends FragmentBase {
|
|||
switch (viewType) {
|
||||
case UNIFIED:
|
||||
builder = new LivePagedListBuilder<>(
|
||||
db.message().pagedUnifiedInbox(threading, sort, filter_seen, filter_snoozed, false, debug), LOCAL_PAGE_SIZE);
|
||||
db.message().pagedUnifiedInbox(
|
||||
threading,
|
||||
sort,
|
||||
filter_seen, filter_unflagged, filter_snoozed,
|
||||
false,
|
||||
debug),
|
||||
LOCAL_PAGE_SIZE);
|
||||
break;
|
||||
|
||||
case FOLDER:
|
||||
|
@ -2615,7 +2639,13 @@ public class FragmentMessages extends FragmentBase {
|
|||
.setPrefetchDistance(REMOTE_PAGE_SIZE)
|
||||
.build();
|
||||
builder = new LivePagedListBuilder<>(
|
||||
db.message().pagedFolder(folder, threading, sort, filter_seen, filter_snoozed, false, debug), configFolder);
|
||||
db.message().pagedFolder(
|
||||
folder, threading,
|
||||
sort,
|
||||
filter_seen, filter_unflagged, filter_snoozed,
|
||||
false,
|
||||
debug),
|
||||
configFolder);
|
||||
builder.setBoundaryCallback(boundaryCallback);
|
||||
break;
|
||||
|
||||
|
@ -2631,10 +2661,22 @@ public class FragmentMessages extends FragmentBase {
|
|||
.build();
|
||||
if (folder < 0)
|
||||
builder = new LivePagedListBuilder<>(
|
||||
db.message().pagedUnifiedInbox(threading, "time", false, false, true, debug), configSearch);
|
||||
db.message().pagedUnifiedInbox(
|
||||
threading,
|
||||
"time",
|
||||
false, false, false,
|
||||
true,
|
||||
debug),
|
||||
configSearch);
|
||||
else
|
||||
builder = new LivePagedListBuilder<>(
|
||||
db.message().pagedFolder(folder, threading, "time", false, false, true, debug), configSearch);
|
||||
db.message().pagedFolder(
|
||||
folder, threading,
|
||||
"time",
|
||||
false, false, false,
|
||||
true,
|
||||
debug),
|
||||
configSearch);
|
||||
builder.setBoundaryCallback(boundaryCallback);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -59,6 +59,11 @@
|
|||
android:checkable="true"
|
||||
android:title="@string/title_filter_seen" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_filter_unflagged"
|
||||
android:checkable="true"
|
||||
android:title="@string/title_filter_unflagged" />
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_filter_snoozed"
|
||||
android:checkable="true"
|
||||
|
|
|
@ -505,6 +505,7 @@
|
|||
|
||||
<string name="title_filter">Filter</string>
|
||||
<string name="title_filter_seen">Read</string>
|
||||
<string name="title_filter_unflagged">Unstarred</string>
|
||||
<string name="title_filter_snoozed">Snoozed</string>
|
||||
<string name="title_filter_duplicates">Duplicates</string>
|
||||
|
||||
|
|
Loading…
Reference in New Issue