From 767c8e8fe2ff7d2aa79a29723f4ae50c72214568 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 28 Mar 2020 10:20:52 +0100 Subject: [PATCH] Open relevant folder/messages from unread count widget --- .../java/eu/faircode/email/ActivityView.java | 15 +++++++-- .../java/eu/faircode/email/DaoFolder.java | 6 ++++ .../main/java/eu/faircode/email/Widget.java | 32 +++++++++++++------ 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index aa9657a54f..6418cc2d48 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -882,6 +882,14 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB startService(clear); } + } else if (action.startsWith("folders")) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) + getSupportFragmentManager().popBackStack("unified", 0); + + long account = Long.parseLong(action.split(":", 2)[1]); + if (account > 0) + onMenuFolders(account); + } else if (action.startsWith("folder")) { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) getSupportFragmentManager().popBackStack("unified", 0); @@ -909,10 +917,13 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB Helper.viewFAQ(this, "alert".equals(action) ? 23 : 22); - } else if ("outbox".equals(action)) + } else if ("outbox".equals(action)) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) + getSupportFragmentManager().popBackStack("unified", 0); + onMenuOutbox(); - else if (action.startsWith("thread")) { + } else if (action.startsWith("thread")) { intent.putExtra("thread", action.split(":", 2)[1]); onViewThread(intent); diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index 2a160790ac..811da86a6a 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -163,6 +163,12 @@ public interface DaoFolder { " AND folder.synchronize") List getSynchronizingFolders(long account); + @Query("SELECT * FROM folder" + + " WHERE folder.account = :account" + + " AND folder.`synchronize`" + + " AND folder.notify") + List getNotifyingFolders(long account); + @Query("SELECT folder.type" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN NOT message.ui_seen THEN 1 ELSE 0 END) AS unseen" + diff --git a/app/src/main/java/eu/faircode/email/Widget.java b/app/src/main/java/eu/faircode/email/Widget.java index 16dc1aa422..3e4a28558c 100644 --- a/app/src/main/java/eu/faircode/email/Widget.java +++ b/app/src/main/java/eu/faircode/email/Widget.java @@ -32,6 +32,8 @@ import android.widget.RemoteViews; import androidx.preference.PreferenceManager; import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.ExecutorService; public class Widget extends AppWidgetProvider { @@ -53,23 +55,33 @@ public class Widget extends AppWidgetProvider { long account = prefs.getLong("widget." + appWidgetId + ".account", -1L); String name = prefs.getString("widget." + appWidgetId + ".name", null); - EntityFolder folder = db.folder().getFolderByType(account, EntityFolder.INBOX); + List folders = db.folder().getNotifyingFolders(account); + if (folders == null) + folders = new ArrayList<>(); PendingIntent pi; - if (folder == null) { + if (folders.size() == 1) { Intent view = new Intent(context, ActivityView.class); - view.setAction("unified"); - view.putExtra("refresh", true); - view.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - pi = PendingIntent.getActivity(context, ActivityView.REQUEST_UNIFIED, view, PendingIntent.FLAG_UPDATE_CURRENT); - } else { - Intent view = new Intent(context, ActivityView.class); - view.setAction("folder:" + folder.id); + view.setAction("folder:" + folders.get(0).id); view.putExtra("account", account); - view.putExtra("type", folder.type); + view.putExtra("type", folders.get(0).type); view.putExtra("refresh", true); view.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); pi = PendingIntent.getActivity(context, appWidgetId, view, PendingIntent.FLAG_UPDATE_CURRENT); + } else { + if (account < 0) { + Intent view = new Intent(context, ActivityView.class); + view.setAction("unified"); + view.putExtra("refresh", true); + view.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + pi = PendingIntent.getActivity(context, ActivityView.REQUEST_UNIFIED, view, PendingIntent.FLAG_UPDATE_CURRENT); + } else { + Intent view = new Intent(context, ActivityView.class); + view.setAction("folders:" + account); + view.putExtra("refresh", true); + view.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + pi = PendingIntent.getActivity(context, appWidgetId, view, PendingIntent.FLAG_UPDATE_CURRENT); + } } TupleMessageStats stats = db.message().getWidgetUnseen(account < 0 ? null : account);