This commit is contained in:
Dennis Guse
2020-05-09 20:54:29 +02:00
parent 30310bb874
commit e3a8143d58
4 changed files with 27 additions and 35 deletions
@@ -4,9 +4,6 @@ import androidx.annotation.NonNull;
import de.dennisguse.opentracks.content.data.TrackPoint; import de.dennisguse.opentracks.content.data.TrackPoint;
/**
*
*/
public final class SensorDataSet { public final class SensorDataSet {
private SensorDataHeartRate heartRate; private SensorDataHeartRate heartRate;
@@ -31,10 +28,6 @@ public final class SensorDataSet {
} }
public void set(SensorData data) { public void set(SensorData data) {
if (data == null) {
return;
}
if (data instanceof SensorDataHeartRate) { if (data instanceof SensorDataHeartRate) {
this.heartRate = (SensorDataHeartRate) data; this.heartRate = (SensorDataHeartRate) data;
return; return;
@@ -48,10 +41,6 @@ public final class SensorDataSet {
this.cyclingSpeed = (SensorDataCycling.Speed) data; this.cyclingSpeed = (SensorDataCycling.Speed) data;
return; return;
} }
if (data instanceof SensorDataCycling.CadenceAndSpeed) {
set(((SensorDataCycling.CadenceAndSpeed) data).getCadence());
set(((SensorDataCycling.CadenceAndSpeed) data).getSpeed());
}
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@@ -40,6 +40,8 @@ import de.dennisguse.opentracks.content.TrackDataListener;
import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.data.Track;
import de.dennisguse.opentracks.content.data.TrackPoint; import de.dennisguse.opentracks.content.data.TrackPoint;
import de.dennisguse.opentracks.content.data.Waypoint; import de.dennisguse.opentracks.content.data.Waypoint;
import de.dennisguse.opentracks.content.sensor.SensorDataCycling;
import de.dennisguse.opentracks.content.sensor.SensorDataHeartRate;
import de.dennisguse.opentracks.content.sensor.SensorDataSet; import de.dennisguse.opentracks.content.sensor.SensorDataSet;
import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection;
import de.dennisguse.opentracks.services.TrackRecordingServiceInterface; import de.dennisguse.opentracks.services.TrackRecordingServiceInterface;
@@ -59,15 +61,14 @@ import de.dennisguse.opentracks.util.UnitConversions;
*/ */
public class StatsFragment extends Fragment implements TrackDataListener { public class StatsFragment extends Fragment implements TrackDataListener {
private static final String STATS_FRAGMENT_TAG = StatsFragment.class.getSimpleName(); private static final String TAG = StatsFragment.class.getSimpleName();
private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND_MS; private static final long UI_UPDATE_INTERVAL = UnitConversions.ONE_SECOND_MS;
private TrackDataHub trackDataHub; private TrackDataHub trackDataHub;
private Handler handlerUpdateUI; private Handler handlerUpdateUI;
//TODO Initialize immediately and remove in onDestroy() private final TrackRecordingServiceConnection trackRecordingServiceConnection = new TrackRecordingServiceConnection();
private TrackRecordingServiceConnection trackRecordingServiceConnection;
private TrackPoint lastTrackPoint = null; private TrackPoint lastTrackPoint = null;
private TrackStatistics lastTrackStatistics = null; private TrackStatistics lastTrackStatistics = null;
@@ -96,9 +97,6 @@ public class StatsFragment extends Fragment implements TrackDataListener {
if (PreferencesUtils.getRecordingTrackId(getContext()) != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT) { if (PreferencesUtils.getRecordingTrackId(getContext()) != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT) {
// A recording track id has been set -> Resumes track and starts timer. // A recording track id has been set -> Resumes track and starts timer.
resumeTrackDataHub(); resumeTrackDataHub();
if (trackRecordingServiceConnection == null) {
trackRecordingServiceConnection = new TrackRecordingServiceConnection(null);
}
trackRecordingServiceConnection.startConnection(getContext()); trackRecordingServiceConnection.startConnection(getContext());
handlerUpdateUI.post(updateUIeachSecond); handlerUpdateUI.post(updateUIeachSecond);
@@ -248,7 +246,6 @@ public class StatsFragment extends Fragment implements TrackDataListener {
resumeTrackDataHub(); resumeTrackDataHub();
PreferencesUtils.register(getContext(), sharedPreferenceChangeListener); PreferencesUtils.register(getContext(), sharedPreferenceChangeListener);
trackRecordingServiceConnection = new TrackRecordingServiceConnection(null);
trackRecordingServiceConnection.startConnection(getContext()); trackRecordingServiceConnection.startConnection(getContext());
handlerUpdateUI.post(updateUIeachSecond); handlerUpdateUI.post(updateUIeachSecond);
@@ -266,10 +263,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
@Override @Override
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
if (trackRecordingServiceConnection != null) { trackRecordingServiceConnection.unbind(getContext());
trackRecordingServiceConnection.unbind(getContext());
}
trackRecordingServiceConnection = null;
} }
@Override @Override
@@ -442,7 +436,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
SensorDataSet sensorDataSet = null; SensorDataSet sensorDataSet = null;
if (trackRecordingService == null) { if (trackRecordingService == null) {
Log.d(STATS_FRAGMENT_TAG, "Cannot get the track recording service."); Log.d(TAG, "Cannot get the track recording service.");
} else { } else {
sensorDataSet = trackRecordingService.getSensorData(); sensorDataSet = trackRecordingService.getSensorData();
} }
@@ -463,9 +457,11 @@ public class StatsFragment extends Fragment implements TrackDataListener {
String sensorValue = getContext().getString(R.string.value_unknown); String sensorValue = getContext().getString(R.string.value_unknown);
String sensorName = getContext().getString(R.string.value_unknown); String sensorName = getContext().getString(R.string.value_unknown);
if (sensorDataSet != null && sensorDataSet.getHeartRate() != null) { if (sensorDataSet != null && sensorDataSet.getHeartRate() != null) {
sensorName = sensorDataSet.getHeartRate().getSensorName(); SensorDataHeartRate data = sensorDataSet.getHeartRate();
if (sensorDataSet.getHeartRate().hasHeartRate_bpm() && sensorDataSet.getHeartRate().isRecent()) {
sensorValue = StringUtils.formatDecimal(sensorDataSet.getHeartRate().getHeartRate_bpm(), 0); sensorName = data.getSensorName();
if (data.hasHeartRate_bpm() && data.isRecent()) {
sensorValue = StringUtils.formatDecimal(data.getHeartRate_bpm(), 0);
} }
} }
@@ -485,9 +481,11 @@ public class StatsFragment extends Fragment implements TrackDataListener {
String sensorValue = getContext().getString(R.string.value_unknown); String sensorValue = getContext().getString(R.string.value_unknown);
String sensorName = getContext().getString(R.string.value_unknown); String sensorName = getContext().getString(R.string.value_unknown);
if (sensorDataSet != null && sensorDataSet.getCyclingCadence() != null) { if (sensorDataSet != null && sensorDataSet.getCyclingCadence() != null) {
sensorName = sensorDataSet.getCyclingCadence().getSensorName(); SensorDataCycling.Cadence data = sensorDataSet.getCyclingCadence();
if (sensorDataSet.getCyclingCadence().hasCadence_rpm() && sensorDataSet.getCyclingCadence().isRecent()) { sensorName = data.getSensorName();
sensorValue = StringUtils.formatDecimal(sensorDataSet.getCyclingCadence().getCadence_rpm(), 0);
if (data.hasCadence_rpm() && data.isRecent()) {
sensorValue = StringUtils.formatDecimal(data.getCadence_rpm(), 0);
} }
} }
@@ -499,8 +497,10 @@ public class StatsFragment extends Fragment implements TrackDataListener {
private void setSpeedSensorData(SensorDataSet sensorDataSet, boolean isRecording) { private void setSpeedSensorData(SensorDataSet sensorDataSet, boolean isRecording) {
if (isRecording) { if (isRecording) {
if (sensorDataSet != null && sensorDataSet.getCyclingSpeed() != null) { if (sensorDataSet != null && sensorDataSet.getCyclingSpeed() != null) {
if (sensorDataSet.getCyclingSpeed().hasSpeed_mps() && sensorDataSet.getCyclingSpeed().isRecent()) { SensorDataCycling.Speed data = sensorDataSet.getCyclingSpeed();
setSpeed(sensorDataSet.getCyclingSpeed().getSpeed_mps());
if (data.hasSpeed_mps() && data.isRecent()) {
setSpeed(data.getSpeed_mps());
} }
} }
} }
@@ -51,12 +51,14 @@ public class TrackRecordingServiceConnection implements ServiceConnection, Death
private TrackRecordingServiceInterface trackRecordingService; private TrackRecordingServiceInterface trackRecordingService;
public TrackRecordingServiceConnection() {
callback = null;
}
/** /**
* Constructor.
*
* @param callback the callback to invoke when the service binding changes * @param callback the callback to invoke when the service binding changes
*/ */
public TrackRecordingServiceConnection(Runnable callback) { public TrackRecordingServiceConnection(@NonNull Runnable callback) {
this.callback = callback; this.callback = callback;
} }
@@ -23,6 +23,7 @@ import android.content.SharedPreferences;
import android.util.Log; import android.util.Log;
import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.content.sensor.SensorData;
import de.dennisguse.opentracks.content.sensor.SensorDataCycling; import de.dennisguse.opentracks.content.sensor.SensorDataCycling;
import de.dennisguse.opentracks.content.sensor.SensorDataSet; import de.dennisguse.opentracks.content.sensor.SensorDataSet;
import de.dennisguse.opentracks.util.BluetoothUtils; import de.dennisguse.opentracks.util.BluetoothUtils;
@@ -148,7 +149,7 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager.
} }
@Override @Override
public synchronized void onChanged(de.dennisguse.opentracks.content.sensor.SensorData sensorData) { public synchronized void onChanged(SensorData sensorData) {
if (sensorData instanceof SensorDataCycling.Cadence) { if (sensorData instanceof SensorDataCycling.Cadence) {
if (sensorData.equals(sensorDataSet.getCyclingCadence())) { if (sensorData.equals(sensorDataSet.getCyclingCadence())) {
Log.d(TAG, "onChanged: cadence data repeated."); Log.d(TAG, "onChanged: cadence data repeated.");