1package eu.siacs.conversations.ui.fragment.settings;
2
3import android.os.Bundle;
4import android.widget.Toast;
5
6import androidx.annotation.NonNull;
7import androidx.annotation.Nullable;
8
9import com.google.common.base.Strings;
10
11import eu.siacs.conversations.AppSettings;
12import eu.siacs.conversations.Config;
13import eu.siacs.conversations.R;
14import eu.siacs.conversations.services.QuickConversationsService;
15
16public class ConnectionSettingsFragment extends XmppPreferenceFragment {
17
18 private static final String GROUPS_AND_CONFERENCES = "groups_and_conferences";
19
20 public static boolean hideChannelDiscovery() {
21 return QuickConversationsService.isQuicksy()
22 || QuickConversationsService.isPlayStoreFlavor()
23 || Strings.isNullOrEmpty(Config.CHANNEL_DISCOVERY);
24 }
25
26 @Override
27 public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) {
28 setPreferencesFromResource(R.xml.preferences_connection, rootKey);
29 final var connectionOptions = findPreference(AppSettings.SHOW_CONNECTION_OPTIONS);
30 final var channelDiscovery = findPreference(AppSettings.CHANNEL_DISCOVERY_METHOD);
31 final var groupsAndConferences = findPreference(GROUPS_AND_CONFERENCES);
32 if (connectionOptions == null || channelDiscovery == null || groupsAndConferences == null) {
33 throw new IllegalStateException();
34 }
35 if (QuickConversationsService.isQuicksy()) {
36 connectionOptions.setVisible(false);
37 }
38 if (hideChannelDiscovery()) {
39 groupsAndConferences.setVisible(false);
40 channelDiscovery.setVisible(false);
41 }
42 }
43
44 @Override
45 protected void onSharedPreferenceChanged(@NonNull String key) {
46 super.onSharedPreferenceChanged(key);
47 switch (key) {
48 case AppSettings.USE_TOR -> {
49 final var appSettings = new AppSettings(requireContext());
50 if (appSettings.isUseTor()) {
51 runOnUiThread(
52 () ->
53 Toast.makeText(
54 requireActivity(),
55 R.string.audio_video_disabled_tor,
56 Toast.LENGTH_LONG)
57 .show());
58 }
59 reconnectAccounts();
60 requireService().reinitializeMuclumbusService();
61 }
62 case AppSettings.SHOW_CONNECTION_OPTIONS -> {
63 reconnectAccounts();
64 }
65 }
66 }
67
68 @Override
69 public void onStart() {
70 super.onStart();
71 requireActivity().setTitle(R.string.pref_connection_options);
72 }
73}