diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 11d5b09cb0..6066c86a4e 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -782,8 +782,7 @@ class Core { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean subscribed_only = prefs.getBoolean("subscribed_only", false); - - Log.i("Start sync folders account=" + account.name); + boolean sync_folders = prefs.getBoolean("sync_folders", true); // Get folder names List names = new ArrayList<>(); @@ -795,16 +794,26 @@ class Core { ifolder.create(Folder.HOLDS_MESSAGES); db.folder().resetFolderTbc(folder.id); names.add(folder.name); + sync_folders = true; } else if (folder.tbd != null && folder.tbd) { Log.i(folder.name + " deleting"); Folder ifolder = istore.getFolder(folder.name); if (ifolder.exists()) ifolder.delete(false); db.folder().deleteFolder(folder.id); - } else + sync_folders = true; + } else { names.add(folder.name); + if (folder.initialize) + sync_folders = true; + } Log.i("Local folder count=" + names.size()); + if (!sync_folders) + return; + + Log.i("Start sync folders account=" + account.name); + // Get default folder Folder defaultFolder = istore.getDefaultFolder(); char separator = defaultFolder.getSeparator(); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java index 251d4334bb..15198a06d3 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java @@ -57,9 +57,10 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr private SwitchCompat swUnseen; private SwitchCompat swFlagged; private SwitchCompat swSyncKept; + private SwitchCompat swSyncFolders; private final static String[] RESET_OPTIONS = new String[]{ - "enabled", "poll_interval", "schedule", "schedule_start", "schedule_end", "sync_unseen", "sync_flagged", "sync_kept" + "enabled", "poll_interval", "schedule", "schedule_start", "schedule_end", "sync_unseen", "sync_flagged", "sync_kept", "sync_folders" }; @Override @@ -80,6 +81,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swUnseen = view.findViewById(R.id.swUnseen); swFlagged = view.findViewById(R.id.swFlagged); swSyncKept = view.findViewById(R.id.swSyncKept); + swSyncFolders = view.findViewById(R.id.swSyncFolders); setOptions(); @@ -184,6 +186,13 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr } }); + swSyncFolders.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("sync_folders", checked).apply(); + } + }); + PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this); return view; @@ -247,6 +256,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swUnseen.setChecked(prefs.getBoolean("sync_unseen", false)); swFlagged.setChecked(prefs.getBoolean("sync_flagged", true)); swSyncKept.setChecked(prefs.getBoolean("sync_kept", false)); + swSyncFolders.setChecked(prefs.getBoolean("sync_folders", true)); } private String formatHour(Context context, int minutes) { diff --git a/app/src/main/res/layout/fragment_options_synchronize.xml b/app/src/main/res/layout/fragment_options_synchronize.xml index 70bd1933cc..0ac2076ef3 100644 --- a/app/src/main/res/layout/fragment_options_synchronize.xml +++ b/app/src/main/res/layout/fragment_options_synchronize.xml @@ -158,7 +158,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" - android:checked="true" + android:checked="false" android:text="@string/title_advanced_unseen" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvSchedulePro" @@ -197,6 +197,29 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swSyncKept" /> + + + + \ 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 4a4c85b003..83289dd7cc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -168,6 +168,7 @@ All unread messages All starred messages Check if old messages were removed from the server + Synchronize folder list Prefix subject only once on replying or forwarding Automatically resize attached and embedded images @@ -236,8 +237,10 @@ Globally disable or enable receiving of messages If synchronization is disabled, it is still possible to synchronize manually by pulling down the message list. This will synchronize messages and execute operations for a limited time. Synchronizing periodically will compare local and remote messages each and every time, which is an expensive operation possibly resulting in extra battery usage, especially when there are a lot of messages to synchronize. Always synchronizing will avoid this by continuous listening for changes only. - This will transfer extra data and use extra battery power, especially if there are a lot of messages kept on the device Tap on a time to set a time + This will transfer extra data and use extra battery power, especially if there are a lot of messages kept on the device + Disabling this will reduce data and battery usage somewhat, but will disable updating the list of folders too + Metered connections are generally mobile connections or paid Wi-Fi hotspots Disabling this option will disable receiving and sending messages on mobile internet connections Assuming no roaming within the EU