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