diff --git a/MyTracks/.classpath b/MyTracks/.classpath index 7c5cb8f1e..c5e45279c 100644 --- a/MyTracks/.classpath +++ b/MyTracks/.classpath @@ -4,6 +4,7 @@ + diff --git a/MyTracks/res/drawable/chart_settings.png b/MyTracks/res/drawable/chart_settings.png index d608eedf3..63147af45 100644 Binary files a/MyTracks/res/drawable/chart_settings.png and b/MyTracks/res/drawable/chart_settings.png differ diff --git a/MyTracks/res/layout/sensor_state.xml b/MyTracks/res/layout/sensor_state.xml index 064893463..acb085505 100644 --- a/MyTracks/res/layout/sensor_state.xml +++ b/MyTracks/res/layout/sensor_state.xml @@ -63,100 +63,47 @@ limitations under the License. style="@style/StatsRegister" /> - - - - - - - + + + + + android:layout_column="5" + android:text="@string/watts" /> + + + + + - - - + android:layout_column="4" /> android:layout_column="2" - android:layout_marginBottom="-9dip" - android:layout_marginTop="-9dip" - android:text="@string/revolutions_per_minute" - android:textColor="@color/stat_label_text" /> - - - - - - + android:text="@string/revolutions_per_minute" /> @@ -170,14 +117,14 @@ limitations under the License. + android:layout_span="4" /> + android:text="@string/bpm" /> diff --git a/MyTracks/res/menu/main.xml b/MyTracks/res/menu/main.xml index 015f19aa4..8ff5a9e71 100644 --- a/MyTracks/res/menu/main.xml +++ b/MyTracks/res/menu/main.xml @@ -26,6 +26,7 @@ android:title="@string/aggregated_stats"/> diff --git a/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java index a914ea556..fb9559d26 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java @@ -15,6 +15,7 @@ */ package com.google.android.apps.mytracks; +import static com.google.android.apps.mytracks.MyTracksConstants.TAG; import com.google.android.apps.mytracks.content.Sensor; import com.google.android.apps.mytracks.services.ITrackRecordingService; import com.google.android.apps.mytracks.services.sensors.SensorUtils; @@ -25,7 +26,6 @@ import android.app.Activity; import android.os.Bundle; import android.os.RemoteException; import android.util.Log; -import android.widget.CheckBox; import android.widget.TextView; import java.text.SimpleDateFormat; @@ -69,11 +69,13 @@ public class SensorStateActivity extends Activity { public SensorStateActivity() { utils = new StatsUtilities(this); + Log.w(TAG, "SensorStateActivity()"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Log.w(TAG, "SensorStateActivity.onCreate"); setContentView(R.layout.sensor_state); @@ -98,7 +100,8 @@ public class SensorStateActivity extends Activity { protected void updateState() { MyTracks mt = MyTracks.getInstance(); - ITrackRecordingService service = mt.getTrackRecordingService(); + ITrackRecordingService service = + mt == null ? null : mt.getTrackRecordingService(); if (service == null) { Log.d(MyTracksConstants.TAG, "Could not get track recording service."); updateSensorState(Sensor.SensorState.NONE); @@ -134,21 +137,12 @@ public class SensorStateActivity extends Activity { sensorTime.setText(SensorUtils.getStateAsString(state, this)); } - private void updateSensorData(Sensor.SensorDataSet sds) { - CheckBox heartRateMonitor = - (CheckBox) findViewById(R.id.heart_rate_monitor_enabled); - CheckBox powerMeter = - (CheckBox) findViewById(R.id.power_meter_enabled); + protected void updateSensorData(Sensor.SensorDataSet sds) { if (sds == null) { utils.setUnknown(R.id.sensor_data_time_register); utils.setUnknown(R.id.cadence_state_register); utils.setUnknown(R.id.power_state_register); - utils.setUnknown(R.id.power_meter_state_register); - powerMeter.setChecked(false); - utils.setUnknown(R.id.heart_rate_register); - utils.setUnknown(R.id.heart_rate_monitor_state_register); - heartRateMonitor.setChecked(false); return; } @@ -156,46 +150,44 @@ public class SensorStateActivity extends Activity { ((TextView) findViewById(R.id.sensor_data_time_register)); sensorTime.setText( TIMESTAMP_FORMAT.format(new Date(sds.getCreationTime()))); - /* - sensorTime.setTextColor(sd.isValid() - ? R.color.stat_label_text - : R.color.red); - */ - utils.setText(R.id.power_meter_state_register, - SensorUtils.getStateAsString( - sds.hasPower() - ? sds.getPower().getState() - : Sensor.SensorState.NONE, - this)); - boolean power = sds.hasPower() && sds.getPower().hasValue(); - powerMeter.setChecked(power); - if (power) { - utils.setText(R.id.power_state_register, "" + sds.getPower().getValue()); + if (sds.hasPower() && sds.getPower().hasValue() + && sds.getPower().getState() == Sensor.SensorState.SENDING) { + utils.setText(R.id.power_state_register, + Integer.toString(sds.getPower().getValue())); } else { - utils.setUnknown(R.id.power_state_register); + utils.setText(R.id.power_state_register, + SensorUtils.getStateAsString( + sds.hasPower() + ? sds.getPower().getState() + : Sensor.SensorState.NONE, + this)); } - boolean cadence = sds.hasCadence() && sds.getCadence().hasValue(); - if (cadence) { + if (sds.hasCadence() && sds.getCadence().hasValue() + && sds.getCadence().getState() == Sensor.SensorState.SENDING) { utils.setText(R.id.cadence_state_register, Integer.toString(sds.getCadence().getValue())); } else { - utils.setUnknown(R.id.cadence_state_register); + utils.setText(R.id.cadence_state_register, + SensorUtils.getStateAsString( + sds.hasCadence() + ? sds.getCadence().getState() + : Sensor.SensorState.NONE, + this)); } - boolean heartRate = sds.hasHeartRate() && sds.getHeartRate().hasValue(); - heartRateMonitor.setChecked(heartRate); - utils.setText(R.id.heart_rate_monitor_state_register, - SensorUtils.getStateAsString( - sds.hasHeartRate() - ? sds.getHeartRate().getState() - : Sensor.SensorState.NONE, - this)); - if (heartRate) { - utils.setText(R.id.heart_rate_register, "" + sds.getHeartRate().getValue()); + if (sds.hasHeartRate() && sds.getHeartRate().hasValue() + && sds.getHeartRate().getState() == Sensor.SensorState.SENDING) { + utils.setText(R.id.heart_rate_register, + Integer.toString(sds.getHeartRate().getValue())); } else { - utils.setUnknown(R.id.heart_rate_register); + utils.setText(R.id.heart_rate_register, + SensorUtils.getStateAsString( + sds.hasHeartRate() + ? sds.getHeartRate().getState() + : Sensor.SensorState.NONE, + this)); } } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java index 6519bbb71..6f48de5d6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -1044,33 +1044,33 @@ public class TrackRecordingService extends Service implements LocationListener { } service.onLocationChanged(loc); } - @Override - public byte[] getSensorData() { - if (service.sensorManager == null) { - Log.d(MyTracksConstants.TAG, "No sensor manager for data."); - return null; - } - if (service.sensorManager.getSensorDataSet() == null) { - Log.d(MyTracksConstants.TAG, "Sensor data set is null."); - return null; - } - return service.sensorManager.getSensorDataSet().toByteArray(); - } - @Override - public int getSensorState() { - if (service.sensorManager == null) { - Log.d(MyTracksConstants.TAG, "No sensor manager for data."); - return Sensor.SensorState.NONE.getNumber(); - } - return service.sensorManager.getSensorState().getNumber(); - } + @Override + public byte[] getSensorData() { + if (service.sensorManager == null) { + Log.d(MyTracksConstants.TAG, "No sensor manager for data."); + return null; + } + if (service.sensorManager.getSensorDataSet() == null) { + Log.d(MyTracksConstants.TAG, "Sensor data set is null."); + return null; + } + return service.sensorManager.getSensorDataSet().toByteArray(); + } + + @Override + public int getSensorState() { + if (service.sensorManager == null) { + Log.d(MyTracksConstants.TAG, "No sensor manager for data."); + return Sensor.SensorState.NONE.getNumber(); + } + return service.sensorManager.getSensorState().getNumber(); + } } public long startNewTrack() { Log.d(MyTracksConstants.TAG, "TrackRecordingService.startNewTrack"); - if (recordingTrackId != -1 || isRecording) { - throw new IllegalStateException("A track is already in progress!"); + if (recordingTrackId != -1 || isRecording) { throw new IllegalStateException("A track is already in progress!"); } long startTime = System.currentTimeMillis(); @@ -1138,6 +1138,11 @@ public class TrackRecordingService extends Service implements LocationListener { } showNotification(); prefManager.setRecordingTrack(recordingTrackId = -1); + + if (sensorManager != null) { + sensorManager.shutdown(); + } + releaseWakeLock(); } diff --git a/MyTracksTest/.classpath b/MyTracksTest/.classpath index 7ec6a9bf6..df1e96d2b 100644 --- a/MyTracksTest/.classpath +++ b/MyTracksTest/.classpath @@ -1,14 +1,15 @@ - - - - + + + + + diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/TrackFormatWriterTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/TrackFormatWriterTest.java index b8b7bb6c0..89d38ad55 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/TrackFormatWriterTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/TrackFormatWriterTest.java @@ -6,7 +6,6 @@ import com.google.android.apps.mytracks.content.Sensor; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.Waypoint; -import android.location.Location; import android.test.AndroidTestCase; import org.w3c.dom.Document;