| 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) {
|
| + if (event.sensor.getType() == Sensor.TYPE_LIGHT) {
|
| + mLastUpdate.illuminance = event.values[0];
|
| + mHasNewValue = true;
|
| +
|
| + reportReading();
|
| + if (mResponse != null) reportReading();
|
| + }
|
| + }
|
| +}
|
|
|