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 boolean ascending;
private boolean filter_duplicates;
private boolean filter_sent;
private boolean filter_trash;
private IProperties properties;
@ -8338,7 +8339,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
AdapterMessage(Fragment parentFragment,
String type, boolean found, String searched, boolean searchedPartial, ViewType viewType,
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) {
this.parentFragment = parentFragment;
this.type = type;
@ -8352,6 +8353,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
this.sort = sort;
this.ascending = ascending;
this.filter_duplicates = filter_duplicates;
this.filter_sent = filter_sent;
this.filter_trash = filter_trash;
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) {
if (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)
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 (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) ||
(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
? Color.TRANSPARENT
: ColorUtils.setAlphaComponent(message.folderColor, 128));
@ -9337,13 +9350,13 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
holder.wire();
}
private boolean allTrashed() {
private boolean all(@NonNull String type) {
if (differ.getItemCount() == 1)
return true;
for (int i = 0; i < differ.getItemCount(); i++) {
TupleMessageEx m = differ.getItem(i);
if (m == null || !EntityFolder.TRASH.equals(m.folderType))
if (m == null || !type.equals(m.folderType))
return false;
}

@ -1288,15 +1288,18 @@ public class FragmentMessages extends FragmentBase
boolean outbox = EntityFolder.OUTBOX.equals(type);
boolean ascending = prefs.getBoolean(getSortOrder(getContext(), viewType, type), outbox);
boolean filter_duplicates = prefs.getBoolean("filter_duplicates", true);
boolean filter_sent = prefs.getBoolean("filter_sent", 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;
}
adapter = new AdapterMessage(
this, type, found, searched, searchedPartial, viewType,
compact, zoom, large_buttons, sort, ascending,
filter_duplicates, filter_trash,
filter_duplicates, filter_sent, filter_trash,
iProperties);
if (viewType == AdapterMessage.ViewType.THREAD)
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_deleted = prefs.getBoolean(getFilter(context, "deleted", viewType, type), false);
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 language_detection = prefs.getBoolean("language_detection", false);
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_deleted).setVisible(folder && !perform_expunge);
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_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_language).setVisible(language_detection && folder);
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);
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) {
onMenuFilterDuplicates(!item.isChecked());
return true;
} else if (itemId == R.id.menu_filter_sent) {
onMenuFilterSent(!item.isChecked());
return true;
} else if (itemId == R.id.menu_filter_trash) {
onMenuFilterTrash(!item.isChecked());
return true;
@ -6945,6 +6954,13 @@ public class FragmentMessages extends FragmentBase
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) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
prefs.edit().putBoolean("filter_trash", filter).apply();

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

@ -2038,6 +2038,7 @@
<string name="title_filter_hidden">Hidden</string>
<string name="title_filter_deleted">Deleted</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_compact">Compact view</string>

Loading…
Cancel
Save