forked from upstream-mirrors/OpenTracks
merge heads
This commit is contained in:
@@ -167,9 +167,7 @@ public class SensorStateActivity extends Activity {
|
||||
|
||||
// If no temp sensor manager is present, create one, and start it.
|
||||
if (tempSensorManager == null) {
|
||||
tempSensorManager = SensorManagerFactory.getSensorManager(this);
|
||||
if (tempSensorManager != null)
|
||||
tempSensorManager.onStartTrack();
|
||||
tempSensorManager = SensorManagerFactory.getInstance().getSensorManager(this);
|
||||
}
|
||||
|
||||
// If a temp sensor manager is available, use states from temp sensor
|
||||
@@ -226,7 +224,7 @@ public class SensorStateActivity extends Activity {
|
||||
*/
|
||||
private void stopTempSensorManager() {
|
||||
if (tempSensorManager != null) {
|
||||
tempSensorManager.shutdown();
|
||||
SensorManagerFactory.getInstance().releaseSensorManager(tempSensorManager);
|
||||
tempSensorManager = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ public class TrackRecordingService extends Service {
|
||||
unregisterLocationListener();
|
||||
shutdownTaskExecutors();
|
||||
if (sensorManager != null) {
|
||||
sensorManager.shutdown();
|
||||
SensorManagerFactory.getInstance().releaseSensorManager(sensorManager);
|
||||
sensorManager = null;
|
||||
}
|
||||
|
||||
@@ -601,10 +601,7 @@ public class TrackRecordingService extends Service {
|
||||
length = 0;
|
||||
showNotification();
|
||||
registerLocationListener();
|
||||
sensorManager = SensorManagerFactory.getSensorManager(this);
|
||||
if (sensorManager != null) {
|
||||
sensorManager.onStartTrack();
|
||||
}
|
||||
sensorManager = SensorManagerFactory.getInstance().getSensorManager(this);
|
||||
|
||||
// Reset the number of auto-resume retries.
|
||||
setAutoResumeTrackRetries(0);
|
||||
@@ -1038,7 +1035,7 @@ public class TrackRecordingService extends Service {
|
||||
prefManager.setRecordingTrack(recordingTrackId = -1);
|
||||
|
||||
if (sensorManager != null) {
|
||||
sensorManager.shutdown();
|
||||
SensorManagerFactory.getInstance().releaseSensorManager(sensorManager);
|
||||
sensorManager = null;
|
||||
}
|
||||
|
||||
|
||||
+56
-7
@@ -31,15 +31,28 @@ import android.util.Log;
|
||||
*/
|
||||
public class SensorManagerFactory {
|
||||
|
||||
private String activeSensorType;
|
||||
private SensorManager activeSensorManager;
|
||||
private int refCount;
|
||||
|
||||
private static SensorManagerFactory instance = new SensorManagerFactory();
|
||||
|
||||
private SensorManagerFactory() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a new sensor manager.
|
||||
* Get the factory instance.
|
||||
*/
|
||||
public static SensorManagerFactory getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get and start a new sensor manager.
|
||||
* @param context Context to fetch system preferences.
|
||||
* @return The sensor manager that corresponds to the sensor type setting.
|
||||
*/
|
||||
public static SensorManager getSensorManager(Context context) {
|
||||
public SensorManager getSensorManager(Context context) {
|
||||
SharedPreferences prefs = context.getSharedPreferences(
|
||||
Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
|
||||
if (prefs == null) {
|
||||
@@ -52,18 +65,54 @@ public class SensorManagerFactory {
|
||||
Log.i(Constants.TAG, "Creating sensor of type: " + sensor);
|
||||
|
||||
if (sensor == null) {
|
||||
reset();
|
||||
return null;
|
||||
} else if (sensor.equals(context.getString(R.string.sensor_type_value_ant))) {
|
||||
return new AntDirectSensorManager(context);
|
||||
}
|
||||
if (sensor.equals(activeSensorType)) {
|
||||
Log.i(Constants.TAG, "Returning existing sensor manager.");
|
||||
refCount++;
|
||||
return activeSensorManager;
|
||||
}
|
||||
reset();
|
||||
|
||||
if (sensor.equals(context.getString(R.string.sensor_type_value_ant))) {
|
||||
activeSensorManager = new AntDirectSensorManager(context);
|
||||
} else if (sensor.equals(context.getString(R.string.sensor_type_value_srm_ant_bridge))) {
|
||||
return new AntSrmBridgeSensorManager(context);
|
||||
activeSensorManager = new AntSrmBridgeSensorManager(context);
|
||||
} else if (sensor.equals(context.getString(R.string.sensor_type_value_zephyr))) {
|
||||
return new ZephyrSensorManager(context);
|
||||
activeSensorManager = new ZephyrSensorManager(context);
|
||||
} else if (sensor.equals(context.getString(R.string.sensor_type_value_polar))) {
|
||||
return new PolarSensorManager(context);
|
||||
activeSensorManager = new PolarSensorManager(context);
|
||||
} else {
|
||||
Log.w(Constants.TAG, "Unable to find sensor type: " + sensor);
|
||||
return null;
|
||||
}
|
||||
activeSensorType = sensor;
|
||||
refCount = 1;
|
||||
activeSensorManager.onStartTrack();
|
||||
return activeSensorManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish using a sensor manager.
|
||||
*/
|
||||
public void releaseSensorManager(SensorManager sensorManager) {
|
||||
Log.i(Constants.TAG, "releaseSensorManager: " + activeSensorType + " " + refCount);
|
||||
if (sensorManager != activeSensorManager) {
|
||||
Log.e(Constants.TAG, "invalid parameter to releaseSensorManager");
|
||||
}
|
||||
if (--refCount > 0) {
|
||||
return;
|
||||
}
|
||||
reset();
|
||||
}
|
||||
|
||||
private void reset() {
|
||||
activeSensorType = null;
|
||||
if (activeSensorManager != null) {
|
||||
activeSensorManager.shutdown();
|
||||
}
|
||||
activeSensorManager = null;
|
||||
refCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -26,7 +26,7 @@ public class SensorManagerFactoryTest extends AndroidTestCase {
|
||||
|
||||
@SmallTest
|
||||
public void testDefaultSettings() throws Exception {
|
||||
assertNull(SensorManagerFactory.getSensorManager(getContext()));
|
||||
assertNull(SensorManagerFactory.getInstance().getSensorManager(getContext()));
|
||||
}
|
||||
|
||||
@SmallTest
|
||||
@@ -49,8 +49,9 @@ public class SensorManagerFactoryTest extends AndroidTestCase {
|
||||
.putString(getContext().getString(R.string.sensor_type_key),
|
||||
getContext().getString(i))
|
||||
.apply();
|
||||
SensorManager sm = SensorManagerFactory.getSensorManager(getContext());
|
||||
SensorManager sm = SensorManagerFactory.getInstance().getSensorManager(getContext());
|
||||
assertNotNull(sm);
|
||||
assertTrue(c.isInstance(sm));
|
||||
SensorManagerFactory.getInstance().releaseSensorManager(sm);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user