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}