SettingsActivity.java

 1package eu.siacs.conversations.ui;
 2
 3import java.util.ArrayList;
 4import java.util.Arrays;
 5import java.util.Locale;
 6
 7import eu.siacs.conversations.entities.Account;
 8import eu.siacs.conversations.xmpp.XmppConnection;
 9
10import android.app.Fragment;
11import android.app.FragmentManager;
12import android.content.SharedPreferences;
13import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
14import android.os.Build;
15import android.os.Bundle;
16import android.preference.ListPreference;
17import android.preference.PreferenceManager;
18
19public class SettingsActivity extends XmppActivity implements
20		OnSharedPreferenceChangeListener {
21	private SettingsFragment mSettingsFragment;
22
23	@Override
24	protected void onCreate(Bundle savedInstanceState) {
25		super.onCreate(savedInstanceState);
26		FragmentManager fm = getFragmentManager();
27		mSettingsFragment = (SettingsFragment) fm.findFragmentById(android.R.id.content);
28		if (mSettingsFragment == null || !mSettingsFragment.getClass().equals(SettingsFragment.class)) {
29			mSettingsFragment = new SettingsFragment();
30			fm.beginTransaction().replace(android.R.id.content, mSettingsFragment).commit();
31		}
32	}
33
34	@Override
35	void onBackendConnected() {
36
37	}
38
39	@Override
40	public void onStart() {
41		super.onStart();
42		PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
43		ListPreference resources = (ListPreference) mSettingsFragment.findPreference("resource");
44		if (resources != null) {
45			ArrayList<CharSequence> entries = new ArrayList<>(Arrays.asList(resources.getEntries()));
46			if (!entries.contains(Build.MODEL)) {
47				entries.add(0, Build.MODEL);
48				resources.setEntries(entries.toArray(new CharSequence[entries.size()]));
49				resources.setEntryValues(entries.toArray(new CharSequence[entries.size()]));
50			}
51		}
52	}
53
54	@Override
55	public void onStop() {
56		super.onStop();
57		PreferenceManager.getDefaultSharedPreferences(this)
58				.unregisterOnSharedPreferenceChangeListener(this);
59	}
60
61	@Override
62	public void onSharedPreferenceChanged(SharedPreferences preferences,
63			String name) {
64		if (name.equals("resource")) {
65			String resource = preferences.getString("resource", "mobile")
66					.toLowerCase(Locale.US);
67			if (xmppConnectionServiceBound) {
68				for (Account account : xmppConnectionService.getAccounts()) {
69					if (account.setResource(resource)) {
70						if (!account.isOptionSet(Account.OPTION_DISABLED)) {
71							XmppConnection connection = account.getXmppConnection();
72							if (connection != null) {
73								connection.resetStreamId();
74							}
75							xmppConnectionService.reconnectAccountInBackground(account);
76						}
77					}
78				}
79			}
80		} else if (name.equals("keep_foreground_service")) {
81			xmppConnectionService.toggleForegroundService();
82		} else if (name.equals("confirm_messages")) {
83			if (xmppConnectionServiceBound) {
84				for (Account account : xmppConnectionService.getAccounts()) {
85					if (!account.isOptionSet(Account.OPTION_DISABLED)) {
86						xmppConnectionService.sendPresence(account);
87					}
88				}
89			}
90		} else if (name.equals("dont_trust_system_cas")) {
91			xmppConnectionService.updateMemorizingTrustmanager();
92		}
93	}
94}