resetting hostname when extended connection settings and tor is disabled

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/AppSettings.java                                     | 10 
src/main/java/eu/siacs/conversations/entities/Account.java                                |  3 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java                  |  6 
src/main/java/eu/siacs/conversations/ui/fragment/settings/ConnectionSettingsFragment.java | 28 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java                             |  7 
5 files changed, 37 insertions(+), 17 deletions(-)

Detailed changes

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

@@ -7,6 +7,7 @@ import androidx.annotation.BoolRes;
 import androidx.annotation.NonNull;
 import androidx.preference.PreferenceManager;
 import com.google.common.base.Strings;
+import eu.siacs.conversations.services.QuickConversationsService;
 import java.security.SecureRandom;
 
 public class AppSettings {
@@ -121,7 +122,14 @@ public class AppSettings {
     }
 
     public boolean isUseTor() {
-        return getBooleanPreference(USE_TOR, R.bool.use_tor);
+        return QuickConversationsService.isConversations()
+                && getBooleanPreference(USE_TOR, R.bool.use_tor);
+    }
+
+    public boolean isExtendedConnectionOptions() {
+        return QuickConversationsService.isConversations()
+                && getBooleanPreference(
+                        AppSettings.SHOW_CONNECTION_OPTIONS, R.bool.show_connection_options);
     }
 
     public boolean isAcceptInvitesFromStrangers() {

src/main/java/eu/siacs/conversations/entities/Account.java 🔗

@@ -20,6 +20,7 @@ import eu.siacs.conversations.crypto.sasl.HashedTokenSha512;
 import eu.siacs.conversations.crypto.sasl.SaslMechanism;
 import eu.siacs.conversations.services.AvatarService;
 import eu.siacs.conversations.services.XmppConnectionService;
+import eu.siacs.conversations.utils.Resolver;
 import eu.siacs.conversations.utils.UIHelper;
 import eu.siacs.conversations.utils.XmppUri;
 import eu.siacs.conversations.xmpp.Jid;
@@ -116,7 +117,7 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable
                 null,
                 null,
                 null,
-                5222,
+                Resolver.XMPP_PORT_STARTTLS,
                 Presence.Status.ONLINE,
                 null,
                 null,

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -5433,12 +5433,6 @@ public class XmppConnectionService extends Service {
                 && getBooleanPreference("use_tor", R.bool.use_tor);
     }
 
-    public boolean showExtendedConnectionOptions() {
-        return QuickConversationsService.isConversations()
-                && getBooleanPreference(
-                        AppSettings.SHOW_CONNECTION_OPTIONS, R.bool.show_connection_options);
-    }
-
     public boolean broadcastLastActivity() {
         return getBooleanPreference(AppSettings.BROADCAST_LAST_ACTIVITY, R.bool.last_activity);
     }

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

@@ -1,17 +1,18 @@
 package eu.siacs.conversations.ui.fragment.settings;
 
 import android.os.Bundle;
+import android.util.Log;
 import android.widget.Toast;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-
 import com.google.common.base.Strings;
-
 import eu.siacs.conversations.AppSettings;
 import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
+import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.services.QuickConversationsService;
+import eu.siacs.conversations.utils.Resolver;
+import java.util.Arrays;
 
 public class ConnectionSettingsFragment extends XmppPreferenceFragment {
 
@@ -59,9 +60,26 @@ public class ConnectionSettingsFragment extends XmppPreferenceFragment {
                 reconnectAccounts();
                 requireService().reinitializeMuclumbusService();
             }
-            case AppSettings.SHOW_CONNECTION_OPTIONS -> {
-                reconnectAccounts();
+            case AppSettings.SHOW_CONNECTION_OPTIONS -> reconnectAccounts();
+        }
+        if (Arrays.asList(AppSettings.USE_TOR, AppSettings.SHOW_CONNECTION_OPTIONS).contains(key)) {
+            final var appSettings = new AppSettings(requireContext());
+            if (appSettings.isUseTor() || appSettings.isExtendedConnectionOptions()) {
+                return;
             }
+            resetUserDefinedHostname();
+        }
+    }
+
+    private void resetUserDefinedHostname() {
+        final var service = requireService();
+        for (final Account account : service.getAccounts()) {
+            Log.d(
+                    Config.LOGTAG,
+                    account.getJid().asBareJid() + ": resetting hostname and port to defaults");
+            account.setHostname(null);
+            account.setPort(Resolver.XMPP_PORT_STARTTLS);
+            service.databaseBackend.updateAccount(account);
         }
     }
 

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -304,8 +304,8 @@ public class XmppConnection implements Runnable {
             Socket localSocket;
             shouldAuthenticate = !account.isOptionSet(Account.OPTION_REGISTER);
             this.changeStatus(Account.State.CONNECTING);
-            final boolean useTorSetting = mXmppConnectionService.useTorToConnect();
-            final boolean extended = mXmppConnectionService.showExtendedConnectionOptions();
+            final boolean useTorSetting = appSettings.isUseTor();
+            final boolean extended = appSettings.isExtendedConnectionOptions();
             final boolean useTor = useTorSetting || account.isOnion();
             // TODO collapse Tor usage into normal connection code path
             if (useTor) {
@@ -1885,8 +1885,7 @@ public class XmppConnection implements Runnable {
                                 is = null;
                             }
                         } else {
-                            final boolean useTor =
-                                    mXmppConnectionService.useTorToConnect() || account.isOnion();
+                            final boolean useTor = this.appSettings.isUseTor() || account.isOnion();
                             try {
                                 final String url = data.getValue("url");
                                 final String fallbackUrl = data.getValue("captcha-fallback-url");