1package eu.siacs.conversations.ui.fragment.settings;
2
3import android.os.Bundle;
4
5import androidx.annotation.NonNull;
6import androidx.annotation.Nullable;
7
8import com.google.android.material.color.DynamicColors;
9
10import eu.siacs.conversations.AppSettings;
11import eu.siacs.conversations.Conversations;
12import eu.siacs.conversations.R;
13import eu.siacs.conversations.ui.activity.SettingsActivity;
14import eu.siacs.conversations.ui.util.SettingsUtils;
15
16public class InterfaceSettingsFragment extends XmppPreferenceFragment {
17
18 @Override
19 public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) {
20 setPreferencesFromResource(R.xml.preferences_interface, rootKey);
21 final var themePreference = findPreference("theme");
22 final var dynamicColors = findPreference("dynamic_colors");
23 if (themePreference == null || dynamicColors == null) {
24 throw new IllegalStateException(
25 "The preference resource file did not contain theme or color preferences");
26 }
27 themePreference.setOnPreferenceChangeListener(
28 (preference, newValue) -> {
29 if (newValue instanceof final String theme) {
30 final int desiredNightMode = Conversations.getDesiredNightMode(theme);
31 requireSettingsActivity().setDesiredNightMode(desiredNightMode);
32 }
33 return true;
34 });
35 dynamicColors.setVisible(DynamicColors.isDynamicColorAvailable());
36 dynamicColors.setOnPreferenceChangeListener(
37 (preference, newValue) -> {
38 requireSettingsActivity().setDynamicColors(Boolean.TRUE.equals(newValue));
39 return true;
40 });
41 }
42
43 @Override
44 protected void onSharedPreferenceChanged(@NonNull String key) {
45 super.onSharedPreferenceChanged(key);
46 if (key.equals(AppSettings.ALLOW_SCREENSHOTS)) {
47 SettingsUtils.applyScreenshotSetting(requireActivity());
48 }
49 }
50
51 @Override
52 public void onStart() {
53 super.onStart();
54 requireActivity().setTitle(R.string.pref_title_interface);
55 }
56
57 public SettingsActivity requireSettingsActivity() {
58 final var activity = requireActivity();
59 if (activity instanceof SettingsActivity settingsActivity) {
60 return settingsActivity;
61 }
62 throw new IllegalStateException(
63 String.format(
64 "%s is not %s",
65 activity.getClass().getName(), SettingsActivity.class.getName()));
66 }
67}