let omemoOnly config overwrite OmemoSetting

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/Config.java              |  7 
src/main/java/eu/siacs/conversations/crypto/OmemoSetting.java | 10 +
src/main/java/eu/siacs/conversations/ui/SettingsActivity.java | 39 ++--
src/main/res/xml/preferences.xml                              |  3 
4 files changed, 39 insertions(+), 20 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/Config.java 🔗

@@ -15,10 +15,9 @@ import eu.siacs.conversations.xmpp.chatstate.ChatState;
 public final class Config {
     private static final int UNENCRYPTED = 1;
     private static final int OPENPGP = 2;
-    private static final int OTR = 4;
     private static final int OMEMO = 8;
 
-    private static final int ENCRYPTION_MASK = UNENCRYPTED | OPENPGP | OTR | OMEMO;
+    private static final int ENCRYPTION_MASK = UNENCRYPTED | OPENPGP | OMEMO;
 
     public static boolean supportUnencrypted() {
         return (ENCRYPTION_MASK & UNENCRYPTED) != 0;
@@ -32,6 +31,10 @@ public final class Config {
         return (ENCRYPTION_MASK & OMEMO) != 0;
     }
 
+    public static boolean omemoOnly() {
+        return !multipleEncryptionChoices() && supportOmemo();
+    }
+
     public static boolean multipleEncryptionChoices() {
         return (ENCRYPTION_MASK & (ENCRYPTION_MASK - 1)) != 0;
     }

src/main/java/eu/siacs/conversations/crypto/OmemoSetting.java 🔗

@@ -34,6 +34,9 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.preference.PreferenceManager;
 
+import com.google.common.base.Strings;
+
+import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.ui.SettingsActivity;
@@ -52,8 +55,13 @@ public class OmemoSetting {
 	}
 
 	public static void load(final Context context, final SharedPreferences sharedPreferences) {
+		if (Config.omemoOnly()) {
+			always = true;
+			encryption = Message.ENCRYPTION_AXOLOTL;
+			return;
+		}
 		final String value = sharedPreferences.getString(SettingsActivity.OMEMO_SETTING, context.getResources().getString(R.string.omemo_setting_default));
-		switch (value) {
+		switch (Strings.nullToEmpty(value)) {
 			case "always":
 				always = true;
 				encryption = Message.ENCRYPTION_AXOLOTL;

src/main/java/eu/siacs/conversations/ui/SettingsActivity.java 🔗

@@ -298,26 +298,33 @@ public class SettingsActivity extends XmppActivity implements OnSharedPreference
             deleteOmemoPreference.setOnPreferenceClickListener(
                     preference -> deleteOmemoIdentities());
         }
+        if (Config.omemoOnly()) {
+            final PreferenceCategory privacyCategory =
+                    (PreferenceCategory) mSettingsFragment.findPreference("privacy");
+            final Preference omemoPreference =mSettingsFragment.findPreference(OMEMO_SETTING);
+            if (omemoPreference != null) {
+                privacyCategory.removePreference(omemoPreference);
+            }
+        }
     }
 
     private void changeOmemoSettingSummary() {
-        ListPreference omemoPreference =
+        final ListPreference omemoPreference =
                 (ListPreference) mSettingsFragment.findPreference(OMEMO_SETTING);
-        if (omemoPreference != null) {
-            String value = omemoPreference.getValue();
-            switch (value) {
-                case "always":
-                    omemoPreference.setSummary(R.string.pref_omemo_setting_summary_always);
-                    break;
-                case "default_on":
-                    omemoPreference.setSummary(R.string.pref_omemo_setting_summary_default_on);
-                    break;
-                case "default_off":
-                    omemoPreference.setSummary(R.string.pref_omemo_setting_summary_default_off);
-                    break;
-            }
-        } else {
-            Log.d(Config.LOGTAG, "unable to find preference named " + OMEMO_SETTING);
+        if (omemoPreference == null) {
+            return;
+        }
+        final String value = omemoPreference.getValue();
+        switch (value) {
+            case "always":
+                omemoPreference.setSummary(R.string.pref_omemo_setting_summary_always);
+                break;
+            case "default_on":
+                omemoPreference.setSummary(R.string.pref_omemo_setting_summary_default_on);
+                break;
+            case "default_off":
+                omemoPreference.setSummary(R.string.pref_omemo_setting_summary_default_off);
+                break;
         }
     }
 

src/main/res/xml/preferences.xml 🔗

@@ -15,7 +15,8 @@
                 android:targetPackage="com.huawei.systemmanager" />
         </PreferenceScreen>
     </PreferenceCategory>
-    <PreferenceCategory android:title="@string/pref_privacy">
+    <PreferenceCategory android:title="@string/pref_privacy"
+        android:key="privacy">
         <CheckBoxPreference
             android:defaultValue="@bool/confirm_messages"
             android:key="confirm_messages"