fix crash when toggling setting after rotation

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/fragment/settings/ConnectionSettingsFragment.java |  6 
src/main/java/eu/siacs/conversations/ui/fragment/settings/XmppPreferenceFragment.java     | 12 
src/main/res/xml/preferences_connection.xml                                               |  4 
3 files changed, 16 insertions(+), 6 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/fragment/settings/ConnectionSettingsFragment.java 🔗

@@ -26,11 +26,15 @@ public class ConnectionSettingsFragment extends XmppPreferenceFragment {
     @Override
     public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) {
         setPreferencesFromResource(R.xml.preferences_connection, rootKey);
+        final var connectionOptions = findPreference(AppSettings.SHOW_CONNECTION_OPTIONS);
         final var channelDiscovery = findPreference(AppSettings.CHANNEL_DISCOVERY_METHOD);
         final var groupsAndConferences = findPreference(GROUPS_AND_CONFERENCES);
-        if (channelDiscovery == null || groupsAndConferences == null) {
+        if (connectionOptions == null || channelDiscovery == null || groupsAndConferences == null) {
             throw new IllegalStateException();
         }
+        if (QuickConversationsService.isQuicksy()) {
+            connectionOptions.setVisible(false);
+        }
         if (hideChannelDiscovery()) {
             groupsAndConferences.setVisible(false);
             channelDiscovery.setVisible(false);

src/main/java/eu/siacs/conversations/ui/fragment/settings/XmppPreferenceFragment.java 🔗

@@ -1,10 +1,12 @@
 package eu.siacs.conversations.ui.fragment.settings;
 
 import android.content.SharedPreferences;
+import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.preference.PreferenceFragmentCompat;
 
+import eu.siacs.conversations.Config;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.services.XmppConnectionService;
 import eu.siacs.conversations.ui.XmppActivity;
@@ -17,10 +19,14 @@ public abstract class XmppPreferenceFragment extends PreferenceFragmentCompat {
                         if (key == null) {
                             return;
                         }
-                        onSharedPreferenceChanged(key);
+                        if (isAdded()) {
+                            onSharedPreferenceChanged(key);
+                        }
                     };
 
-    protected void onSharedPreferenceChanged(@NonNull String key) {}
+    protected void onSharedPreferenceChanged(@NonNull String key) {
+        Log.d(Config.LOGTAG,"onSharedPreferenceChanged("+key+")");
+    }
 
     public void onBackendConnected() {}
 
@@ -43,7 +49,7 @@ public abstract class XmppPreferenceFragment extends PreferenceFragmentCompat {
         super.onPause();
         final var sharedPreferences = getPreferenceManager().getSharedPreferences();
         if (sharedPreferences != null) {
-            sharedPreferences.registerOnSharedPreferenceChangeListener(
+            sharedPreferences.unregisterOnSharedPreferenceChangeListener(
                     this.sharedPreferenceChangeListener);
         }
     }

src/main/res/xml/preferences_connection.xml 🔗

@@ -2,13 +2,13 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 
     <PreferenceCategory android:title="@string/pref_category_server_connection">
-        <CheckBoxPreference
+        <SwitchPreferenceCompat
             android:defaultValue="@bool/show_connection_options"
             android:icon="@drawable/ic_settings_24dp"
             android:key="show_connection_options"
             android:summary="@string/pref_show_connection_options_summary"
             android:title="@string/pref_show_connection_options" />
-        <CheckBoxPreference
+        <SwitchPreferenceCompat
             android:defaultValue="@bool/use_tor"
             android:icon="@drawable/ic_network_node_24dp"
             android:key="use_tor"