diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index bf302f0531..95bdf607e1 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -126,6 +126,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB static final String ACTION_STORE_ATTACHMENT = BuildConfig.APPLICATION_ID + ".STORE_ATTACHMENT"; static final String ACTION_DECRYPT = BuildConfig.APPLICATION_ID + ".DECRYPT"; static final String ACTION_SHOW_PRO = BuildConfig.APPLICATION_ID + ".SHOW_PRO"; + static final String ACTION_SHOW_LEGEND = BuildConfig.APPLICATION_ID + ".SHOW_LEGEND"; static final String UPDATE_LATEST_API = "https://api.github.com/repos/M66B/open-source-email/releases/latest"; static final long UPDATE_INTERVAL = 12 * 3600 * 1000L; // milliseconds @@ -350,6 +351,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB iff.addAction(ACTION_STORE_ATTACHMENT); iff.addAction(ACTION_DECRYPT); iff.addAction(ACTION_SHOW_PRO); + iff.addAction(ACTION_SHOW_LEGEND); lbm.registerReceiver(receiver, iff); if (!pgpService.isBound()) @@ -1060,6 +1062,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB onDecrypt(intent); else if (ACTION_SHOW_PRO.equals(intent.getAction())) onShowPro(intent); + else if (ACTION_SHOW_LEGEND.equals(intent.getAction())) + onMenuLegend(); } }; diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index 680ea00130..df3728a6a8 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -71,6 +71,7 @@ public class AdapterFolder extends RecyclerView.Adapter() { - @Override - protected Void onLoad(Context context, Bundle args) { - long id = args.getLong("id"); - boolean outbox = args.getBoolean("outbox"); - Log.i(Helper.TAG, "Delete local messages outbox=" + outbox); - if (outbox) - DB.getInstance(context).message().deleteSeenMessages(id); - else - DB.getInstance(context).message().deleteLocalMessages(id); - return null; - } - - @Override - public void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(context, ex); - } - }.load(context, owner, args); - + OnActionDeleteLocal(); break; case action_empty_trash: - new DialogBuilderLifecycle(context, owner) - .setMessage(R.string.title_empty_trash_ask) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - Bundle args = new Bundle(); - args.putLong("id", folder.id); - - new SimpleTask() { - @Override - protected Void onLoad(Context context, Bundle args) { - long id = args.getLong("id"); - - DB db = DB.getInstance(context); - try { - db.beginTransaction(); - - for (Long mid : db.message().getMessageByFolder(id)) { - EntityMessage message = db.message().getMessage(mid); - db.message().setMessageUiHide(message.id, true); - EntityOperation.queue(db, message, EntityOperation.DELETE); - } - - db.setTransactionSuccessful(); - } finally { - db.endTransaction(); - } - - EntityOperation.process(context); - - return null; - } - - @Override - protected void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(context, ex); - } - }.load(context, owner, args); - } - }) - .setNegativeButton(android.R.string.cancel, null) - .show(); + onActionEmptyTrash(); break; case action_edit_properties: - lbm.sendBroadcast( - new Intent(ActivityView.ACTION_EDIT_FOLDER) - .putExtra("id", folder.id)); + onActionEditProperties(); + break; + + case action_legend: + onActionLegend(); break; } return true; } + + private void onActionSynchronizeNow() { + Log.i(Helper.TAG, folder.name + " requesting sync"); + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); + lbm.sendBroadcast( + new Intent(ServiceSynchronize.ACTION_SYNCHRONIZE_FOLDER) + .setType("account/" + (folder.account == null ? "outbox" : Long.toString(folder.account))) + .putExtra("folder", folder.id)); + } + + private void OnActionDeleteLocal() { + Bundle args = new Bundle(); + args.putLong("id", folder.id); + args.putBoolean("outbox", folder.account == null); + + new SimpleTask() { + @Override + protected Void onLoad(Context context, Bundle args) { + long id = args.getLong("id"); + boolean outbox = args.getBoolean("outbox"); + Log.i(Helper.TAG, "Delete local messages outbox=" + outbox); + if (outbox) + DB.getInstance(context).message().deleteSeenMessages(id); + else + DB.getInstance(context).message().deleteLocalMessages(id); + return null; + } + + @Override + public void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(context, ex); + } + }.load(context, owner, args); + } + + private void onActionEmptyTrash() { + new DialogBuilderLifecycle(context, owner) + .setMessage(R.string.title_empty_trash_ask) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + Bundle args = new Bundle(); + args.putLong("id", folder.id); + + new SimpleTask() { + @Override + protected Void onLoad(Context context, Bundle args) { + long id = args.getLong("id"); + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + for (Long mid : db.message().getMessageByFolder(id)) { + EntityMessage message = db.message().getMessage(mid); + db.message().setMessageUiHide(message.id, true); + EntityOperation.queue(db, message, EntityOperation.DELETE); + } + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + EntityOperation.process(context); + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(context, ex); + } + }.load(context, owner, args); + } + }) + .setNegativeButton(android.R.string.cancel, null) + .show(); + } + + private void onActionEditProperties() { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); + lbm.sendBroadcast( + new Intent(ActivityView.ACTION_EDIT_FOLDER) + .putExtra("id", folder.id)); + } + + private void onActionLegend() { + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); + lbm.sendBroadcast(new Intent(ActivityView.ACTION_SHOW_LEGEND)); + } }); popupMenu.show(); diff --git a/app/src/main/res/layout/fragment_legend.xml b/app/src/main/res/layout/fragment_legend.xml index 0097660043..0c425e892a 100644 --- a/app/src/main/res/layout/fragment_legend.xml +++ b/app/src/main/res/layout/fragment_legend.xml @@ -388,5 +388,77 @@ app:layout_constraintStart_toEndOf="@id/ivClosing" app:layout_constraintTop_toTopOf="@id/ivClosing" /> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d04f74bb67..8083beb89a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -313,6 +313,8 @@ Synchronizing Downloading Closing + Number of days to synchronize / to keep messages + Number of message bodies downloaded / headers fetched Long press for options If you have a question or a problem, please use the support menu to get help