diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index 280f7c2ac7..033933b876 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -462,6 +462,7 @@ public class AdapterFolder extends RecyclerView.Adapter 0) + popupMenu.getMenu().add(Menu.NONE, R.string.title_synchronize_childs, order++, R.string.title_synchronize_childs); + if (folder.selectable) { if (folder.account != null && folder.accountProtocol == EntityAccount.TYPE_IMAP) { - popupMenu.getMenu().add(Menu.NONE, R.string.title_synchronize_more, 2, R.string.title_synchronize_more); + popupMenu.getMenu().add(Menu.NONE, R.string.title_synchronize_more, order++, R.string.title_synchronize_more); - popupMenu.getMenu().add(Menu.NONE, R.string.title_delete_local, 3, R.string.title_delete_local); - popupMenu.getMenu().add(Menu.NONE, R.string.title_delete_browsed, 4, R.string.title_delete_browsed); + popupMenu.getMenu().add(Menu.NONE, R.string.title_delete_local, order++, R.string.title_delete_local); + popupMenu.getMenu().add(Menu.NONE, R.string.title_delete_browsed, order++, R.string.title_delete_browsed); } if (EntityFolder.TRASH.equals(folder.type)) - popupMenu.getMenu().add(Menu.NONE, R.string.title_empty_trash, 5, R.string.title_empty_trash); + popupMenu.getMenu().add(Menu.NONE, R.string.title_empty_trash, order++, 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); + popupMenu.getMenu().add(Menu.NONE, R.string.title_empty_spam, order++, R.string.title_empty_spam); if (folder.account != null) { - popupMenu.getMenu().add(Menu.NONE, R.string.title_unified_folder, 6, R.string.title_unified_folder) + popupMenu.getMenu().add(Menu.NONE, R.string.title_unified_folder, order++, R.string.title_unified_folder) .setCheckable(true).setChecked(folder.unified); - popupMenu.getMenu().add(Menu.NONE, R.string.title_navigation_folder, 7, R.string.title_navigation_folder) + popupMenu.getMenu().add(Menu.NONE, R.string.title_navigation_folder, order++, R.string.title_navigation_folder) .setCheckable(true).setChecked(folder.navigation); - popupMenu.getMenu().add(Menu.NONE, R.string.title_notify_folder, 8, R.string.title_notify_folder) + popupMenu.getMenu().add(Menu.NONE, R.string.title_notify_folder, order++, R.string.title_notify_folder) .setCheckable(true).setChecked(folder.notify); } if (folder.account != null && folder.accountProtocol == EntityAccount.TYPE_IMAP) { boolean subscriptions = prefs.getBoolean("subscriptions", false); if (subscriptions && !folder.read_only) - popupMenu.getMenu().add(Menu.NONE, R.string.title_subscribe, 9, R.string.title_subscribe) + popupMenu.getMenu().add(Menu.NONE, R.string.title_subscribe, order++, R.string.title_subscribe) .setCheckable(true).setChecked(folder.subscribed != null && folder.subscribed); - popupMenu.getMenu().add(Menu.NONE, R.string.title_synchronize_enabled, 10, R.string.title_synchronize_enabled) + popupMenu.getMenu().add(Menu.NONE, R.string.title_synchronize_enabled, order++, R.string.title_synchronize_enabled) .setCheckable(true).setChecked(folder.synchronize); if (!folder.read_only) - popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_rules, 11, R.string.title_edit_rules); - popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_properties, 12, R.string.title_edit_properties); + popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_rules, order++, R.string.title_edit_rules); + popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_properties, order++, R.string.title_edit_properties); if (folder.notify && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { String channelId = EntityFolder.getNotificationChannelId(folder.id); NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationChannel channel = nm.getNotificationChannel(channelId); if (channel == null) - popupMenu.getMenu().add(Menu.NONE, R.string.title_create_channel, 13, R.string.title_create_channel); + popupMenu.getMenu().add(Menu.NONE, R.string.title_create_channel, order++, R.string.title_create_channel); else { - popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_channel, 14, R.string.title_edit_channel); - popupMenu.getMenu().add(Menu.NONE, R.string.title_delete_channel, 15, R.string.title_delete_channel); + popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_channel, order++, R.string.title_edit_channel); + popupMenu.getMenu().add(Menu.NONE, R.string.title_delete_channel, order++, R.string.title_delete_channel); } } } @@ -538,7 +549,10 @@ public class AdapterFolder extends RecyclerView.Adapter getNotifyingFolders(long account); + @Query("SELECT * FROM folder" + + " WHERE parent = :parent") + List getChildFolders(long parent); + @Query("SELECT folder.type" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN NOT message.ui_seen THEN 1 ELSE 0 END) AS unseen" + diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index f6a0a4b8ce..7b9fbf7d54 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -577,6 +577,7 @@ public class FragmentFolders extends FragmentBase { protected Void onExecute(Context context, Bundle args) { int months = args.getInt("months", -1); long fid = args.getLong("folder"); + boolean childs = args.getBoolean("childs"); if (months < 0 && !ConnectionHelper.getNetworkState(context).isSuitable()) throw new IllegalStateException(context.getString(R.string.title_no_internet)); @@ -591,15 +592,25 @@ public class FragmentFolders extends FragmentBase { if (folder == null) return null; - if (months == 0) { - db.folder().setFolderInitialize(folder.id, Integer.MAX_VALUE); - db.folder().setFolderKeep(folder.id, Integer.MAX_VALUE); - } else if (months > 0) { - db.folder().setFolderInitialize(folder.id, months * 30); - db.folder().setFolderKeep(folder.id, months * 30); + if (folder.selectable) { + if (months == 0) { + db.folder().setFolderInitialize(folder.id, Integer.MAX_VALUE); + db.folder().setFolderKeep(folder.id, Integer.MAX_VALUE); + } else if (months > 0) { + db.folder().setFolderInitialize(folder.id, months * 30); + db.folder().setFolderKeep(folder.id, months * 30); + } + + EntityOperation.sync(context, folder.id, true); } - EntityOperation.sync(context, folder.id, true); + if (childs) { + List folders = db.folder().getChildFolders(folder.id); + if (folders != null) + for (EntityFolder child : folders) + if (child.selectable) + EntityOperation.sync(context, child.id, true); + } if (folder.account != null) { EntityAccount account = db.account().getAccount(folder.account); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d7b7d28234..f708357b1d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -708,6 +708,7 @@ Mark messages read on expanding Synchronize now + Synchronize child folders Synchronize more messages Synchronize Delete local messages