diff --git a/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java index e267db6ee..adf2e03f0 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SensorStateActivity.java @@ -126,7 +126,7 @@ public class SensorStateActivity extends AbstractMyTracksActivity { */ private void stopTempSensorManager() { if (tempSensorManager != null) { - SensorManagerFactory.getInstance().releaseSensorManager(tempSensorManager); + SensorManagerFactory.releaseTempSensorManager(); tempSensorManager = null; } } @@ -139,7 +139,7 @@ public class SensorStateActivity extends AbstractMyTracksActivity { Sensor.SensorDataSet sensorDataSet = null; if (tempSensorManager == null) { - tempSensorManager = SensorManagerFactory.getInstance().getSensorManager(this); + tempSensorManager = SensorManagerFactory.getTempSensorManager(this); } if (tempSensorManager != null) { 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 79468fbfe..08051f268 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -359,7 +359,7 @@ public class TrackRecordingService extends Service { unregisterLocationListener(); shutdownTaskExecutors(); if (sensorManager != null) { - SensorManagerFactory.getInstance().releaseSensorManager(sensorManager); + SensorManagerFactory.releaseSystemSensorManager(); sensorManager = null; } @@ -595,7 +595,7 @@ public class TrackRecordingService extends Service { length = 0; showNotification(); registerLocationListener(); - sensorManager = SensorManagerFactory.getInstance().getSensorManager(this); + sensorManager = SensorManagerFactory.getSystemSensorManager(this); // Reset the number of auto-resume retries. setAutoResumeTrackRetries(0); @@ -1042,7 +1042,7 @@ public class TrackRecordingService extends Service { PreferencesUtils.setLong(this, R.string.recording_track_id_key, recordingTrackId); if (sensorManager != null) { - SensorManagerFactory.getInstance().releaseSensorManager(sensorManager); + SensorManagerFactory.releaseSystemSensorManager(); sensorManager = null; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactory.java b/MyTracks/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactory.java index 92dbfd06b..0f651fe70 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactory.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactory.java @@ -13,101 +13,99 @@ * License for the specific language governing permissions and limitations under * the License. */ + package com.google.android.apps.mytracks.services.sensors; -import com.google.android.apps.mytracks.Constants; import com.google.android.apps.mytracks.services.sensors.ant.AntDirectSensorManager; import com.google.android.apps.mytracks.services.sensors.ant.AntSrmBridgeSensorManager; import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.maps.mytracks.R; import android.content.Context; -import android.util.Log; /** - * A factory of SensorManagers. + * A factory of {@link SensorManager}. * * @author Sandor Dornbush */ public class SensorManagerFactory { - private String activeSensorType = null; - private SensorManager activeSensorManager = null; - private int refCount = 0; + private static SensorManager systemSensorManager = null; + private static SensorManager tempSensorManager = null; - private static SensorManagerFactory instance = new SensorManagerFactory(); + private SensorManagerFactory() {} - private SensorManagerFactory() { + /** + * Gets the system sensor manager. + * + * @param context the context + */ + public static SensorManager getSystemSensorManager(Context context) { + releaseTempSensorManager(); + releaseSystemSensorManager(); + systemSensorManager = getSensorManager(context); + if (systemSensorManager != null) { + systemSensorManager.startSensor(); + } + return systemSensorManager; } /** - * Get the factory instance. + * Releases the system sensor manager. */ - public static SensorManagerFactory getInstance() { - return instance; + public static void releaseSystemSensorManager() { + if (systemSensorManager != null) { + systemSensorManager.stopSensor(); + } + systemSensorManager = null; } /** - * 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. + * Gets the temp sensor manager. + * + * @param context */ - public SensorManager getSensorManager(Context context) { - context = context.getApplicationContext(); + public static SensorManager getTempSensorManager(Context context) { + releaseTempSensorManager(); + if (systemSensorManager != null) { + return null; + } + tempSensorManager = getSensorManager(context); + if (tempSensorManager != null) { + tempSensorManager.startSensor(); + } + return tempSensorManager; + } + + /** + * Releases the temp sensor manager. + */ + public static void releaseTempSensorManager() { + if (tempSensorManager != null) { + tempSensorManager.stopSensor(); + } + tempSensorManager = null; + } + + /** + * Gets the sensor manager. + * + * @param context the context + */ + private static SensorManager getSensorManager(Context context) { String sensorTypeValueNone = context.getString(R.string.sensor_type_value_none); String sensorType = PreferencesUtils.getString( context, R.string.sensor_type_key, sensorTypeValueNone); - Log.i(Constants.TAG, "Creating sensor of type: " + sensorType); - - if (sensorTypeValueNone.equals(sensorType)) { - reset(); - return null; - } - if (sensorType.equals(activeSensorType)) { - Log.i(Constants.TAG, "Returning existing sensor manager."); - refCount++; - return activeSensorManager; - } - reset(); if (sensorType.equals(context.getString(R.string.sensor_type_value_ant))) { - activeSensorManager = new AntDirectSensorManager(context); + return new AntDirectSensorManager(context); } else if (sensorType.equals(context.getString(R.string.sensor_type_value_srm_ant_bridge))) { - activeSensorManager = new AntSrmBridgeSensorManager(context); + return new AntSrmBridgeSensorManager(context); } else if (sensorType.equals(context.getString(R.string.sensor_type_value_zephyr))) { - activeSensorManager = new ZephyrSensorManager(context); + return new ZephyrSensorManager(context); } else if (sensorType.equals(context.getString(R.string.sensor_type_value_polar))) { - activeSensorManager = new PolarSensorManager(context); - } else { - Log.w(Constants.TAG, "Unable to find sensor type: " + sensorType); - return null; + return new PolarSensorManager(context); } - activeSensorType = sensorType; - refCount = 1; - activeSensorManager.startSensor(); - 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.stopSensor(); - } - activeSensorManager = null; - refCount = 0; + return null; } } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactoryTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactoryTest.java index 936f7f3ec..e1da6a22c 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactoryTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/services/sensors/SensorManagerFactoryTest.java @@ -23,7 +23,7 @@ public class SensorManagerFactoryTest extends AndroidTestCase { @SmallTest public void testDefaultSettings() throws Exception { - assertNull(SensorManagerFactory.getInstance().getSensorManager(getContext())); + assertNull(SensorManagerFactory.getSystemSensorManager(getContext())); } @SmallTest @@ -38,9 +38,9 @@ public class SensorManagerFactoryTest extends AndroidTestCase { private void assertClassForName(Class c, int i) { PreferencesUtils.setString(getContext(), R.string.sensor_type_key, getContext().getString(i)); - SensorManager sm = SensorManagerFactory.getInstance().getSensorManager(getContext()); + SensorManager sm = SensorManagerFactory.getSystemSensorManager(getContext()); assertNotNull(sm); assertTrue(c.isInstance(sm)); - SensorManagerFactory.getInstance().releaseSensorManager(sm); + SensorManagerFactory.releaseSystemSensorManager(); } }