Added empty spam

pull/162/head
M66B 6 years ago
parent c38330b35d
commit ed98ea5e6f

@ -390,6 +390,8 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
if (EntityFolder.TRASH.equals(folder.type))
popupMenu.getMenu().add(Menu.NONE, R.string.title_empty_trash, 5, R.string.title_empty_trash);
else if (EntityFolder.JUNK.equals(folder.type))
popupMenu.getMenu().add(Menu.NONE, R.string.title_empty_spam, 5, R.string.title_empty_spam);
}
if (folder.account != null) {
@ -465,7 +467,11 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
return true;
case R.string.title_empty_trash:
onActionEmptyTrash();
onActionEmpty(EntityFolder.TRASH);
return true;
case R.string.title_empty_spam:
onActionEmpty(EntityFolder.JUNK);
return true;
case R.string.title_edit_rules:
@ -602,15 +608,21 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
ask.show(parentFragment.getFragmentManager(), "folder:delete_local");
}
private void onActionEmptyTrash() {
private void onActionEmpty(String type) {
Bundle aargs = new Bundle();
aargs.putString("question", context.getString(R.string.title_empty_trash_ask));
if (EntityFolder.TRASH.equals(type))
aargs.putString("question", context.getString(R.string.title_empty_trash_ask));
else if (EntityFolder.JUNK.equals(type))
aargs.putString("question", context.getString(R.string.title_empty_spam_ask));
else
throw new IllegalArgumentException("Invalid folder type=" + type);
aargs.putLong("folder", folder.id);
aargs.putString("type", type);
FragmentDialogAsk ask = new FragmentDialogAsk();
ask.setArguments(aargs);
ask.setTargetFragment(parentFragment, FragmentFolders.REQUEST_EMPTY_TRASH);
ask.show(parentFragment.getFragmentManager(), "folder:empty_trash");
ask.setTargetFragment(parentFragment, FragmentFolders.REQUEST_EMPTY_FOLDER);
ask.show(parentFragment.getFragmentManager(), "folder:empty");
}
private void onActionEditRules() {

@ -77,7 +77,7 @@ public class FragmentFolders extends FragmentBase {
static final int REQUEST_SYNC = 1;
static final int REQUEST_DELETE_LOCAL = 2;
static final int REQUEST_EMPTY_TRASH = 3;
static final int REQUEST_EMPTY_FOLDER = 3;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -425,22 +425,16 @@ public class FragmentFolders extends FragmentBase {
try {
switch (requestCode) {
case REQUEST_SYNC:
if (resultCode == RESULT_OK && data != null) {
Bundle args = data.getBundleExtra("args");
onSync(args.getLong("folder"), args.getBoolean("all"));
}
if (resultCode == RESULT_OK && data != null)
onSync(data.getBundleExtra("args"));
break;
case REQUEST_DELETE_LOCAL:
if (resultCode == RESULT_OK && data != null) {
Bundle args = data.getBundleExtra("args");
onDeleteLocal(args.getLong("folder"), args.getBoolean("browsed"));
}
if (resultCode == RESULT_OK && data != null)
onDeleteLocal(data.getBundleExtra("args"));
break;
case REQUEST_EMPTY_TRASH:
if (resultCode == RESULT_OK && data != null) {
Bundle args = data.getBundleExtra("args");
onEmptyTrash(args.getLong("folder"));
}
case REQUEST_EMPTY_FOLDER:
if (resultCode == RESULT_OK && data != null)
onEmptyFolder(data.getBundleExtra("args"));
break;
}
} catch (Throwable ex) {
@ -448,11 +442,7 @@ public class FragmentFolders extends FragmentBase {
}
}
private void onSync(long folder, boolean all) {
Bundle args = new Bundle();
args.putBoolean("all", all);
args.putLong("folder", folder);
private void onSync(Bundle args) {
new SimpleTask<Void>() {
@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<Void>() {
@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<Void>() {
@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<Long> 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<Long> ids = db.message().getMessageByFolder(folder.id);
for (Long id : ids) {
EntityMessage message = db.message().getMessage(id);
if (message.uid != null || !TextUtils.isEmpty(message.msgid))

@ -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<Void>() {
@ -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<Void>() {
@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<Long> 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<Long> ids = db.message().getMessageByFolder(folder.id);
for (Long id : ids) {
EntityMessage message = db.message().getMessage(id);
if (message.uid != null || !TextUtils.isEmpty(message.msgid))

@ -105,6 +105,12 @@
android:title="@string/title_empty_trash"
app:showAsAction="never" />
<item
android:id="@+id/menu_empty_spam"
android:icon="@drawable/baseline_delete_24"
android:title="@string/title_empty_spam"
app:showAsAction="never" />
<item
android:id="@+id/menu_force_sync"
android:icon="@drawable/baseline_sync_24"

@ -448,7 +448,7 @@
<string name="title_create_sub_folder">Create sub folder</string>
<string name="title_empty_trash_ask">Delete all trashed messages permanently?</string>
<string name="title_empty_spam_ask">Move all spam to the trash folder?</string>
<string name="title_empty_spam_ask">Delete all spam messages permanently?</string>
<string name="title_delete_operation">Delete operations with an error message?</string>
<string name="title_delete_contacts">Delete all local contacts?</string>
<string name="title_no_operations">No pending operations</string>

Loading…
Cancel
Save