From ed98ea5e6f29a23acb4b89331f06c06b63c30a05 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 30 Sep 2019 09:15:47 +0200 Subject: [PATCH] Added empty spam --- .../java/eu/faircode/email/AdapterFolder.java | 22 +++++-- .../eu/faircode/email/FragmentFolders.java | 59 ++++++++----------- .../eu/faircode/email/FragmentMessages.java | 53 +++++++++++------ app/src/main/res/menu/menu_messages.xml | 6 ++ app/src/main/res/values/strings.xml | 2 +- 5 files changed, 84 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index 7410b52e12..edf6a2324f 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -390,6 +390,8 @@ public class AdapterFolder extends RecyclerView.Adapter() { @Override protected Void onExecute(Context context, Bundle args) { @@ -518,11 +508,7 @@ public class FragmentFolders extends FragmentBase { }.execute(this, args, "folder:sync"); } - private void onDeleteLocal(long folder, boolean browsed) { - Bundle args = new Bundle(); - args.putLong("id", folder); - args.putBoolean("browsed", browsed); - + private void onDeleteLocal(Bundle args) { new SimpleTask() { @Override protected void onPreExecute(Bundle args) { @@ -536,13 +522,15 @@ public class FragmentFolders extends FragmentBase { @Override protected Void onExecute(Context context, Bundle args) { - long id = args.getLong("id"); + long fid = args.getLong("folder"); boolean browsed = args.getBoolean("browsed"); Log.i("Delete local messages browsed=" + browsed); + + DB db = DB.getInstance(context); if (browsed) - DB.getInstance(context).message().deleteBrowsedMessages(id); + db.message().deleteBrowsedMessages(fid); else - DB.getInstance(context).message().deleteLocalMessages(id); + db.message().deleteLocalMessages(fid); return null; } @@ -553,20 +541,25 @@ public class FragmentFolders extends FragmentBase { }.execute(this, args, "folder:delete:local"); } - private void onEmptyTrash(long folder) { - Bundle args = new Bundle(); - args.putLong("folder", folder); - + private void onEmptyFolder(Bundle args) { new SimpleTask() { @Override protected Void onExecute(Context context, Bundle args) { - long folder = args.getLong("folder"); + long fid = args.getLong("folder"); + String type = args.getString("type"); DB db = DB.getInstance(context); try { db.beginTransaction(); - List ids = db.message().getMessageByFolder(folder); + EntityFolder folder = db.folder().getFolder(fid); + if (folder == null) + return null; + + if (!folder.type.equals(type)) + throw new IllegalStateException("Invalid folder type=" + type); + + List ids = db.message().getMessageByFolder(folder.id); for (Long id : ids) { EntityMessage message = db.message().getMessage(id); if (message.uid != null || !TextUtils.isEmpty(message.msgid)) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 8504f5370b..822d55f38b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -262,7 +262,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. private static final int REQUEST_SEARCH = 18; private static final int REQUEST_ACCOUNT = 19; static final int REQUEST_MESSAGE_PROPERTY = 20; - private static final int REQUEST_EMPTY_TRASH = 21; + private static final int REQUEST_EMPTY_FOLDER = 21; static final String ACTION_STORE_RAW = BuildConfig.APPLICATION_ID + ".STORE_RAW"; static final String ACTION_DECRYPT = BuildConfig.APPLICATION_ID + ".DECRYPT"; @@ -2597,6 +2597,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. (viewType == AdapterMessage.ViewType.UNIFIED || viewType == AdapterMessage.ViewType.FOLDER)); menu.findItem(R.id.menu_empty_trash).setVisible( viewType == AdapterMessage.ViewType.FOLDER && EntityFolder.TRASH.equals(type)); + menu.findItem(R.id.menu_empty_spam).setVisible( + viewType == AdapterMessage.ViewType.FOLDER && EntityFolder.JUNK.equals(type)); menu.findItem(R.id.menu_force_sync).setVisible(viewType == AdapterMessage.ViewType.UNIFIED); @@ -2687,7 +2689,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. return true; case R.id.menu_empty_trash: - onMenuEmptyTrash(); + onMenuEmpty(EntityFolder.TRASH); + return true; + + case R.id.menu_empty_spam: + onMenuEmpty(EntityFolder.JUNK); return true; case R.id.menu_force_sync: @@ -2803,14 +2809,21 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. }); } - private void onMenuEmptyTrash() { + private void onMenuEmpty(String type) { Bundle aargs = new Bundle(); - aargs.putString("question", getString(R.string.title_empty_trash_ask)); + if (EntityFolder.TRASH.equals(type)) + aargs.putString("question", getString(R.string.title_empty_trash_ask)); + else if (EntityFolder.JUNK.equals(type)) + aargs.putString("question", getString(R.string.title_empty_spam_ask)); + else + throw new IllegalArgumentException("Invalid folder type=" + type); + aargs.putLong("folder", folder); + aargs.putString("type", type); FragmentDialogAsk ask = new FragmentDialogAsk(); ask.setArguments(aargs); - ask.setTargetFragment(this, FragmentMessages.REQUEST_EMPTY_TRASH); - ask.show(getFragmentManager(), "messages:empty_trash"); + ask.setTargetFragment(this, FragmentMessages.REQUEST_EMPTY_FOLDER); + ask.show(getFragmentManager(), "messages:empty"); } private void onMenuForceSync() { @@ -3641,7 +3654,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. break; case REQUEST_MESSAGES_DELETE: if (resultCode == RESULT_OK && data != null) - onDelete(data.getBundleExtra("args").getLongArray("ids")); + onDelete(data.getBundleExtra("args")); break; case REQUEST_MESSAGE_JUNK: if (resultCode == RESULT_OK && data != null) @@ -3716,9 +3729,9 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (resultCode == RESULT_OK) onPropertySet(data.getBundleExtra("args")); break; - case REQUEST_EMPTY_TRASH: + case REQUEST_EMPTY_FOLDER: if (resultCode == RESULT_OK) - onEmptyTrash(); + onEmptyFolder(data.getBundleExtra("args")); break; } } catch (Throwable ex) { @@ -4032,10 +4045,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. }.execute(this, args, "message:delete"); } - private void onDelete(long[] ids) { - Bundle args = new Bundle(); - args.putLongArray("ids", ids); - + private void onDelete(Bundle args) { selectionTracker.clearSelection(); new SimpleTask() { @@ -4456,20 +4466,25 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. iProperties.setValue(name, id, value); } - private void onEmptyTrash() { - Bundle args = new Bundle(); - args.putLong("folder", folder); - + private void onEmptyFolder(Bundle args) { new SimpleTask() { @Override protected Void onExecute(Context context, Bundle args) { - long folder = args.getLong("folder"); + long fid = args.getLong("folder"); + String type = args.getString("type"); DB db = DB.getInstance(context); try { db.beginTransaction(); - List ids = db.message().getMessageByFolder(folder); + EntityFolder folder = db.folder().getFolder(fid); + if (folder == null) + return null; + + if (!folder.type.equals(type)) + throw new IllegalStateException("Invalid folder type=" + type); + + List ids = db.message().getMessageByFolder(folder.id); for (Long id : ids) { EntityMessage message = db.message().getMessage(id); if (message.uid != null || !TextUtils.isEmpty(message.msgid)) diff --git a/app/src/main/res/menu/menu_messages.xml b/app/src/main/res/menu/menu_messages.xml index 8771ea380c..20272b7733 100644 --- a/app/src/main/res/menu/menu_messages.xml +++ b/app/src/main/res/menu/menu_messages.xml @@ -105,6 +105,12 @@ android:title="@string/title_empty_trash" app:showAsAction="never" /> + + Create sub folder Delete all trashed messages permanently? - Move all spam to the trash folder? + Delete all spam messages permanently? Delete operations with an error message? Delete all local contacts? No pending operations