Statistics*Fragment now updates the units on track category change.

This commit is contained in:
Dennis Guse
2021-03-01 22:56:51 +01:00
parent f6a47c4594
commit 97454b5369
3 changed files with 67 additions and 42 deletions
@@ -34,6 +34,7 @@ public interface TrackDataListener {
* *
* @param track the track * @param track the track
*/ */
//TODO Could be @NonNull
void onTrackUpdated(Track track); void onTrackUpdated(Track track);
/** /**
@@ -64,6 +64,7 @@ public class StatisticsRecordedFragment extends Fragment {
return fragment; return fragment;
} }
private TrackStatistics trackStatistics; private TrackStatistics trackStatistics;
private SensorStatistics sensorStatistics; private SensorStatistics sensorStatistics;
private SensorsAdapter sensorsAdapter; private SensorsAdapter sensorsAdapter;
@@ -73,18 +74,19 @@ public class StatisticsRecordedFragment extends Fragment {
private StatisticsRecordedBinding viewBinding; private StatisticsRecordedBinding viewBinding;
private SharedPreferences sharedPreferences;
private boolean preferenceMetricUnits; private boolean preferenceMetricUnits;
private boolean preferenceReportSpeed; private boolean preferenceReportSpeed;
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> {
boolean updateUInecessary = false; 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; updateUInecessary = true;
preferenceMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext()); 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; updateUInecessary = true;
preferenceReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), category); 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 @Override
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
trackId = getArguments().getParcelable(TRACK_ID_KEY); trackId = getArguments().getParcelable(TRACK_ID_KEY);
contentProviderUtils = new ContentProviderUtils(getContext()); 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 @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
SharedPreferences sharedPreferences = PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null);
loadStatistics(); loadStatistics();
@@ -137,7 +138,13 @@ public class StatisticsRecordedFragment extends Fragment {
super.onDestroyView(); super.onDestroyView();
viewBinding = null; viewBinding = null;
PreferencesUtils.unregister(getContext(), sharedPreferenceChangeListener); sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
}
@Override
public void onDestroy() {
super.onDestroy();
sharedPreferences = null;
} }
public void loadStatistics() { public void loadStatistics() {
@@ -147,7 +154,13 @@ public class StatisticsRecordedFragment extends Fragment {
Track track = contentProviderUtils.getTrack(trackId); Track track = contentProviderUtils.getTrack(trackId);
trackStatistics = track != null ? track.getTrackStatistics() : null; trackStatistics = track != null ? track.getTrackStatistics() : null;
sensorStatistics = contentProviderUtils.getSensorStats(trackId); 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(); updateUI();
updateSensorUI(); updateSensorUI();
} }
@@ -10,6 +10,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; 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 String TAG = StatisticsRecordingFragment.class.getSimpleName();
private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND_MS; private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND_MS;
public static Fragment newInstance() { public static Fragment newInstance() {
return new StatisticsRecordingFragment(); return new StatisticsRecordingFragment();
} }
private TrackDataHub trackDataHub; private TrackDataHub trackDataHub;
private Handler handlerUpdateUI; private Handler handlerUpdateUI;
@@ -68,6 +69,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
private StatisticsRecordingBinding viewBinding; private StatisticsRecordingBinding viewBinding;
private SensorsAdapter sensorsAdapter; private SensorsAdapter sensorsAdapter;
private SharedPreferences sharedPreferences;
private boolean preferenceMetricUnits; private boolean preferenceMetricUnits;
private boolean preferenceReportSpeed; private boolean preferenceReportSpeed;
private boolean preferenceShowElevation; private boolean preferenceShowElevation;
@@ -76,22 +78,22 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> {
boolean updateUInecessary = false; 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; updateUInecessary = true;
preferenceMetricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getContext()); 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; updateUInecessary = true;
preferenceReportSpeed = PreferencesUtils.isReportSpeed(sharedPreferences, getContext(), category); 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; updateUInecessary = true;
preferenceShowElevation = PreferencesUtils.isShowStatsElevation(sharedPreferences, getContext()); 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; updateUInecessary = true;
preferenceShowCoordinate = PreferencesUtils.isStatsShowCoordinate(sharedPreferences, getContext()); 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() { private final Runnable updateUIeachSecond = new Runnable() {
public void run() { public void run() {
if (isResumed() && isSelectedTrackRecording()) { if (isResumed() && isSelectedTrackRecording()) {
@@ -125,26 +121,35 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
}; };
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onCreate(savedInstanceState);
handlerUpdateUI = new Handler(); handlerUpdateUI = new Handler();
sharedPreferences = PreferencesUtils.getSharedPreferences(getContext());
viewBinding.statsActivityTypeIcon.setOnClickListener(v -> ((TrackRecordingActivity) getActivity()).chooseActivityType(category));
sensorsAdapter = new SensorsAdapter(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; RecyclerView sensorsRecyclerView = viewBinding.statsSensorsRecyclerView;
sensorsRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); sensorsRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
sensorsRecyclerView.setAdapter(sensorsAdapter); sensorsRecyclerView.setAdapter(sensorsAdapter);
return viewBinding.getRoot();
} }
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
resumeTrackDataHub(); resumeTrackDataHub();
SharedPreferences preferences = PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
sharedPreferenceChangeListener.onSharedPreferenceChanged(preferences, null); sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null);
trackRecordingServiceConnection.startConnection(getContext()); trackRecordingServiceConnection.startConnection(getContext());
updateUIeachSecond.run(); updateUIeachSecond.run();
@@ -155,7 +160,8 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
pauseTrackDataHub(); pauseTrackDataHub();
PreferencesUtils.unregister(getContext(), sharedPreferenceChangeListener);
sharedPreferences.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
handlerUpdateUI.removeCallbacks(updateUIeachSecond); handlerUpdateUI.removeCallbacks(updateUIeachSecond);
} }
@@ -176,6 +182,7 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
trackRecordingServiceConnection = null; trackRecordingServiceConnection = null;
sharedPreferences = null;
} }
@Override @Override
@@ -184,7 +191,11 @@ public class StatisticsRecordingFragment extends Fragment implements TrackDataLi
getActivity().runOnUiThread(() -> { getActivity().runOnUiThread(() -> {
if (isResumed()) { if (isResumed()) {
lastTrackStatistics = track != null ? track.getTrackStatistics() : null; 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(); updateUI();
} }
}); });