package de.dennisguse.opentracks.settings; import android.content.SharedPreferences; import android.os.Bundle; import androidx.fragment.app.DialogFragment; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; public class DefaultsSettingsFragment extends PreferenceFragmentCompat implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller { // Used to forward update from ChooseActivityTypeDialogFragment; TODO Could be replaced with LiveData. private ActivityTypePreference.ActivityPreferenceDialog activityPreferenceDialog; private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { if (PreferencesUtils.isKey(R.string.stats_units_key, key)) { getActivity().runOnUiThread(this::updateUnits); } }; @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.settings_defaults); } @Override public void onStart() { super.onStart(); ((SettingsActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_defaults_title); } @Override public void onResume() { super.onResume(); PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); updateUnits(); } @Override public void onPause() { super.onPause(); PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } @Override public void onDisplayPreferenceDialog(Preference preference) { DialogFragment dialogFragment = null; if (preference instanceof ActivityTypePreference) { activityPreferenceDialog = ActivityTypePreference.ActivityPreferenceDialog.newInstance(preference.getKey()); dialogFragment = activityPreferenceDialog; } if (dialogFragment != null) { dialogFragment.setTargetFragment(this, 0); dialogFragment.show(getParentFragmentManager(), getClass().getSimpleName()); return; } super.onDisplayPreferenceDialog(preference); } private void updateUnits() { UnitSystem unitSystem = PreferencesUtils.getUnitSystem(); ListPreference statsRatePreferences = findPreference(getString(R.string.stats_rate_key)); int entriesId = switch (unitSystem) { case METRIC -> R.array.stats_rate_metric_options; case IMPERIAL_FEET, IMPERIAL_METER, NAUTICAL_IMPERIAL -> R.array.stats_rate_imperial_options; }; String[] entries = getResources().getStringArray(entriesId); statsRatePreferences.setEntries(entries); HackUtils.invalidatePreference(statsRatePreferences); } @Override public void onChooseActivityTypeDone(String iconValue) { if (activityPreferenceDialog != null) { activityPreferenceDialog.updateUI(iconValue); } } }