diff --git a/android/src/main/java/org/mozilla/mozstumbler/client/MainApp.java b/android/src/main/java/org/mozilla/mozstumbler/client/MainApp.java index db4dfafbf..d4a0d3e17 100644 --- a/android/src/main/java/org/mozilla/mozstumbler/client/MainApp.java +++ b/android/src/main/java/org/mozilla/mozstumbler/client/MainApp.java @@ -135,7 +135,7 @@ public void onCreate() { AppGlobals.appVersionCode = BuildConfig.VERSION_CODE; AppGlobals.appName = this.getResources().getString(R.string.app_name); - AppGlobals.hasSignificantMotionSensor = new MotionSensor(this, null).hasSignificantMotionSensor(); + AppGlobals.hasSignificantMotionSensor = (MotionSensor.getSignificantMotionSensor(this) != null); AsyncUploader.setGlobalUploadListener(this); diff --git a/android/src/main/java/org/mozilla/mozstumbler/service/stumblerthread/motiondetection/MotionSensor.java b/android/src/main/java/org/mozilla/mozstumbler/service/stumblerthread/motiondetection/MotionSensor.java index 752147515..cf3c3f93b 100644 --- a/android/src/main/java/org/mozilla/mozstumbler/service/stumblerthread/motiondetection/MotionSensor.java +++ b/android/src/main/java/org/mozilla/mozstumbler/service/stumblerthread/motiondetection/MotionSensor.java @@ -27,6 +27,7 @@ public class MotionSensor { /// Testing code private static MotionSensor sDebugInstance; + public static void debugMotionDetected() { if (sDebugInstance.mStopSignificantMotionSensor) { return; @@ -36,15 +37,27 @@ public static void debugMotionDetected() { } /// --- - public boolean hasSignificantMotionSensor() { - return mSignificantMotionSensor != null; + public static Sensor getSignificantMotionSensor(Context context) { + SensorManager sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); + Sensor significantSensor; + if (sensorManager == null) { + AppGlobals.guiLogInfo("No sensor manager."); + return null; + } + if (Build.VERSION.SDK_INT >= 18) { + significantSensor = sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION); + if (significantSensor != null) { + AppGlobals.guiLogInfo("Device has significant motion sensor."); + return significantSensor; + } + } + return null; } public MotionSensor(Context context, BroadcastReceiver callbackReceiver) { sDebugInstance = this; mContext = context; - LocalBroadcastManager.getInstance(context).registerReceiver(callbackReceiver, - new IntentFilter(ACTION_USER_MOTION_DETECTED)); + mStopSignificantMotionSensor = false; mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); if (mSensorManager == null) { @@ -52,20 +65,20 @@ public MotionSensor(Context context, BroadcastReceiver callbackReceiver) { return; } - mStopSignificantMotionSensor = false; - if (Build.VERSION.SDK_INT >= 18) { - mSignificantMotionSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION); - if (mSignificantMotionSensor != null) { - AppGlobals.guiLogInfo("Device has significant motion sensor."); - } + if (callbackReceiver != null) { + LocalBroadcastManager.getInstance(context).registerReceiver(callbackReceiver, + new IntentFilter(ACTION_USER_MOTION_DETECTED)); } + mSignificantMotionSensor = getSignificantMotionSensor(context); + // If no TYPE_SIGNIFICANT_MOTION is available, use alternate means to sense motion if (mSignificantMotionSensor == null) { mLegacyMotionSensor = new LegacyMotionSensor(mContext.getApplicationContext()); AppGlobals.guiLogInfo("Device has legacy motion sensor."); } } + public void start() { if (mSignificantMotionSensor == null) { if (mLegacyMotionSensor != null) {