Added option to filter sent messages

pull/217/head
M66B 7 months ago
parent dea7870939
commit 6fe1a80aa3

@ -218,6 +218,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
private String sort; private String sort;
private boolean ascending; private boolean ascending;
private boolean filter_duplicates; private boolean filter_duplicates;
private boolean filter_sent;
private boolean filter_trash; private boolean filter_trash;
private IProperties properties; private IProperties properties;
@ -8338,7 +8339,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
AdapterMessage(Fragment parentFragment, AdapterMessage(Fragment parentFragment,
String type, boolean found, String searched, boolean searchedPartial, ViewType viewType, String type, boolean found, String searched, boolean searchedPartial, ViewType viewType,
boolean compact, int zoom, boolean large_buttons, String sort, boolean ascending, boolean compact, int zoom, boolean large_buttons, String sort, boolean ascending,
boolean filter_duplicates, boolean filter_trash, boolean filter_duplicates, boolean filter_sent, boolean filter_trash,
final IProperties properties) { final IProperties properties) {
this.parentFragment = parentFragment; this.parentFragment = parentFragment;
this.type = type; this.type = type;
@ -8352,6 +8353,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.sort = sort; this.sort = sort;
this.ascending = ascending; this.ascending = ascending;
this.filter_duplicates = filter_duplicates; this.filter_duplicates = filter_duplicates;
this.filter_sent = filter_sent;
this.filter_trash = filter_trash; this.filter_trash = filter_trash;
this.properties = properties; this.properties = properties;
@ -9208,6 +9210,13 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
} }
void setFilterSent(boolean filter_sent) {
if (this.filter_sent != filter_sent) {
this.filter_sent = filter_sent;
properties.refresh();
}
}
void setFilterTrash(boolean filter_trash) { void setFilterTrash(boolean filter_trash) {
if (this.filter_trash != filter_trash) { if (this.filter_trash != filter_trash) {
this.filter_trash = filter_trash; this.filter_trash = filter_trash;
@ -9247,7 +9256,10 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
if (filter_duplicates && message.duplicate) if (filter_duplicates && message.duplicate)
return R.layout.item_message_duplicate; return R.layout.item_message_duplicate;
if (filter_trash && EntityFolder.TRASH.equals(message.folderType) && !allTrashed()) if (filter_sent && EntityFolder.SENT.equals(message.folderType) && !all(EntityFolder.SENT))
return R.layout.item_message_duplicate;
if (filter_trash && EntityFolder.TRASH.equals(message.folderType) && !all(EntityFolder.TRASH))
return R.layout.item_message_duplicate; return R.layout.item_message_duplicate;
return (compact ? R.layout.item_message_compact : R.layout.item_message_normal); return (compact ? R.layout.item_message_compact : R.layout.item_message_normal);
@ -9310,7 +9322,8 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
if ((filter_duplicates && message.duplicate) || if ((filter_duplicates && message.duplicate) ||
(filter_trash && EntityFolder.TRASH.equals(message.folderType) && !allTrashed())) { (filter_sent && EntityFolder.SENT.equals(message.folderType) && !all(EntityFolder.SENT)) ||
(filter_trash && EntityFolder.TRASH.equals(message.folderType) && !all(EntityFolder.TRASH))) {
holder.card.setCardBackgroundColor(message.folderColor == null holder.card.setCardBackgroundColor(message.folderColor == null
? Color.TRANSPARENT ? Color.TRANSPARENT
: ColorUtils.setAlphaComponent(message.folderColor, 128)); : ColorUtils.setAlphaComponent(message.folderColor, 128));
@ -9337,13 +9350,13 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
holder.wire(); holder.wire();
} }
private boolean allTrashed() { private boolean all(@NonNull String type) {
if (differ.getItemCount() == 1) if (differ.getItemCount() == 1)
return true; return true;
for (int i = 0; i < differ.getItemCount(); i++) { for (int i = 0; i < differ.getItemCount(); i++) {
TupleMessageEx m = differ.getItem(i); TupleMessageEx m = differ.getItem(i);
if (m == null || !EntityFolder.TRASH.equals(m.folderType)) if (m == null || !type.equals(m.folderType))
return false; return false;
} }

@ -1288,15 +1288,18 @@ public class FragmentMessages extends FragmentBase
boolean outbox = EntityFolder.OUTBOX.equals(type); boolean outbox = EntityFolder.OUTBOX.equals(type);
boolean ascending = prefs.getBoolean(getSortOrder(getContext(), viewType, type), outbox); boolean ascending = prefs.getBoolean(getSortOrder(getContext(), viewType, type), outbox);
boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true); boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true);
boolean filter_sent = prefs.getBoolean("filter_sent", false);
boolean filter_trash = prefs.getBoolean("filter_trash", false); boolean filter_trash = prefs.getBoolean("filter_trash", false);
if (viewType != AdapterMessage.ViewType.THREAD) if (viewType != AdapterMessage.ViewType.THREAD) {
filter_sent = false;
filter_trash = false; filter_trash = false;
}
adapter = new AdapterMessage( adapter = new AdapterMessage(
this, type, found, searched, searchedPartial, viewType, this, type, found, searched, searchedPartial, viewType,
compact, zoom, large_buttons, sort, ascending, compact, zoom, large_buttons, sort, ascending,
filter_duplicates, filter_trash, filter_duplicates, filter_sent, filter_trash,
iProperties); iProperties);
if (viewType == AdapterMessage.ViewType.THREAD) if (viewType == AdapterMessage.ViewType.THREAD)
adapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT); adapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT);
@ -6372,6 +6375,7 @@ public class FragmentMessages extends FragmentBase
boolean filter_snoozed = prefs.getBoolean(getFilter(context, "snoozed", viewType, type), true); boolean filter_snoozed = prefs.getBoolean(getFilter(context, "snoozed", viewType, type), true);
boolean filter_deleted = prefs.getBoolean(getFilter(context, "deleted", viewType, type), false); boolean filter_deleted = prefs.getBoolean(getFilter(context, "deleted", viewType, type), false);
boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true); boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true);
boolean filter_sent = prefs.getBoolean("filter_sent", false);
boolean filter_trash = prefs.getBoolean("filter_trash", false); boolean filter_trash = prefs.getBoolean("filter_trash", false);
boolean language_detection = prefs.getBoolean("language_detection", false); boolean language_detection = prefs.getBoolean("language_detection", false);
String filter_language = prefs.getString("filter_language", null); String filter_language = prefs.getString("filter_language", null);
@ -6475,6 +6479,7 @@ public class FragmentMessages extends FragmentBase
menu.findItem(R.id.menu_filter_snoozed).setVisible(folder && !drafts); 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_deleted).setVisible(folder && !perform_expunge);
menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD); menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD);
menu.findItem(R.id.menu_filter_sent).setVisible(viewType == AdapterMessage.ViewType.THREAD);
menu.findItem(R.id.menu_filter_trash).setVisible(viewType == AdapterMessage.ViewType.THREAD); menu.findItem(R.id.menu_filter_trash).setVisible(viewType == AdapterMessage.ViewType.THREAD);
menu.findItem(R.id.menu_filter_seen).setChecked(filter_seen); menu.findItem(R.id.menu_filter_seen).setChecked(filter_seen);
@ -6484,6 +6489,7 @@ public class FragmentMessages extends FragmentBase
menu.findItem(R.id.menu_filter_deleted).setChecked(filter_deleted); 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_language).setVisible(language_detection && folder);
menu.findItem(R.id.menu_filter_duplicates).setChecked(filter_duplicates); menu.findItem(R.id.menu_filter_duplicates).setChecked(filter_duplicates);
menu.findItem(R.id.menu_filter_sent).setChecked(filter_sent);
menu.findItem(R.id.menu_filter_trash).setChecked(filter_trash); menu.findItem(R.id.menu_filter_trash).setChecked(filter_trash);
SpannableStringBuilder ssbZoom = new SpannableStringBuilder(getString(R.string.title_zoom)); SpannableStringBuilder ssbZoom = new SpannableStringBuilder(getString(R.string.title_zoom));
@ -6658,6 +6664,9 @@ public class FragmentMessages extends FragmentBase
} else if (itemId == R.id.menu_filter_duplicates) { } else if (itemId == R.id.menu_filter_duplicates) {
onMenuFilterDuplicates(!item.isChecked()); onMenuFilterDuplicates(!item.isChecked());
return true; return true;
} else if (itemId == R.id.menu_filter_sent) {
onMenuFilterSent(!item.isChecked());
return true;
} else if (itemId == R.id.menu_filter_trash) { } else if (itemId == R.id.menu_filter_trash) {
onMenuFilterTrash(!item.isChecked()); onMenuFilterTrash(!item.isChecked());
return true; return true;
@ -6945,6 +6954,13 @@ public class FragmentMessages extends FragmentBase
adapter.setFilterDuplicates(filter); adapter.setFilterDuplicates(filter);
} }
private void onMenuFilterSent(boolean filter) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
prefs.edit().putBoolean("filter_sent", filter).apply();
invalidateOptionsMenu();
adapter.setFilterSent(filter);
}
private void onMenuFilterTrash(boolean filter) { private void onMenuFilterTrash(boolean filter) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
prefs.edit().putBoolean("filter_trash", filter).apply(); prefs.edit().putBoolean("filter_trash", filter).apply();

@ -133,6 +133,11 @@
android:checkable="true" android:checkable="true"
android:title="@string/title_filter_duplicates" /> android:title="@string/title_filter_duplicates" />
<item
android:id="@+id/menu_filter_sent"
android:checkable="true"
android:title="@string/title_filter_sent" />
<item <item
android:id="@+id/menu_filter_trash" android:id="@+id/menu_filter_trash"
android:checkable="true" android:checkable="true"

@ -2038,6 +2038,7 @@
<string name="title_filter_hidden">Hidden</string> <string name="title_filter_hidden">Hidden</string>
<string name="title_filter_deleted">Deleted</string> <string name="title_filter_deleted">Deleted</string>
<string name="title_filter_duplicates">Duplicates</string> <string name="title_filter_duplicates">Duplicates</string>
<string name="title_filter_sent">Sent</string>
<string name="title_filter_trash">Trashed</string> <string name="title_filter_trash">Trashed</string>
<string name="title_compact">Compact view</string> <string name="title_compact">Compact view</string>

Loading…
Cancel
Save