6cb3647a2b2c03ae76cb3f4bb321705b9e9a7b16
[GitHub/LineageOS/android_hardware_motorola.git] / MotoActions / src / org / lineageos / settings / device / SensorHelper.java
1 /*
2 * Copyright (c) 2015 The CyanogenMod Project
3 * Copyright (c) 2017 The LineageOS Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.lineageos.settings.device;
19
20 import java.util.List;
21 import java.io.FileOutputStream;
22 import java.io.IOException;
23 import java.io.OutputStreamWriter;
24
25 import android.content.Context;
26 import android.hardware.Sensor;
27 import android.hardware.SensorEventListener;
28 import android.hardware.SensorManager;
29 import android.hardware.TriggerEventListener;
30 import android.util.Log;
31
32 public class SensorHelper {
33 private static final String TAG = "MotoActions";
34
35 private static final int SENSOR_TYPE_MMI_CAMERA_ACTIVATION = 65540;
36 private static final int SENSOR_TYPE_MMI_CHOP_CHOP = 65546;
37 private static final int SENSOR_TYPE_MMI_FLAT_UP = 65537;
38 private static final int SENSOR_TYPE_MMI_FLAT_DOWN = 65538;
39 private static final int SENSOR_TYPE_MMI_STOW = 65539;
40 private static final int SENSOR_TYPE_MMI_GLANCE = 65548;
41 private static final int SENSOR_TYPE_MMI_GLANCE_APPROACH = 65555;
42
43 private static final int BATCH_LATENCY_IN_MS = 100;
44
45 private final Context mContext;
46 private final SensorManager mSensorManager;
47
48 public SensorHelper(Context context) {
49 mContext = context;
50 mSensorManager = (SensorManager) mContext .getSystemService(Context.SENSOR_SERVICE);
51 dumpSensorsList();
52 }
53
54 private void dumpSensorsList() {
55 try {
56 FileOutputStream out = mContext.openFileOutput("sensors.txt", Context.MODE_PRIVATE);
57 OutputStreamWriter writer = new OutputStreamWriter(out);
58
59 List<Sensor> sensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
60 for (Sensor sensor : sensorList) {
61 writer.write("sensor " + sensor.getType() + " = " + sensor.getName()
62 + " max batch: " + sensor.getFifoMaxEventCount() + " isWakeUp: " + sensor.isWakeUpSensor() + "\n");
63 }
64 writer.close();
65 } catch (IOException e) {
66 throw new RuntimeException(e);
67 }
68 }
69
70 public Sensor getCameraActivationSensor() {
71 return mSensorManager.getDefaultSensor(SENSOR_TYPE_MMI_CAMERA_ACTIVATION, true);
72 }
73
74 public Sensor getChopChopSensor() {
75 return mSensorManager.getDefaultSensor(SENSOR_TYPE_MMI_CHOP_CHOP, true);
76 }
77
78 public Sensor getFlatUpSensor() {
79 return mSensorManager.getDefaultSensor(SENSOR_TYPE_MMI_FLAT_UP, true);
80 }
81
82 public Sensor getFlatDownSensor() {
83 return mSensorManager.getDefaultSensor(SENSOR_TYPE_MMI_FLAT_DOWN, true);
84 }
85
86 public Sensor getGlanceSensor() {
87 return mSensorManager.getDefaultSensor(SENSOR_TYPE_MMI_GLANCE, true);
88 }
89
90 public Sensor getApproachGlanceSensor() {
91 return mSensorManager.getDefaultSensor(SENSOR_TYPE_MMI_GLANCE_APPROACH, true);
92 }
93
94 public Sensor getProximitySensor() {
95 return mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY, true);
96 }
97
98 public Sensor getStowSensor() {
99 return mSensorManager.getDefaultSensor(SENSOR_TYPE_MMI_STOW, true);
100 }
101
102 public void registerListener(Sensor sensor, SensorEventListener listener) {
103 if (!mSensorManager.registerListener(listener, sensor,
104 SensorManager.SENSOR_DELAY_NORMAL, BATCH_LATENCY_IN_MS * 1000)) {
105 throw new RuntimeException("Failed to registerListener for sensor " + sensor);
106 }
107 }
108
109 public void unregisterListener(SensorEventListener listener) {
110 mSensorManager.unregisterListener(listener);
111 }
112
113 /* TriggerSensor */
114 public void requestTriggerSensor(Sensor sensor, TriggerEventListener listener) {
115 if (!mSensorManager.requestTriggerSensor(listener, sensor)) {
116 throw new RuntimeException("Failed to requestTriggerSensor for sensor " + sensor);
117 }
118 }
119
120 public void cancelTriggerSensor(Sensor sensor, TriggerEventListener listener) {
121 mSensorManager.cancelTriggerSensor(listener, sensor);
122 }
123 }