Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(374)

Unified Diff: sky/services/sensors/org/domokit/sensors/SensorForwarder.java

Issue 962043002: Expose Android sensors to via Mojo services (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Review comments Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/services/sensors/BUILD.gn ('k') | sky/services/sensors/org/domokit/sensors/SensorServiceImpl.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/services/sensors/org/domokit/sensors/SensorForwarder.java
diff --git a/sky/services/sensors/org/domokit/sensors/SensorForwarder.java b/sky/services/sensors/org/domokit/sensors/SensorForwarder.java
new file mode 100644
index 0000000000000000000000000000000000000000..2fb3b85fd8cabaac61b29b84467147eef8845e88
--- /dev/null
+++ b/sky/services/sensors/org/domokit/sensors/SensorForwarder.java
@@ -0,0 +1,111 @@
+// Copyright 2015 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.domokit.sensors;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.util.Log;
+
+import org.chromium.mojo.bindings.ConnectionErrorHandler;
+import org.chromium.mojo.system.MojoException;
+import org.chromium.mojom.sensors.SensorData;
+import org.chromium.mojom.sensors.SensorListener;
+import org.chromium.mojom.sensors.SensorType;
+
+/**
+ * A class to forward sensor data to a SensorListener.
+ */
+public class SensorForwarder implements ConnectionErrorHandler, SensorEventListener {
+ private static final String TAG = "SensorForwarder";
+
+ private SensorListener.Proxy mListener;
+ private SensorManager mManager;
+ private Sensor mSensor;
+
+ private static int getAndroidTypeForSensor(int sensorType) {
+ switch (sensorType) {
+ case SensorType.ACCELEROMETER:
+ return Sensor.TYPE_ACCELEROMETER;
+ case SensorType.AMBIENT_TEMPERATURE:
+ return Sensor.TYPE_AMBIENT_TEMPERATURE;
+ case SensorType.GAME_ROTATION_VECTOR:
+ return Sensor.TYPE_GAME_ROTATION_VECTOR;
+ case SensorType.GEOMAGNETIC_ROTATION_VECTOR:
+ return Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR;
+ case SensorType.GRAVITY:
+ return Sensor.TYPE_GRAVITY;
+ case SensorType.GYROSCOPE:
+ return Sensor.TYPE_GYROSCOPE;
+ case SensorType.GYROSCOPE_UNCALIBRATED:
+ return Sensor.TYPE_GYROSCOPE_UNCALIBRATED;
+ case SensorType.HEART_RATE:
+ return Sensor.TYPE_HEART_RATE;
+ case SensorType.LIGHT:
+ return Sensor.TYPE_LIGHT;
+ case SensorType.LINEAR_ACCELERATION:
+ return Sensor.TYPE_LINEAR_ACCELERATION;
+ case SensorType.MAGNETIC_FIELD:
+ return Sensor.TYPE_MAGNETIC_FIELD;
+ case SensorType.MAGNETIC_FIELD_UNCALIBRATED:
+ return Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED;
+ case SensorType.PRESSURE:
+ return Sensor.TYPE_PRESSURE;
+ case SensorType.PROXIMITY:
+ return Sensor.TYPE_PROXIMITY;
+ case SensorType.RELATIVE_HUMIDITY:
+ return Sensor.TYPE_RELATIVE_HUMIDITY;
+ case SensorType.ROTATION_VECTOR:
+ return Sensor.TYPE_ROTATION_VECTOR;
+ case SensorType.SIGNIFICANT_MOTION:
+ return Sensor.TYPE_SIGNIFICANT_MOTION;
+ case SensorType.STEP_COUNTER:
+ return Sensor.TYPE_STEP_COUNTER;
+ case SensorType.STEP_DETECTOR:
+ return Sensor.TYPE_STEP_DETECTOR;
+ default:
+ return -1;
+ }
+ }
+
+ public SensorForwarder(Context context, int mojoSensorType, SensorListener.Proxy listener) {
+ int androidSensorType = getAndroidTypeForSensor(mojoSensorType);
+ mListener = listener;
+ mManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+ mSensor = mManager.getDefaultSensor(androidSensorType);
+
+ if (mSensor == null) {
+ Log.e(TAG, "No default sensor for sensor type " + mojoSensorType);
+ mListener.close();
+ return;
+ }
+
+ // TODO(abarth): We should expose a way for clients to request different
+ // update rates.
+ mManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
+ mListener.setErrorHandler(this);
+ }
+
+ @Override
+ public void onConnectionError(MojoException e) {
+ mManager.unregisterListener(this);
+ }
+
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {
+ mListener.onAccuracyChanged(accuracy);
+ }
+
+ @Override
+ public void onSensorChanged(SensorEvent event) {
+ SensorData data = new SensorData();
+ data.accuracy = event.accuracy;
+ data.timeStamp = event.timestamp;
+ data.values = event.values;
+ mListener.onSensorChanged(data);
+ }
+}
« no previous file with comments | « sky/services/sensors/BUILD.gn ('k') | sky/services/sensors/org/domokit/sensors/SensorServiceImpl.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698