reconnect accounts when resource has been changed in settings

iNPUTmice created

Change summary

src/eu/siacs/conversations/ui/SettingsActivity.java | 42 +++++++++++++-
1 file changed, 39 insertions(+), 3 deletions(-)

Detailed changes

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

@@ -1,13 +1,18 @@
 package eu.siacs.conversations.ui;
 
+import java.util.Locale;
+
+import eu.siacs.conversations.entities.Account;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.os.Bundle;
+import android.preference.PreferenceManager;
 
-public class SettingsActivity extends XmppActivity {
+public class SettingsActivity extends XmppActivity implements
+		OnSharedPreferenceChangeListener {
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
-
-		// Display the fragment as the main content.
 		getFragmentManager().beginTransaction()
 				.replace(android.R.id.content, new SettingsFragment()).commit();
 	}
@@ -17,4 +22,35 @@ public class SettingsActivity extends XmppActivity {
 
 	}
 
+	@Override
+	public void onStart() {
+		super.onStart();
+		PreferenceManager.getDefaultSharedPreferences(this)
+				.registerOnSharedPreferenceChangeListener(this);
+	}
+
+	@Override
+	public void onStop() {
+		super.onPause();
+		PreferenceManager.getDefaultSharedPreferences(this)
+				.unregisterOnSharedPreferenceChangeListener(this);
+	}
+
+	@Override
+	public void onSharedPreferenceChanged(SharedPreferences preferences,
+			String name) {
+		if (name.equals("resource")) {
+			String resource = preferences.getString("resource", "mobile")
+					.toLowerCase(Locale.US);
+			if (xmppConnectionServiceBound) {
+				for (Account account : xmppConnectionService.getAccounts()) {
+					account.setResource(resource);
+					if (!account.isOptionSet(Account.OPTION_DISABLED)) {
+						xmppConnectionService.reconnectAccount(account, false);
+					}
+				}
+			}
+		}
+	}
+
 }