From 21d8f3766718fda0e87fb607445a16f16d6a35a8 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 11 Jun 2024 18:24:42 +0200 Subject: [PATCH] Added option to show unread messages in widget as read --- .../eu/faircode/email/ActivityWidgetUnified.java | 13 +++++++++++++ .../email/WidgetUnifiedRemoteViewsFactory.java | 12 ++++++++---- app/src/main/res/layout/activity_widget_unified.xml | 13 ++++++++++++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityWidgetUnified.java b/app/src/main/java/eu/faircode/email/ActivityWidgetUnified.java index cc557180f2..b223fc9b85 100644 --- a/app/src/main/java/eu/faircode/email/ActivityWidgetUnified.java +++ b/app/src/main/java/eu/faircode/email/ActivityWidgetUnified.java @@ -61,6 +61,7 @@ public class ActivityWidgetUnified extends ActivityBase { private Spinner spAccount; private Spinner spFolder; private CheckBox cbUnseen; + private CheckBox cbShowUnseen; private CheckBox cbFlagged; private CheckBox cbDayNight; private CheckBox cbHighlight; @@ -107,6 +108,7 @@ public class ActivityWidgetUnified extends ActivityBase { long account = prefs.getLong("widget." + appWidgetId + ".account", -1L); long folder = prefs.getLong("widget." + appWidgetId + ".folder", -1L); boolean unseen = prefs.getBoolean("widget." + appWidgetId + ".unseen", false); + boolean show_unseen = prefs.getBoolean("widget." + appWidgetId + ".show_unseen", true); boolean flagged = prefs.getBoolean("widget." + appWidgetId + ".flagged", false); boolean daynight = prefs.getBoolean("widget." + appWidgetId + ".daynight", false); boolean highlight = prefs.getBoolean("widget." + appWidgetId + ".highlight", false); @@ -135,6 +137,7 @@ public class ActivityWidgetUnified extends ActivityBase { spAccount = findViewById(R.id.spAccount); spFolder = findViewById(R.id.spFolder); cbUnseen = findViewById(R.id.cbUnseen); + cbShowUnseen = findViewById(R.id.cbShowUnseen); cbFlagged = findViewById(R.id.cbFlagged); cbDayNight = findViewById(R.id.cbDayNight); cbHighlight = findViewById(R.id.cbHighlight); @@ -160,6 +163,13 @@ public class ActivityWidgetUnified extends ActivityBase { final Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); + cbUnseen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + cbShowUnseen.setEnabled(isChecked); + } + }); + cbDayNight.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -293,6 +303,7 @@ public class ActivityWidgetUnified extends ActivityBase { editor.putLong("widget." + appWidgetId + ".folder", folder == null ? -1L : folder.id); editor.putString("widget." + appWidgetId + ".type", folder == null ? null : folder.type); editor.putBoolean("widget." + appWidgetId + ".unseen", cbUnseen.isChecked()); + editor.putBoolean("widget." + appWidgetId + ".show_unseen", cbShowUnseen.isChecked()); editor.putBoolean("widget." + appWidgetId + ".daynight", cbDayNight.isChecked()); editor.putBoolean("widget." + appWidgetId + ".flagged", cbFlagged.isChecked()); editor.putBoolean("widget." + appWidgetId + ".highlight", cbHighlight.isChecked()); @@ -422,6 +433,8 @@ public class ActivityWidgetUnified extends ActivityBase { // Initialize cbUnseen.setChecked(unseen); + cbShowUnseen.setChecked(show_unseen); + cbShowUnseen.setEnabled(cbUnseen.isChecked()); cbFlagged.setChecked(flagged); cbDayNight.setChecked(daynight); cbDayNight.setVisibility(Build.VERSION.SDK_INT < Build.VERSION_CODES.S ? View.GONE : View.VISIBLE); diff --git a/app/src/main/java/eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java b/app/src/main/java/eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java index 0afcce58b2..36a93496c8 100644 --- a/app/src/main/java/eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java +++ b/app/src/main/java/eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java @@ -57,6 +57,7 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot private long folder; private long account; private boolean unseen; + private boolean show_unseen; private boolean flagged; private boolean daynight; private boolean highlight; @@ -109,6 +110,7 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot account = prefs.getLong("widget." + appWidgetId + ".account", -1L); folder = prefs.getLong("widget." + appWidgetId + ".folder", -1L); unseen = prefs.getBoolean("widget." + appWidgetId + ".unseen", false); + show_unseen = prefs.getBoolean("widget." + appWidgetId + ".show_unseen", true); flagged = prefs.getBoolean("widget." + appWidgetId + ".flagged", false); daynight = prefs.getBoolean("widget." + appWidgetId + ".daynight", false); highlight = prefs.getBoolean("widget." + appWidgetId + ".highlight", false); @@ -258,7 +260,9 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot SpannableString ssAccount = new SpannableString( TextUtils.isEmpty(message.accountName) ? "" : message.accountName); - if (message.ui_seen || unseen) { + boolean show_seen = (unseen && !show_unseen); + + if (message.ui_seen || show_seen) { if (subject_italic) ssSubject.setSpan(new StyleSpan(Typeface.ITALIC), 0, ssSubject.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); } else { @@ -284,14 +288,14 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot views.setViewVisibility(ivFrom, View.GONE); views.setViewVisibility(ivSubject, message.attachments > 0 ? View.VISIBLE : View.GONE); views.setColorStateList(ivSubject, "setImageTintList", - ColorStateList.valueOf(message.ui_seen || unseen ? colorWidgetRead : colorWidgetUnread)); + ColorStateList.valueOf(message.ui_seen || show_seen ? colorWidgetRead : colorWidgetUnread)); } else { views.setViewVisibility(ivFrom, View.GONE); views.setViewVisibility(ivSubject, View.GONE); } if (daynight && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - int textColorAttr = (message.ui_seen || unseen ? android.R.attr.textColorPrimary : android.R.attr.textColorLink); + int textColorAttr = (message.ui_seen || show_seen ? android.R.attr.textColorPrimary : android.R.attr.textColorLink); views.setColorStateListAttr(idFrom, "setTextColor", textColorAttr); views.setColorStateListAttr(idTime, "setTextColor", textColorAttr); views.setColorStateListAttr(idSubject, "setTextColor", textColorAttr); @@ -299,7 +303,7 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot views.setInt(R.id.separator, "setBackgroundColor", Color.WHITE); views.setColorStateListAttr(R.id.separator, "setBackgroundTintList", android.R.attr.colorControlNormal); } else { - int textColor = (message.ui_seen || unseen ? colorWidgetRead : colorWidgetUnread); + int textColor = (message.ui_seen || show_seen ? colorWidgetRead : colorWidgetUnread); views.setTextColor(idFrom, textColor); views.setTextColor(idTime, textColor); views.setTextColor(idSubject, textColor); diff --git a/app/src/main/res/layout/activity_widget_unified.xml b/app/src/main/res/layout/activity_widget_unified.xml index 348cedcaae..c59668fce2 100644 --- a/app/src/main/res/layout/activity_widget_unified.xml +++ b/app/src/main/res/layout/activity_widget_unified.xml @@ -57,6 +57,17 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/spFolder" /> + + + app:layout_constraintTop_toBottomOf="@id/cbShowUnseen" /> Unified inbox folders Folders with new message notifications Unread messages only + Show as unread Starred messages only Text size Padding size