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}