diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 804beb2413..1d79010ac3 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -99,6 +99,7 @@ public interface DaoMessage { " AND (NOT :filter_unflagged OR COUNT(message.id) - SUM(1 - message.ui_flagged) > 0)" + " AND (NOT :filter_unknown OR SUM(message.avatar IS NOT NULL AND message.sender <> identity.email) > 0)" + " AND (NOT :filter_snoozed OR message.ui_snoozed IS NULL OR " + is_drafts + ")" + + " AND (NOT :filter_deleted OR NOT message.ui_deleted)" + " AND (:filter_language IS NULL OR SUM(message.language = :filter_language) > 0)" + " ORDER BY -IFNULL(message.importance, 1)" + ", account.category COLLATE NOCASE" + @@ -118,7 +119,7 @@ public interface DaoMessage { String type, boolean threading, String sort, boolean ascending, - boolean filter_seen, boolean filter_unflagged, boolean filter_unknown, boolean filter_snoozed, String filter_language, + boolean filter_seen, boolean filter_unflagged, boolean filter_unknown, boolean filter_snoozed, boolean filter_deleted, String filter_language, boolean found, boolean debug); @@ -171,6 +172,7 @@ public interface DaoMessage { " AND (NOT :filter_unknown OR SUM(message.avatar IS NOT NULL AND message.sender <> identity.email) > 0" + " OR " + is_outbox + " OR " + is_drafts + " OR " + is_sent + ")" + " AND (NOT :filter_snoozed OR message.ui_snoozed IS NULL OR " + is_outbox + " OR " + is_drafts + ")" + + " AND (NOT :filter_deleted OR NOT message.ui_deleted)" + " AND (:filter_language IS NULL OR SUM(message.language = :filter_language) > 0 OR " + is_outbox + ")" + " ORDER BY -IFNULL(message.importance, 1)" + ", CASE" + @@ -188,7 +190,7 @@ public interface DaoMessage { DataSource.Factory pagedFolder( long folder, boolean threading, String sort, boolean ascending, - boolean filter_seen, boolean filter_unflagged, boolean filter_unknown, boolean filter_snoozed, String filter_language, + boolean filter_seen, boolean filter_unflagged, boolean filter_unknown, boolean filter_snoozed, boolean filter_deleted, String filter_language, 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 f9c20698ac..cfa6172304 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -4512,10 +4512,12 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. boolean filter_unflagged = prefs.getBoolean(getFilter(context, "unflagged", viewType, type), false); boolean filter_unknown = prefs.getBoolean(getFilter(context, "unknown", viewType, type), false); boolean filter_snoozed = prefs.getBoolean(getFilter(context, "snoozed", viewType, type), true); + boolean filter_deleted = prefs.getBoolean(getFilter(context, "deleted", viewType, type), false); boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true); boolean filter_trash = prefs.getBoolean("filter_trash", false); boolean language_detection = prefs.getBoolean("language_detection", false); String filter_language = prefs.getString("filter_language", null); + boolean perform_expunge = prefs.getBoolean("perform_expunge", true); boolean compact = prefs.getBoolean("compact", false); int zoom = prefs.getInt("view_zoom", compact ? 0 : 1); int padding = prefs.getInt("view_padding", compact ? 0 : 1); @@ -4603,6 +4605,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. menu.findItem(R.id.menu_filter_unflagged).setVisible(folder); menu.findItem(R.id.menu_filter_unknown).setVisible(folder && !drafts && !sent); menu.findItem(R.id.menu_filter_snoozed).setVisible(folder && !drafts); + menu.findItem(R.id.menu_filter_deleted).setVisible(folder && !perform_expunge); menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD); menu.findItem(R.id.menu_filter_trash).setVisible(viewType == AdapterMessage.ViewType.THREAD); @@ -4610,6 +4613,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. menu.findItem(R.id.menu_filter_unflagged).setChecked(filter_unflagged); menu.findItem(R.id.menu_filter_unknown).setChecked(filter_unknown); menu.findItem(R.id.menu_filter_snoozed).setChecked(filter_snoozed); + menu.findItem(R.id.menu_filter_deleted).setChecked(filter_deleted); menu.findItem(R.id.menu_filter_language).setVisible(language_detection && folder); menu.findItem(R.id.menu_filter_duplicates).setChecked(filter_duplicates); menu.findItem(R.id.menu_filter_trash).setChecked(filter_trash); @@ -4738,6 +4742,9 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. } else if (itemId == R.id.menu_filter_snoozed) { onMenuFilter(getFilter(getContext(), "snoozed", viewType, type), !item.isChecked()); return true; + } else if (itemId == R.id.menu_filter_deleted) { + onMenuFilter(getFilter(getContext(), "deleted", viewType, type), !item.isChecked()); + return true; } else if (itemId == R.id.menu_filter_language) { onMenuFilterLanguage(); return true; diff --git a/app/src/main/java/eu/faircode/email/ViewModelMessages.java b/app/src/main/java/eu/faircode/email/ViewModelMessages.java index 5ce1467bb5..13fd9c9246 100644 --- a/app/src/main/java/eu/faircode/email/ViewModelMessages.java +++ b/app/src/main/java/eu/faircode/email/ViewModelMessages.java @@ -128,6 +128,7 @@ public class ViewModelMessages extends ViewModel { args.filter_unflagged, args.filter_unknown, args.filter_snoozed, + args.filter_deleted, args.filter_language, false, args.debug), @@ -149,6 +150,7 @@ public class ViewModelMessages extends ViewModel { args.filter_unflagged, args.filter_unknown, args.filter_snoozed, + args.filter_deleted, args.filter_language, false, args.debug), @@ -182,7 +184,7 @@ public class ViewModelMessages extends ViewModel { null, args.threading, "time", false, - false, false, false, false, + false, false, false, false, false, null, true, args.debug), @@ -192,7 +194,7 @@ public class ViewModelMessages extends ViewModel { db.message().pagedFolder( args.folder, args.threading, "time", false, - false, false, false, false, + false, false, false, false, false, null, true, args.debug), @@ -483,6 +485,7 @@ public class ViewModelMessages extends ViewModel { private boolean filter_unknown; private boolean filter_snoozed; private boolean filter_archive; + private boolean filter_deleted; private String filter_language; private boolean debug; @@ -510,6 +513,7 @@ public class ViewModelMessages extends ViewModel { this.filter_unflagged = prefs.getBoolean(FragmentMessages.getFilter(context, "unflagged", viewType, type), false); this.filter_unknown = prefs.getBoolean(FragmentMessages.getFilter(context, "unknown", viewType, type), false); this.filter_snoozed = prefs.getBoolean(FragmentMessages.getFilter(context, "snoozed", viewType, type), true); + this.filter_deleted = prefs.getBoolean(FragmentMessages.getFilter(context, "deleted", viewType, type), false); boolean language_detection = prefs.getBoolean("language_detection", false); String filter_language = prefs.getString("filter_language", null); @@ -538,6 +542,7 @@ public class ViewModelMessages extends ViewModel { this.filter_unknown == other.filter_unknown && this.filter_snoozed == other.filter_snoozed && this.filter_archive == other.filter_archive && + this.filter_deleted == other.filter_deleted && Objects.equals(this.filter_language, other.filter_language) && this.debug == other.debug); } else diff --git a/app/src/main/res/menu/menu_messages.xml b/app/src/main/res/menu/menu_messages.xml index 4305fe9f42..4b38438044 100644 --- a/app/src/main/res/menu/menu_messages.xml +++ b/app/src/main/res/menu/menu_messages.xml @@ -110,6 +110,11 @@ android:checkable="true" android:title="@string/title_filter_hidden" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c4b9cbce17..cce7805db1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -683,6 +683,7 @@ MODSEQ AUTO EXPUNGE UID EXPUNGE + Hide deleted messages PLAIN LOGIN NTLM @@ -1419,6 +1420,7 @@ Unstarred Unknown senders Hidden + Deleted Duplicates Trashed