diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index 561f46d5e8..7c26b592ff 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -80,6 +80,7 @@ public class AdapterFolder extends RecyclerView.Adapter() { @Override @@ -743,6 +744,7 @@ public class AdapterFolder extends RecyclerView.Adapter ids) { disabledIds = ids; } @@ -919,7 +928,7 @@ public class AdapterFolder extends RecyclerView.Adapter subscription = new ArrayList<>(); - try { - Folder[] isubscribed = (subscribed_only ? ifolders : defaultFolder.listSubscribed("*")); - for (Folder ifolder : isubscribed) - subscription.add(ifolder.getFullName()); - } catch (MessagingException ex) { - Log.e(account.name, ex); - } - - if (subscribed_only && ifolders.length == 0) { - Log.i("No subscribed folders"); - ifolders = defaultFolder.list("*"); - } long duration = new Date().getTime() - start; Log.i("Remote folder count=" + ifolders.length + - " subscribed=" + subscription.size() + " separator=" + separator + " fetched in " + duration + " ms"); @@ -1310,7 +1292,7 @@ class Core { String fullName = ifolder.getFullName(); String[] attrs = ((IMAPFolder) ifolder).getAttributes(); String type = EntityFolder.getType(attrs, fullName, false); - boolean subscribed = subscription.contains(fullName); + boolean subscribed = ifolder.isSubscribed(); boolean selectable = true; boolean inferiors = true; diff --git a/app/src/main/java/eu/faircode/email/FragmentAccount.java b/app/src/main/java/eu/faircode/email/FragmentAccount.java index cffae85921..a3e7d07cf4 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentAccount.java @@ -654,7 +654,6 @@ public class FragmentAccount extends FragmentBase { realm = null; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - boolean subscribed_only = prefs.getBoolean("subscribed_only", false); DB db = DB.getInstance(context); @@ -684,7 +683,6 @@ public class FragmentAccount extends FragmentBase { String[] attrs = ((IMAPFolder) ifolder).getAttributes(); Log.i(fullName + " attrs=" + TextUtils.join(" ", attrs)); String type = EntityFolder.getType(attrs, fullName, true); - boolean subscribed = ifolder.isSubscribed(); boolean selectable = true; for (String attr : attrs) @@ -692,7 +690,7 @@ public class FragmentAccount extends FragmentBase { selectable = false; selectable = selectable && ((ifolder.getType() & IMAPFolder.HOLDS_MESSAGES) != 0); - if (type != null && selectable && (!subscribed_only || subscribed)) { + if (type != null && selectable) { // Create entry EntityFolder folder = db.folder().getFolderByName(id, fullName); if (folder == null) diff --git a/app/src/main/java/eu/faircode/email/FragmentFolders.java b/app/src/main/java/eu/faircode/email/FragmentFolders.java index 2247b81210..c38b2801cf 100644 --- a/app/src/main/java/eu/faircode/email/FragmentFolders.java +++ b/app/src/main/java/eu/faircode/email/FragmentFolders.java @@ -450,8 +450,14 @@ public class FragmentFolders extends FragmentBase { @Override public void onPrepareOptionsMenu(Menu menu) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + boolean subscriptions = prefs.getBoolean("subscriptions", false); + boolean subscribed_only = prefs.getBoolean("subscribed_only", false); + menu.findItem(R.id.menu_compact).setChecked(compact); menu.findItem(R.id.menu_show_hidden).setChecked(show_hidden); + menu.findItem(R.id.menu_subscribed_only).setChecked(subscribed_only); + menu.findItem(R.id.menu_subscribed_only).setVisible(subscriptions); menu.findItem(R.id.menu_apply_all).setVisible(account >= 0); super.onPrepareOptionsMenu(menu); @@ -466,6 +472,9 @@ public class FragmentFolders extends FragmentBase { case R.id.menu_show_hidden: onMenuShowHidden(); return true; + case R.id.menu_subscribed_only: + onMenuSubscribedOnly(); + return true; case R.id.menu_apply_all: onMenuApplyToAll(); return true; @@ -493,6 +502,14 @@ public class FragmentFolders extends FragmentBase { adapter.setShowHidden(show_hidden); } + private void onMenuSubscribedOnly() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + boolean subscribed_only = !prefs.getBoolean("subscribed_only", false); + prefs.edit().putBoolean("subscribed_only", subscribed_only).apply(); + getActivity().invalidateOptionsMenu(); + adapter.setSubscribedOnly(subscribed_only); + } + private void onMenuApplyToAll() { Bundle args = new Bundle(); args.putLong("account", account); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java index ccbfbed37e..73cbab5c7c 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java @@ -75,7 +75,6 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr private SwitchCompat swSyncFolders; private SwitchCompat swSubscriptions; private TextView tvSubscriptionPro; - private SwitchCompat swSubscribedOnly; private SwitchCompat swCheckMx; private SwitchCompat swCheckReply; private Group grpExempted; @@ -84,7 +83,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr private final static String[] RESET_OPTIONS = new String[]{ "enabled", "poll_interval", "schedule", "schedule_start", "schedule_end", - "sync_unseen", "sync_flagged", "delete_unseen", "sync_kept", "sync_folders", "subscriptions", "subscribed_only", + "sync_unseen", "sync_flagged", "delete_unseen", "sync_kept", "sync_folders", "subscriptions", "check_mx", "check_reply" }; @@ -121,7 +120,6 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swSyncFolders = view.findViewById(R.id.swSyncFolders); swSubscriptions = view.findViewById(R.id.swSubscriptions); tvSubscriptionPro = view.findViewById(R.id.tvSubscriptionPro); - swSubscribedOnly = view.findViewById(R.id.swSubscribedOnly); swCheckMx = view.findViewById(R.id.swCheckMx); swCheckReply = view.findViewById(R.id.swCheckReply); grpExempted = view.findViewById(R.id.grpExempted); @@ -265,14 +263,6 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr Helper.linkPro(tvSubscriptionPro); - swSubscribedOnly.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { - prefs.edit().putBoolean("subscribed_only", checked).apply(); - ServiceSynchronize.reload(getContext(), null, false, "subscribed_only"); - } - }); - swCheckMx.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -370,7 +360,6 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swSyncFolders.setChecked(prefs.getBoolean("sync_folders", true)); swSubscriptions.setChecked(prefs.getBoolean("subscriptions", false) && pro); swSubscriptions.setEnabled(pro); - swSubscribedOnly.setChecked(prefs.getBoolean("subscribed_only", false)); swCheckMx.setChecked(prefs.getBoolean("check_mx", false)); swCheckReply.setChecked(prefs.getBoolean("check_reply", false)); } diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 887a4cc199..936a386a43 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -122,7 +122,6 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences "metered", "roaming", "rlah", // force reconnect "ssl_harden", // force reconnect "socks_enabled", "socks_proxy", // force reconnect - "subscribed_only", // force folder sync "badge", "unseen_ignored", // force update badge/widget "debug" // force reconnect )); diff --git a/app/src/main/res/layout/fragment_options_synchronize.xml b/app/src/main/res/layout/fragment_options_synchronize.xml index c6011e4b45..6705e3e889 100644 --- a/app/src/main/res/layout/fragment_options_synchronize.xml +++ b/app/src/main/res/layout/fragment_options_synchronize.xml @@ -399,30 +399,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swSubscriptions" /> - - - - + + Check if old messages were removed from the server Synchronize folder list Manage folder subscriptions - Synchronize subscribed folders only Show keyboard by default Suggest locally stored contacts @@ -460,7 +459,6 @@ When disabled, unread messages are kept on the device forever This will transfer extra data and consume extra battery power, especially if a lot of messages are stored on the device Disabling this will reduce data and battery usage somewhat, but will disable updating the list of folders too - Enabling this will delete all local folders without subscription This will slow down synchronizing messages In addition to contacts provided by Android. Contact data will be stored for newly sent or received messages only when enabled. @@ -642,6 +640,7 @@ Folder name Display name Show hidden folders + Subscribed only Apply to all … Hide folder Show in unified inbox