XmppPreferenceFragment.java

 1package eu.siacs.conversations.ui.fragment.settings;
 2
 3import android.content.SharedPreferences;
 4import android.util.Log;
 5
 6import androidx.annotation.NonNull;
 7import androidx.preference.PreferenceFragmentCompat;
 8import androidx.preference.Preference;
 9
10import com.rarepebble.colorpicker.ColorPreference;
11
12import eu.siacs.conversations.Config;
13import eu.siacs.conversations.entities.Account;
14import eu.siacs.conversations.services.XmppConnectionService;
15import eu.siacs.conversations.ui.XmppActivity;
16
17public abstract class XmppPreferenceFragment extends PreferenceFragmentCompat {
18
19    private final SharedPreferences.OnSharedPreferenceChangeListener
20            sharedPreferenceChangeListener =
21                    (sharedPreferences, key) -> {
22                        if (key == null) {
23                            return;
24                        }
25                        if (isAdded()) {
26                            onSharedPreferenceChanged(key);
27                        }
28                    };
29
30    protected void onSharedPreferenceChanged(@NonNull String key) {
31        Log.d(Config.LOGTAG,"onSharedPreferenceChanged("+key+")");
32    }
33
34    public void onBackendConnected() {}
35
36    @Override
37    public void onDisplayPreferenceDialog(Preference preference) {
38        if (preference instanceof ColorPreference) {
39            ((ColorPreference) preference).showDialog(this, 0);
40        } else super.onDisplayPreferenceDialog(preference);
41    }
42
43    @Override
44    public void onResume() {
45        super.onResume();
46        final var sharedPreferences = getPreferenceManager().getSharedPreferences();
47        if (sharedPreferences != null) {
48            sharedPreferences.registerOnSharedPreferenceChangeListener(
49                    this.sharedPreferenceChangeListener);
50        }
51        final var xmppActivity = requireXmppActivity();
52        if (xmppActivity.xmppConnectionService != null) {
53            this.onBackendConnected();
54        }
55    }
56
57    @Override
58    public void onPause() {
59        super.onPause();
60        final var sharedPreferences = getPreferenceManager().getSharedPreferences();
61        if (sharedPreferences != null) {
62            sharedPreferences.unregisterOnSharedPreferenceChangeListener(
63                    this.sharedPreferenceChangeListener);
64        }
65    }
66
67    protected void reconnectAccounts() {
68        final var service = requireService();
69        for (final Account account : service.getAccounts()) {
70            if (account.isEnabled()) {
71                service.reconnectAccountInBackground(account);
72            }
73        }
74    }
75
76    protected XmppActivity requireXmppActivity() {
77        final var activity = requireActivity();
78        if (activity instanceof XmppActivity xmppActivity) {
79            return xmppActivity;
80        }
81        throw new IllegalStateException();
82    }
83
84    protected XmppConnectionService requireService() {
85        final var xmppActivity = requireXmppActivity();
86        final var service = xmppActivity.xmppConnectionService;
87        if (service != null) {
88            return service;
89        }
90        throw new IllegalStateException();
91    }
92
93    protected void runOnUiThread(final Runnable runnable) {
94        requireActivity().runOnUiThread(runnable);
95    }
96}