From dd8bd36712218096a02ad6fc07f69c254a8def59 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 23 Jun 2022 19:41:18 +0200 Subject: [PATCH] Added edit account color to folder list menu --- .../java/eu/faircode/email/DaoAccount.java | 3 + .../eu/faircode/email/FragmentFolders.java | 71 +++++++++++++++++++ app/src/main/res/menu/menu_folders.xml | 6 ++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 81 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/DaoAccount.java b/app/src/main/java/eu/faircode/email/DaoAccount.java index 437b8b9a5e..bcb37711c9 100644 --- a/app/src/main/java/eu/faircode/email/DaoAccount.java +++ b/app/src/main/java/eu/faircode/email/DaoAccount.java @@ -216,6 +216,9 @@ public interface DaoAccount { @Query("UPDATE account SET name = :name WHERE id = :id AND NOT (name IS :name)") int setAccountName(long id, String name); + @Query("UPDATE account SET color = :color WHERE id = :id AND NOT (color IS :color)") + int setAccountColor(long id, Integer color); + @Query("UPDATE account" + " SET password = :password, auth_type = :auth_type" + " WHERE id = :id" + diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index a0779532c1..723a7b989c 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -134,6 +134,7 @@ public class FragmentFolders extends FragmentBase { static final int REQUEST_EXECUTE_RULES = 4; static final int REQUEST_EXPORT_MESSAGES = 5; static final int REQUEST_EDIT_ACCOUNT_NAME = 6; + static final int REQUEST_EDIT_ACCOUNT_COLOR = 7; private static final long EXPORT_PROGRESS_INTERVAL = 5000L; // milliseconds @@ -690,6 +691,7 @@ public class FragmentFolders extends FragmentBase { menu.findItem(R.id.menu_sort_unread_atop).setChecked(sort_unread_atop); menu.findItem(R.id.menu_apply_all).setVisible(account >= 0 && imap); menu.findItem(R.id.menu_edit_account_name).setVisible(account >= 0); + menu.findItem(R.id.menu_edit_account_color).setVisible(account >= 0); super.onPrepareOptionsMenu(menu); } @@ -730,6 +732,9 @@ public class FragmentFolders extends FragmentBase { } else if (itemId == R.id.menu_edit_account_name) { onMenuEditAccount(); return true; + } else if (itemId == R.id.menu_edit_account_color) { + onMenuEditColor(); + return true; } else if (itemId == R.id.menu_force_sync) { onMenuForceSync(); return true; @@ -877,6 +882,41 @@ public class FragmentFolders extends FragmentBase { }.execute(this, args, "account:name"); } + private void onMenuEditColor() { + Bundle args = new Bundle(); + args.putLong("id", account); + + new SimpleTask() { + @Override + protected EntityAccount onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + + DB db = DB.getInstance(context); + return db.account().getAccount(id); + } + + @Override + protected void onExecuted(Bundle args, EntityAccount account) { + if (account == null) + return; + + args.putInt("color", account.color == null ? Color.TRANSPARENT : account.color); + args.putString("title", getString(R.string.title_color)); + args.putBoolean("reset", true); + + FragmentDialogColor fragment = new FragmentDialogColor(); + fragment.setArguments(args); + fragment.setTargetFragment(FragmentFolders.this, REQUEST_EDIT_ACCOUNT_COLOR); + fragment.show(getParentFragmentManager(), "edit:color"); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "edit:color"); + } + private void onMenuForceSync() { refresh(true); ToastEx.makeText(getContext(), R.string.title_executing, Toast.LENGTH_LONG).show(); @@ -912,6 +952,10 @@ public class FragmentFolders extends FragmentBase { if (resultCode == RESULT_OK && data != null) onEditAccountName(data.getBundleExtra("args")); break; + case REQUEST_EDIT_ACCOUNT_COLOR: + if (resultCode == RESULT_OK && data != null) + onEditAccountColor(data.getBundleExtra("args")); + break; } } catch (Throwable ex) { Log.e(ex); @@ -1387,6 +1431,33 @@ public class FragmentFolders extends FragmentBase { }.execute(this, args, "edit:name"); } + private void onEditAccountColor(Bundle args) { + if (!ActivityBilling.isPro(getContext())) { + startActivity(new Intent(getContext(), ActivityBilling.class)); + return; + } + + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + Integer color = args.getInt("color"); + + if (color == Color.TRANSPARENT) + color = null; + + DB db = DB.getInstance(context); + db.account().setAccountColor(id, color); + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "edit:color"); + } + public static class FragmentDialogApply extends FragmentDialogBase { @NonNull @Override diff --git a/app/src/main/res/menu/menu_folders.xml b/app/src/main/res/menu/menu_folders.xml index d5d8e4346d..29dc285fed 100644 --- a/app/src/main/res/menu/menu_folders.xml +++ b/app/src/main/res/menu/menu_folders.xml @@ -75,6 +75,12 @@ + + + + Search for folder Apply to all Edit account name + Edit account color Hide folder Hide folder if all messages are read Only in the folder list shown on the start screen