diff --git a/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java b/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java index 92078f7ee..810b2e7e2 100644 --- a/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java +++ b/src/main/java/de/dennisguse/opentracks/content/TrackDataListener.java @@ -34,6 +34,7 @@ public interface TrackDataListener { * * @param track the track */ + //TODO Could be @NonNull void onTrackUpdated(Track track); /** diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index 2f44b1a64..6329a5b15 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -64,6 +64,7 @@ public class StatisticsRecordedFragment extends Fragment { return fragment; } + private TrackStatistics trackStatistics; private SensorStatistics sensorStatistics; private SensorsAdapter sensorsAdapter; @@ -73,18 +74,19 @@ public class StatisticsRecordedFragment extends Fragment { private StatisticsRecordedBinding viewBinding; + private SharedPreferences sharedPreferences; private boolean preferenceMetricUnits; private boolean preferenceReportSpeed; private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { boolean updateUInecessary = false; - if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { + if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { updateUInecessary = true; preferenceMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext()); } - if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { + if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { updateUInecessary = true; preferenceReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), category); } @@ -98,35 +100,34 @@ public class StatisticsRecordedFragment extends Fragment { } }; - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - viewBinding = StatisticsRecordedBinding.inflate(inflater, container, false); - return viewBinding.getRoot(); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - sensorsAdapter = new SensorsAdapter(getContext()); - RecyclerView sensorsRecyclerView = viewBinding.statsSensorsRecyclerView; - sensorsRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); - sensorsRecyclerView.setAdapter(sensorsAdapter); - } - @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); trackId = getArguments().getParcelable(TRACK_ID_KEY); contentProviderUtils = new ContentProviderUtils(getContext()); + + sharedPreferences = PreferencesUtils.getSharedPreferences(getContext()); + + sensorsAdapter = new SensorsAdapter(getContext()); + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + viewBinding = StatisticsRecordedBinding.inflate(inflater, container, false); + + RecyclerView sensorsRecyclerView = viewBinding.statsSensorsRecyclerView; + sensorsRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); + sensorsRecyclerView.setAdapter(sensorsAdapter); + + return viewBinding.getRoot(); } @Override public void onResume() { super.onResume(); - SharedPreferences sharedPreferences = PreferencesUtils.register(getContext(), sharedPreferenceChangeListener); + + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); loadStatistics(); @@ -137,7 +138,13 @@ public class StatisticsRecordedFragment extends Fragment { super.onDestroyView(); viewBinding = null; - PreferencesUtils.unregister(getContext(), sharedPreferenceChangeListener); + sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } + + @Override + public void onDestroy() { + super.onDestroy(); + sharedPreferences = null; } public void loadStatistics() { @@ -147,7 +154,13 @@ public class StatisticsRecordedFragment extends Fragment { Track track = contentProviderUtils.getTrack(trackId); trackStatistics = track != null ? track.getTrackStatistics() : null; sensorStatistics = contentProviderUtils.getSensorStats(trackId); - category = track != null ? track.getCategory() : ""; + + String newCategory = track != null ? track.getCategory() : ""; + if (!category.equals(newCategory)) { + category = newCategory; + sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, getString(R.string.stats_rate_key)); + } + updateUI(); updateSensorUI(); } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java index 9729d1f56..d761f19bc 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -49,11 +50,11 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi private static final String TAG = StatisticsRecordingFragment.class.getSimpleName(); private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND_MS; - public static Fragment newInstance() { return new StatisticsRecordingFragment(); } + private TrackDataHub trackDataHub; private Handler handlerUpdateUI; @@ -68,6 +69,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi private StatisticsRecordingBinding viewBinding; private SensorsAdapter sensorsAdapter; + private SharedPreferences sharedPreferences; private boolean preferenceMetricUnits; private boolean preferenceReportSpeed; private boolean preferenceShowElevation; @@ -76,22 +78,22 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { boolean updateUInecessary = false; - if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { + if (PreferencesUtils.isKey(getContext(), R.string.stats_units_key, key)) { updateUInecessary = true; preferenceMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext()); } - if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { + if (PreferencesUtils.isKey(getContext(), R.string.stats_rate_key, key)) { updateUInecessary = true; preferenceReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), category); } - if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_show_grade_elevation_key, key)) { + if (PreferencesUtils.isKey(getContext(), R.string.stats_show_grade_elevation_key, key)) { updateUInecessary = true; preferenceShowElevation = PreferencesUtils.isShowStatsElevation(sharedPreferences, getContext()); } - if (key == null || PreferencesUtils.isKey(getContext(), R.string.stats_show_coordinate_key, key)) { + if (PreferencesUtils.isKey(getContext(), R.string.stats_show_coordinate_key, key)) { updateUInecessary = true; preferenceShowCoordinate = PreferencesUtils.isStatsShowCoordinate(sharedPreferences, getContext()); } @@ -105,12 +107,6 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi } }; - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - viewBinding = StatisticsRecordingBinding.inflate(inflater, container, false); - return viewBinding.getRoot(); - } - private final Runnable updateUIeachSecond = new Runnable() { public void run() { if (isResumed() && isSelectedTrackRecording()) { @@ -125,26 +121,35 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi }; @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); handlerUpdateUI = new Handler(); - - viewBinding.statsActivityTypeIcon.setOnClickListener(v -> ((TrackRecordingActivity) getActivity()).chooseActivityType(category)); + sharedPreferences = PreferencesUtils.getSharedPreferences(getContext()); sensorsAdapter = new SensorsAdapter(getContext()); + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + viewBinding = StatisticsRecordingBinding.inflate(inflater, container, false); + viewBinding.statsActivityTypeIcon.setOnClickListener(v -> ((TrackRecordingActivity) getActivity()).chooseActivityType(category)); + RecyclerView sensorsRecyclerView = viewBinding.statsSensorsRecyclerView; sensorsRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); sensorsRecyclerView.setAdapter(sensorsAdapter); + + return viewBinding.getRoot(); } @Override public void onResume() { super.onResume(); resumeTrackDataHub(); - SharedPreferences preferences = PreferencesUtils.register(getContext(), sharedPreferenceChangeListener); - sharedPreferenceChangeListener.onSharedPreferenceChanged(preferences, null); + + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); + trackRecordingServiceConnection.startConnection(getContext()); updateUIeachSecond.run(); @@ -155,7 +160,8 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi public void onPause() { super.onPause(); pauseTrackDataHub(); - PreferencesUtils.unregister(getContext(), sharedPreferenceChangeListener); + + sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); handlerUpdateUI.removeCallbacks(updateUIeachSecond); } @@ -176,6 +182,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi public void onDestroy() { super.onDestroy(); trackRecordingServiceConnection = null; + sharedPreferences = null; } @Override @@ -184,7 +191,11 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi getActivity().runOnUiThread(() -> { if (isResumed()) { lastTrackStatistics = track != null ? track.getTrackStatistics() : null; - category = track != null ? track.getCategory() : ""; + String newCategory = track != null ? track.getCategory() : ""; + if (!category.equals(newCategory)) { + category = newCategory; + sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, getString(R.string.stats_rate_key)); + } updateUI(); } });