diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 7f13cf5d8e..0ca8c3f24a 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -4594,11 +4594,11 @@ class Core { List rules, State state, SyncStats stats) throws MessagingException, IOException { DB db = DB.getInstance(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean outlook_categories = prefs.getBoolean("outlook_categories", false); boolean download_headers = prefs.getBoolean("download_headers", false); boolean download_plain = prefs.getBoolean("download_plain", false); boolean notify_known = prefs.getBoolean("notify_known", false); boolean native_dkim = prefs.getBoolean("native_dkim", false); - boolean strict_alignment = prefs.getBoolean("strict_alignment", false); boolean experiments = prefs.getBoolean("experiments", false); boolean mdn = prefs.getBoolean("mdn", experiments); boolean pro = ActivityBilling.isPro(context); @@ -4627,7 +4627,7 @@ class Core { boolean flagged = helper.getFlagged(); boolean deleted = helper.getDeleted(); String flags = helper.getFlags(); - String[] keywords = helper.getKeywords(account.isOutlook()); + String[] keywords = helper.getKeywords(outlook_categories && account.isOutlook()); String[] labels = helper.getLabels(); boolean update = false; boolean process = false; diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java index edffd0199b..7356d4cc0b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsSynchronize.java @@ -100,6 +100,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr private SwitchCompat swOutlookThread; private SwitchCompat swSubjectThreading; private TextView tvSubjectThreading; + private SwitchCompat swOutlookCategories; private SwitchCompat swSyncFolders; private SwitchCompat swSyncFoldersPoll; private SwitchCompat swSyncSharedFolders; @@ -132,7 +133,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr "schedule", "schedule_start", "schedule_end", "schedule_start_weekend", "schedule_end_weekend", "weekend", "sync_quick_imap", "sync_quick_pop", "sync_nodate", "sync_unseen", "sync_flagged", "delete_unseen", "sync_kept", - "gmail_thread_id", "outlook_thread_id", "subject_threading", + "gmail_thread_id", "outlook_thread_id", "subject_threading", "outlook_categories", "sync_folders", "sync_folders_poll", "sync_shared_folders", "sync_added_folders", "subscriptions", "check_authentication", "check_tls", "check_reply_domain", "check_mx", "check_blocklist", "use_blocklist", "use_blocklist_pop", @@ -202,6 +203,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swOutlookThread = view.findViewById(R.id.swOutlookThread); swSubjectThreading = view.findViewById(R.id.swSubjectThreading); tvSubjectThreading = view.findViewById(R.id.tvSubjectThreading); + swOutlookCategories = view.findViewById(R.id.swOutlookCategories); swSyncFolders = view.findViewById(R.id.swSyncFolders); swSyncFoldersPoll = view.findViewById(R.id.swSyncFoldersPoll); swSyncSharedFolders = view.findViewById(R.id.swSyncSharedFolders); @@ -456,6 +458,13 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr } }); + swOutlookCategories.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("outlook_categories", checked).apply(); + } + }); + swSyncFolders.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -690,6 +699,7 @@ public class FragmentOptionsSynchronize extends FragmentBase implements SharedPr swOutlookThread.setChecked(prefs.getBoolean("outlook_thread_id", false)); swSubjectThreading.setChecked(prefs.getBoolean("subject_threading", false)); swSubjectThreading.setEnabled(!swGmailThread.isChecked() && !swOutlookThread.isChecked()); + swOutlookCategories.setChecked(prefs.getBoolean("outlook_categories", false)); swSyncFolders.setChecked(prefs.getBoolean("sync_folders", true)); swSyncFoldersPoll.setChecked(prefs.getBoolean("sync_folders_poll", false)); swSyncFoldersPoll.setEnabled(swSyncFolders.isChecked()); diff --git a/app/src/main/res/layout/fragment_options_synchronize.xml b/app/src/main/res/layout/fragment_options_synchronize.xml index 4f27fe68a9..c1f2ce3604 100644 --- a/app/src/main/res/layout/fragment_options_synchronize.xml +++ b/app/src/main/res/layout/fragment_options_synchronize.xml @@ -825,6 +825,29 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swSubjectThreading" /> + + + + Gmail message grouping style for Gmail accounts Use Outlook thread index Group messages by sender and subject + Synchronize Outlook categories Synchronize folder list Actively synchronize folder list Synchronize shared folder lists @@ -1069,6 +1070,7 @@ This will transfer extra data and consume extra battery power, especially if a lot of messages are stored on the device This only applies to newly received messages and can break existing groups Only messages received in the last %1$d hours + Outlook categories can only be fetched and cannot refresh automatically due to Outlook IMAP server limitations Disabling this will reduce data and battery usage somewhat, but will disable updating the list of folders too Periodically synchronize the folder list in addition to after connecting to an account This will check the results of DKIM, SPF and DMARC authentication as performed by the email server