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;