Index: device/sensor/android/java/src/org/chromium/device/sensor/AmbientLightSensorImpl.java |
diff --git a/device/sensor/android/java/src/org/chromium/device/sensor/AmbientLightSensorImpl.java b/device/sensor/android/java/src/org/chromium/device/sensor/AmbientLightSensorImpl.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ee1f2f954612fdbf5911d01f1aba0e54496261bb |
--- /dev/null |
+++ b/device/sensor/android/java/src/org/chromium/device/sensor/AmbientLightSensorImpl.java |
@@ -0,0 +1,100 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.device.sensor; |
+ |
+import android.content.Context; |
+import android.hardware.Sensor; |
+import android.hardware.SensorEvent; |
+import android.hardware.SensorEventListener; |
+import android.hardware.SensorManager; |
+ |
+import org.chromium.base.Log; |
+import org.chromium.mojo.system.MojoException; |
+import org.chromium.mojom.device.AmbientLightSensor; |
+import org.chromium.mojom.device.AmbientLightSensorReading; |
+ |
+import java.util.Date; |
+ |
+/** |
+ * Android implementation of Ambient Light Sensor service as defined in |
+ * device/sensor/sensor.mojom. |
+ */ |
+public class AmbientLightSensorImpl implements AmbientLightSensor, SensorEventListener { |
+ private static final String TAG = "AmbientLightSensor"; |
+ private QueryNextReadingResponse mResponse; |
+ // A reference to the application context in order to acquire the SensorService. |
+ private final Context mAppContext; |
+ private final SensorManager mSensorManager; |
+ private final Sensor mAmbientLightSensor; |
+ private boolean mHasNewValue; |
+ private AmbientLightSensorReading mLastUpdate; |
+ |
+ public AmbientLightSensorImpl(Context context) { |
+ mAppContext = context.getApplicationContext(); |
+ |
+ mSensorManager = (SensorManager) mAppContext.getSystemService(Context.SENSOR_SERVICE); |
+ mAmbientLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); |
+ if (mSensorManager == null) { |
+ Log.w(TAG, "Sensor service not supported"); |
+ } else { |
+ mHasNewValue = false; |
+ mLastUpdate = new AmbientLightSensorReading(); |
+ } |
+ } |
+ |
+ @Override |
+ public void queryNextReading(QueryNextReadingResponse callback) { |
+ if (mResponse != null) { |
+ Log.e(TAG, "Overlapped call to queryNextReading!"); |
+ return; |
+ } |
+ |
+ mResponse = callback; |
+ if (mHasNewValue) reportReading(); |
+ } |
+ |
+ @Override |
+ public void startReading() { |
+ mLastUpdate.timeStamp = new Date().getTime(); |
+ mLastUpdate.illuminance = Double.POSITIVE_INFINITY; |
+ mSensorManager.registerListener( |
+ this, mAmbientLightSensor, SensorManager.SENSOR_DELAY_NORMAL); |
+ } |
+ |
+ @Override |
+ public void stopReading() { |
+ mHasNewValue = false; |
+ mLastUpdate.illuminance = Double.POSITIVE_INFINITY; |
+ mSensorManager.unregisterListener(this); |
+ } |
+ |
+ void reportReading() { |
+ mResponse.call(mLastUpdate); |
+ mResponse = null; |
+ mHasNewValue = false; |
+ } |
+ |
+ @Override |
+ public void close() { |
+ mSensorManager.unregisterListener(this); |
+ } |
+ |
+ @Override |
+ public void onConnectionError(MojoException e) {} |
+ |
+ @Override |
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {} |
+ |
+ @Override |
+ public void onSensorChanged(SensorEvent event) { |
riju_
2016/05/16 16:58:51
TODO(riju) : Use event.timestamp here.
|
+ if (event.sensor.getType() == Sensor.TYPE_LIGHT) { |
+ mLastUpdate.illuminance = event.values[0]; |
+ mHasNewValue = true; |
+ |
+ reportReading(); |
+ if (mResponse != null) reportReading(); |
+ } |
+ } |
+} |