Index: content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java b/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java |
index ade4dfb098f5f0ac06af46a67a78f8aae5ca734b..376b954213bc7b6760c2cbbfdeb3d4abb9ceb945 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/DeviceSensors.java |
@@ -25,12 +25,12 @@ import java.util.Set; |
import java.util.concurrent.Callable; |
/** |
- * Android implementation of the device motion and orientation APIs. |
+ * Android implementation of the device {motion|orientation|light} APIs. |
*/ |
@JNINamespace("content") |
class DeviceSensors implements SensorEventListener { |
- private static final String TAG = "DeviceMotionAndOrientation"; |
+ private static final String TAG = "DeviceSensors"; |
// These fields are lazily initialized by getHandler(). |
private Thread mThread; |
@@ -65,6 +65,7 @@ class DeviceSensors implements SensorEventListener { |
*/ |
static final int DEVICE_ORIENTATION = 0; |
static final int DEVICE_MOTION = 1; |
+ static final int DEVICE_LIGHT = 2; |
static final Set<Integer> DEVICE_ORIENTATION_SENSORS = CollectionUtil.newHashSet( |
Sensor.TYPE_ROTATION_VECTOR); |
@@ -73,9 +74,12 @@ class DeviceSensors implements SensorEventListener { |
Sensor.TYPE_ACCELEROMETER, |
Sensor.TYPE_LINEAR_ACCELERATION, |
Sensor.TYPE_GYROSCOPE); |
+ static final Set<Integer> DEVICE_LIGHT_SENSORS = CollectionUtil.newHashSet( |
+ Sensor.TYPE_LIGHT); |
@VisibleForTesting |
final Set<Integer> mActiveSensors = new HashSet<Integer>(); |
+ boolean mDeviceLightIsActive = false; |
boolean mDeviceMotionIsActive = false; |
boolean mDeviceOrientationIsActive = false; |
@@ -91,7 +95,7 @@ class DeviceSensors implements SensorEventListener { |
* @param rateInMilliseconds Requested callback rate in milliseconds. The |
* actual rate may be higher. Unwanted events should be ignored. |
* @param eventType Type of event to listen to, can be either DEVICE_ORIENTATION or |
- * DEVICE_MOTION. |
+ * DEVICE_MOTION or DEVICE_LIGHT. |
* @return True on success. |
*/ |
@CalledByNative |
@@ -107,6 +111,9 @@ class DeviceSensors implements SensorEventListener { |
// note: device motion spec does not require all sensors to be available |
success = registerSensors(DEVICE_MOTION_SENSORS, rateInMilliseconds, false); |
break; |
+ case DEVICE_LIGHT: |
+ success = registerSensors(DEVICE_LIGHT_SENSORS, rateInMilliseconds, true); |
+ break; |
default: |
Log.e(TAG, "Unknown event type: " + eventType); |
return false; |
@@ -131,7 +138,7 @@ class DeviceSensors implements SensorEventListener { |
* if they are still in use by a different event type. |
* |
* @param eventType Type of event to listen to, can be either DEVICE_ORIENTATION or |
- * DEVICE_MOTION. |
+ * DEVICE_MOTION or DEVICE_LIGHT. |
* We strictly guarantee that the corresponding native*() methods will not be called |
* after this method returns. |
*/ |
@@ -144,11 +151,25 @@ class DeviceSensors implements SensorEventListener { |
if (mDeviceMotionIsActive) { |
sensorsToRemainActive.addAll(DEVICE_MOTION_SENSORS); |
} |
+ if (mDeviceLightIsActive) { |
+ sensorsToRemainActive.addAll(DEVICE_LIGHT_SENSORS); |
+ } |
break; |
case DEVICE_MOTION: |
if (mDeviceOrientationIsActive) { |
sensorsToRemainActive.addAll(DEVICE_ORIENTATION_SENSORS); |
} |
+ if (mDeviceLightIsActive) { |
+ sensorsToRemainActive.addAll(DEVICE_LIGHT_SENSORS); |
+ } |
+ break; |
+ case DEVICE_LIGHT: |
+ if (mDeviceMotionIsActive) { |
+ sensorsToRemainActive.addAll(DEVICE_MOTION_SENSORS); |
+ } |
+ if (mDeviceOrientationIsActive) { |
+ sensorsToRemainActive.addAll(DEVICE_ORIENTATION_SENSORS); |
+ } |
break; |
default: |
Log.e(TAG, "Unknown event type: " + eventType); |
@@ -210,6 +231,11 @@ class DeviceSensors implements SensorEventListener { |
} |
} |
break; |
+ case Sensor.TYPE_LIGHT: |
+ if (mDeviceLightIsActive) { |
+ gotLight(values[0]); |
+ } |
+ break; |
default: |
// Unexpected |
return; |
@@ -343,6 +369,9 @@ class DeviceSensors implements SensorEventListener { |
case DEVICE_MOTION: |
mDeviceMotionIsActive = value; |
return; |
+ case DEVICE_LIGHT: |
+ mDeviceLightIsActive = value; |
+ return; |
} |
} |
@@ -424,6 +453,14 @@ class DeviceSensors implements SensorEventListener { |
} |
} |
+ protected void gotLight(double value) { |
+ synchronized (mNativePtrLock) { |
+ if (mNativePtr != 0) { |
+ nativeGotLight(mNativePtr, value); |
+ } |
+ } |
+ } |
+ |
private Handler getHandler() { |
// TODO(timvolodine): Remove the mHandlerLock when sure that getHandler is not called |
// from multiple threads. This will be the case when device motion and device orientation |
@@ -482,6 +519,13 @@ class DeviceSensors implements SensorEventListener { |
double alpha, double beta, double gamma); |
/** |
+ * Device Light value from Ambient Light sensors. |
+ */ |
+ private native void nativeGotLight( |
+ long nativeSensorManagerAndroid, |
+ double value); |
+ |
+ /** |
* Need the an interface for SensorManager for testing. |
*/ |
interface SensorManagerProxy { |