2 * Copyright (c) 2015 The CyanogenMod Project
3 * Copyright (c) 2017 The LineageOS Project
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 package org
.lineageos
.settings
.device
;
20 import java
.util
.List
;
21 import java
.io
.FileOutputStream
;
22 import java
.io
.IOException
;
23 import java
.io
.OutputStreamWriter
;
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
;
32 public class SensorHelper
{
33 private static final String TAG
= "MotoActions";
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;
43 private static final int BATCH_LATENCY_IN_MS
= 100;
45 private final Context mContext
;
46 private final SensorManager mSensorManager
;
48 public SensorHelper(Context context
) {
50 mSensorManager
= (SensorManager
) mContext
.getSystemService(Context
.SENSOR_SERVICE
);
54 private void dumpSensorsList() {
56 FileOutputStream out
= mContext
.openFileOutput("sensors.txt", Context
.MODE_PRIVATE
);
57 OutputStreamWriter writer
= new OutputStreamWriter(out
);
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");
65 } catch (IOException e
) {
66 throw new RuntimeException(e
);
70 public Sensor
getCameraActivationSensor() {
71 return mSensorManager
.getDefaultSensor(SENSOR_TYPE_MMI_CAMERA_ACTIVATION
, true);
74 public Sensor
getChopChopSensor() {
75 return mSensorManager
.getDefaultSensor(SENSOR_TYPE_MMI_CHOP_CHOP
, true);
78 public Sensor
getFlatUpSensor() {
79 return mSensorManager
.getDefaultSensor(SENSOR_TYPE_MMI_FLAT_UP
, true);
82 public Sensor
getFlatDownSensor() {
83 return mSensorManager
.getDefaultSensor(SENSOR_TYPE_MMI_FLAT_DOWN
, true);
86 public Sensor
getGlanceSensor() {
87 return mSensorManager
.getDefaultSensor(SENSOR_TYPE_MMI_GLANCE
, true);
90 public Sensor
getApproachGlanceSensor() {
91 return mSensorManager
.getDefaultSensor(SENSOR_TYPE_MMI_GLANCE_APPROACH
, true);
94 public Sensor
getProximitySensor() {
95 return mSensorManager
.getDefaultSensor(Sensor
.TYPE_PROXIMITY
, true);
98 public Sensor
getStowSensor() {
99 return mSensorManager
.getDefaultSensor(SENSOR_TYPE_MMI_STOW
, true);
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
);
109 public void unregisterListener(SensorEventListener listener
) {
110 mSensorManager
.unregisterListener(listener
);
114 public void requestTriggerSensor(Sensor sensor
, TriggerEventListener listener
) {
115 if (!mSensorManager
.requestTriggerSensor(listener
, sensor
)) {
116 throw new RuntimeException("Failed to requestTriggerSensor for sensor " + sensor
);
120 public void cancelTriggerSensor(Sensor sensor
, TriggerEventListener listener
) {
121 mSensorManager
.cancelTriggerSensor(listener
, sensor
);