InterfaceSettingsFragment.java

 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}