diff --git a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java index e94839e33..94bdbd62f 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -32,6 +32,7 @@ import androidx.preference.PreferenceDialogFragmentCompat; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; +import de.dennisguse.opentracks.util.HackUtils; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -57,8 +58,7 @@ public class ActivityTypePreference extends DialogPreference { setNegativeButtonText(android.R.string.cancel); setDialogIcon(null); setPersistent(true); - //TODO: for some reason the summary is not updated; after changing it. Enable summaryprovider, when fixed. -// setSummaryProvider(summaryProvider); + setSummaryProvider(summaryProvider); } @Override @@ -142,6 +142,7 @@ public class ActivityTypePreference extends DialogPreference { String newDefaultActivity = textView.getText().toString(); if (getPreference().callChangeListener(newDefaultActivity)) { PreferencesUtils.setDefaultActivity(getActivity(), newDefaultActivity); + HackUtils.invalidatePreference(getPreference()); } } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index 90c4ff1a7..659f82980 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -13,6 +13,7 @@ import androidx.preference.PreferenceFragmentCompat; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; +import de.dennisguse.opentracks.util.HackUtils; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.StringUtils; @@ -190,10 +191,7 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit String[] options = getResources().getStringArray(metricUnits ? R.array.stats_rate_metric_options : R.array.stats_rate_imperial_options); statsRatePreferences.setEntries(options); - //TODO This is a hack!!! (Alternative bring the object out of view). - //Need to trigger androidx.preference.preferences.notifyChanged() to trigger a redraw, but method is protected. - statsRatePreferences.setEnabled(false); - statsRatePreferences.setEnabled(true); + HackUtils.invalidatePreference(statsRatePreferences); } } } diff --git a/src/main/java/de/dennisguse/opentracks/util/HackUtils.java b/src/main/java/de/dennisguse/opentracks/util/HackUtils.java new file mode 100644 index 000000000..01b5dbeec --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/util/HackUtils.java @@ -0,0 +1,22 @@ +package de.dennisguse.opentracks.util; + +import androidx.annotation.NonNull; +import androidx.preference.Preference; + +public class HackUtils { + + private HackUtils() { + } + + /** + * Triggers a redraw of the summary of a preference if it was set programmatically. + * Need to trigger androidx.preference.preferences.notifyChanged() to trigger a redraw, but method is protected. + * This workaround also works when this preference has not changed, but it's entries (see R.string.stats_rate_key). + * TODO + */ + public static void invalidatePreference(@NonNull Preference preference) { + boolean isEnabled = preference.isEnabled(); + preference.setEnabled(!isEnabled); + preference.setEnabled(isEnabled); + } +}