diff --git a/app/src/main/java/eu/faircode/email/DaoAccount.java b/app/src/main/java/eu/faircode/email/DaoAccount.java index c8e12a642e..6aa4020fe4 100644 --- a/app/src/main/java/eu/faircode/email/DaoAccount.java +++ b/app/src/main/java/eu/faircode/email/DaoAccount.java @@ -197,6 +197,9 @@ public interface DaoAccount { @Query("UPDATE account SET state = :state WHERE id = :id AND NOT (state IS :state)") int setAccountState(long id, String state); + @Query("UPDATE account SET name = :name WHERE id = :id AND NOT (name IS :name)") + int setAccountName(long id, String name); + @Query("UPDATE account SET password = :password WHERE id = :id AND NOT (password IS :password)") int setAccountPassword(long id, String password); diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index 06daa51348..5956fde3c7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -119,6 +119,7 @@ public class FragmentFolders extends FragmentBase { static final int REQUEST_DELETE_FOLDER = 3; static final int REQUEST_EXECUTE_RULES = 4; static final int REQUEST_EXPORT_MESSAGES = 5; + static final int REQUEST_EDIT_ACCOUNT_NAME = 6; private static final long EXPORT_PROGRESS_INTERVAL = 5000L; // milliseconds @@ -571,6 +572,7 @@ public class FragmentFolders extends FragmentBase { menu.findItem(R.id.menu_subscribed_only).setVisible(subscriptions); 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); super.onPrepareOptionsMenu(menu); } @@ -608,6 +610,9 @@ public class FragmentFolders extends FragmentBase { } else if (itemId == R.id.menu_apply_all) { onMenuApplyToAll(); return true; + } else if (itemId == R.id.menu_edit_account_name) { + onMenuEditAccount(); + return true; } else if (itemId == R.id.menu_force_sync) { onMenuForceSync(); return true; @@ -719,6 +724,38 @@ public class FragmentFolders extends FragmentBase { fragment.show(getParentFragmentManager(), "folders:apply"); } + private void onMenuEditAccount() { + Bundle args = new Bundle(); + args.putLong("id", account); + + new SimpleTask() { + @Override + protected EntityAccount onExecute(Context context, Bundle args) throws Throwable { + 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.putString("name", account.name); + + FragmentDialogEditName fragment = new FragmentDialogEditName(); + fragment.setArguments(args); + fragment.setTargetFragment(FragmentFolders.this, REQUEST_EDIT_ACCOUNT_NAME); + fragment.show(getParentFragmentManager(), "account:name"); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "account:name"); + } + private void onMenuForceSync() { refresh(true); ToastEx.makeText(getContext(), R.string.title_executing, Toast.LENGTH_LONG).show(); @@ -750,6 +787,10 @@ public class FragmentFolders extends FragmentBase { if (resultCode == RESULT_OK && data != null) onExportMessages(data.getData()); break; + case REQUEST_EDIT_ACCOUNT_NAME: + if (resultCode == RESULT_OK && data != null) + onEditAccountName(data.getBundleExtra("args")); + break; } } catch (Throwable ex) { Log.e(ex); @@ -1130,6 +1171,29 @@ public class FragmentFolders extends FragmentBase { }.execute(this, args, "folder:export"); } + private void onEditAccountName(Bundle args) { + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + String name = args.getString("name"); + + if (TextUtils.isEmpty(name)) + return null; + + DB db = DB.getInstance(context); + db.account().setAccountName(id, name); + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "edit:name"); + } + 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 cc15dca676..34f581234c 100644 --- a/app/src/main/res/menu/menu_folders.xml +++ b/app/src/main/res/menu/menu_folders.xml @@ -69,6 +69,12 @@ + + + + Sort unread on top Search for folder Apply to all + Edit account name Hide folder Show in unified inbox Show in navigation menu