From 73a23b9d5045bac47e9126eaa742f5d496cd7215 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 18 Mar 2019 13:35:45 +0000 Subject: [PATCH] Move outbox to navigation menu --- .../java/eu/faircode/email/ActivityView.java | 86 ++++++++++++++----- .../java/eu/faircode/email/DaoAccount.java | 7 ++ .../java/eu/faircode/email/DaoFolder.java | 7 +- .../eu/faircode/email/TupleAccountEx.java | 2 + 4 files changed, 76 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 7546a25c6f..4212eed15f 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -178,6 +178,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB DrawerItem item = drawerArray.getItem(position); if (item == null) return; + Log.i("Navigation id=" + item.getId() + " menu=" + item.getMenuId()); switch (item.getMenuId()) { case R.string.menu_answers: @@ -220,6 +221,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB long account = item.getId(); if (account > 0) onMenuFolders(account); + else + onMenuOutbox(); } drawerLayout.closeDrawer(drawerList); @@ -296,6 +299,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB !Objects.equals(account.color, other.color) || !Objects.equals(account.state, other.state) || account.unseen != other.unseen || + account.unsent != other.unsent || account.operations != other.operations) { changed = true; break; @@ -310,7 +314,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB List items = new ArrayList<>(); - int operations = 0; + int unsent = 0; + int pending = 0; for (TupleAccountEx account : accounts) { String title; if (account.unseen > 0) @@ -322,35 +327,44 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB ? account.primary ? R.drawable.baseline_folder_special_24 : R.drawable.baseline_folder_24 : R.drawable.baseline_folder_open_24, title, account.color, account.unseen > 0)); - operations += account.operations; + unsent += account.unsent; + pending += account.operations; } items.add(new DrawerItem(-1)); - items.add(new DrawerItem(-2, R.drawable.baseline_reply_24, R.string.menu_answers)); - String title; - if (operations == 0) - title = getString(R.string.menu_operations); + String outbox; + if (unsent > 0) + outbox = getString(R.string.title_name_count, getString(R.string.title_folder_outbox), nf.format(unsent)); + else + outbox = getString(R.string.title_folder_outbox); + items.add(new DrawerItem(-2, R.drawable.baseline_send_24, outbox, null, unsent > 0)); + + items.add(new DrawerItem(-3, R.drawable.baseline_reply_24, R.string.menu_answers)); + + String operations; + if (pending == 0) + operations = getString(R.string.menu_operations); else - title = getString(R.string.title_name_count, + operations = getString(R.string.title_name_count, getString(R.string.menu_operations), - nf.format(operations)); - items.add(new DrawerItem(-3, R.string.menu_operations, R.drawable.baseline_list_24, title, operations > 0)); + nf.format(pending)); + items.add(new DrawerItem(-4, R.string.menu_operations, R.drawable.baseline_list_24, operations, pending > 0)); - items.add(new DrawerItem(-4, R.drawable.baseline_settings_applications_24, R.string.menu_setup)); - items.add(new DrawerItem(-5)); - items.add(new DrawerItem(-6, R.drawable.baseline_help_24, R.string.menu_legend)); + items.add(new DrawerItem(-5, R.drawable.baseline_settings_applications_24, R.string.menu_setup)); + items.add(new DrawerItem(-6)); + items.add(new DrawerItem(-7, R.drawable.baseline_help_24, R.string.menu_legend)); if (Helper.getIntentFAQ().resolveActivity(getPackageManager()) != null) - items.add(new DrawerItem(-7, R.drawable.baseline_question_answer_24, R.string.menu_faq)); + items.add(new DrawerItem(-8, R.drawable.baseline_question_answer_24, R.string.menu_faq)); if (BuildConfig.BETA_RELEASE) - items.add(new DrawerItem(-8, R.drawable.baseline_report_problem_24, R.string.menu_issue)); + items.add(new DrawerItem(-9, R.drawable.baseline_report_problem_24, R.string.menu_issue)); if (Helper.getIntentPrivacy().resolveActivity(getPackageManager()) != null) - items.add(new DrawerItem(-9, R.drawable.baseline_account_box_24, R.string.menu_privacy)); + items.add(new DrawerItem(-10, R.drawable.baseline_account_box_24, R.string.menu_privacy)); - items.add(new DrawerItem(-10, R.drawable.baseline_info_24, R.string.menu_about)); + items.add(new DrawerItem(-11, R.drawable.baseline_info_24, R.string.menu_about)); boolean pro = (getIntentPro() == null || getIntentPro().resolveActivity(getPackageManager()) != null); boolean invite = (getIntentInvite().resolveActivity(getPackageManager()) != null); @@ -358,19 +372,19 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB boolean other = (getIntentOtherApps().resolveActivity(getPackageManager()) != null); if (pro || invite || rate || other) - items.add(new DrawerItem(-11)); + items.add(new DrawerItem(-12)); if (pro) - items.add(new DrawerItem(-12, R.drawable.baseline_monetization_on_24, R.string.menu_pro)); + items.add(new DrawerItem(-13, R.drawable.baseline_monetization_on_24, R.string.menu_pro)); if (invite) - items.add(new DrawerItem(-13, R.drawable.baseline_people_24, R.string.menu_invite)); + items.add(new DrawerItem(-14, R.drawable.baseline_people_24, R.string.menu_invite)); if (rate) - items.add(new DrawerItem(-14, R.drawable.baseline_star_24, R.string.menu_rate)); + items.add(new DrawerItem(-15, R.drawable.baseline_star_24, R.string.menu_rate)); if (other) - items.add(new DrawerItem(-15, R.drawable.baseline_get_app_24, R.string.menu_other)); + items.add(new DrawerItem(-16, R.drawable.baseline_get_app_24, R.string.menu_other)); drawerArray.set(items); } @@ -844,6 +858,36 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB }.execute(this, args, "menu:inbox"); } + private void onMenuOutbox() { + Bundle args = new Bundle(); + + new SimpleTask() { + @Override + protected Long onExecute(Context context, Bundle args) { + DB db = DB.getInstance(context); + EntityFolder outbox = db.folder().getOutbox(); + return (outbox == null ? -1 : outbox.id); + } + + @Override + protected void onExecuted(Bundle args, Long folder) { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) + getSupportFragmentManager().popBackStack("unified", 0); + + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(ActivityView.this); + lbm.sendBroadcast( + new Intent(ActivityView.ACTION_VIEW_MESSAGES) + .putExtra("account", -1) + .putExtra("folder", folder)); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(ActivityView.this, ActivityView.this, ex); + } + }.execute(this, args, "menu:inbox"); + } + private void onMenuAnswers() { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) getSupportFragmentManager().popBackStack("answers", FragmentManager.POP_BACK_STACK_INCLUSIVE); diff --git a/app/src/main/java/eu/faircode/email/DaoAccount.java b/app/src/main/java/eu/faircode/email/DaoAccount.java index 7cadd16336..4612788c39 100644 --- a/app/src/main/java/eu/faircode/email/DaoAccount.java +++ b/app/src/main/java/eu/faircode/email/DaoAccount.java @@ -55,6 +55,13 @@ public interface DaoAccount { " AND folder.type <> '" + EntityFolder.OUTBOX + "'" + " AND NOT ui_seen" + " AND NOT ui_hide) AS unseen" + + ", (SELECT COUNT(message.id)" + + " FROM message" + + " JOIN folder ON folder.id = message.folder" + + " WHERE message.account = account.id" + + " AND folder.type = '" + EntityFolder.OUTBOX + "'" + + " AND NOT ui_seen" + + " AND NOT ui_hide) AS unsent" + " FROM account" + " LEFT JOIN operation ON operation.account = account.id" + " WHERE synchronize" + diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index ae598012d0..6d1b2dd1d8 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -62,11 +62,8 @@ public interface DaoFolder { " LEFT JOIN message ON message.folder = folder.id AND NOT message.ui_hide" + " WHERE CASE WHEN :account IS NULL" + " THEN folder.unified AND account.synchronize" + - " ELSE" + - " (folder.account = :account" + - " AND account.synchronize" + - " AND CASE WHEN :parent IS NULL THEN folder.parent IS NULL ELSE folder.parent = :parent END)" + - " OR (folder.account IS NULL AND :parent IS NULL)" + + " ELSE folder.account = :account AND account.synchronize" + + " AND CASE WHEN :parent IS NULL THEN folder.parent IS NULL ELSE folder.parent = :parent END" + " END" + " GROUP BY folder.id") LiveData> liveFolders(Long account, Long parent); diff --git a/app/src/main/java/eu/faircode/email/TupleAccountEx.java b/app/src/main/java/eu/faircode/email/TupleAccountEx.java index 3140faeb0e..2469e6c6f5 100644 --- a/app/src/main/java/eu/faircode/email/TupleAccountEx.java +++ b/app/src/main/java/eu/faircode/email/TupleAccountEx.java @@ -21,6 +21,7 @@ package eu.faircode.email; public class TupleAccountEx extends EntityAccount { public int unseen; + public int unsent; public int operations; @Override @@ -29,6 +30,7 @@ public class TupleAccountEx extends EntityAccount { TupleAccountEx other = (TupleAccountEx) obj; return (super.equals(obj) && this.unseen == other.unseen && + this.unsent == other.unsent && this.operations == other.operations); } else return false;