//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.google.vrtoolkit.cardboard.sensors;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.util.Log;
import java.util.ArrayList;
import java.util.Iterator;
public class DeviceSensorLooper implements SensorEventProvider {
private static final String LOG_TAG = DeviceSensorLooper.class.getSimpleName();
private boolean isRunning;
private SensorManager sensorManager;
private Looper sensorLooper;
private SensorEventListener sensorEventListener;
private final ArrayList<SensorEventListener> registeredListeners = new ArrayList();
private int level;
public DeviceSensorLooper(SensorManager sensorManager, int level) {
this.sensorManager = sensorManager;
this.level = level;
}
public DeviceSensorLooper(SensorManager sensorManager) {
this(sensorManager, 0);
}
private Sensor getUncalibratedGyro() {
return Build.MANUFACTURER.equals("HTC")?null:this.sensorManager.getDefaultSensor(16);
}
public void start() {
if(!this.isRunning) {
this.sensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
synchronized(DeviceSensorLooper.this.registeredListeners) {
Iterator var3 = DeviceSensorLooper.this.registeredListeners.iterator();
while(var3.hasNext()) {
SensorEventListener listener = (SensorEventListener)var3.next();
listener.onSensorChanged(event);
}
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
synchronized(DeviceSensorLooper.this.registeredListeners) {
Iterator var4 = DeviceSensorLooper.this.registeredListeners.iterator();
while(var4.hasNext()) {
SensorEventListener listener = (SensorEventListener)var4.next();
listener.onAccuracyChanged(sensor, accuracy);
}
}
}
};
HandlerThread sensorThread = new HandlerThread("sensor") {
protected void onLooperPrepared() {
Handler handler = new Handler(Looper.myLooper());
Sensor accelerometer = DeviceSensorLooper.this.sensorManager.getDefaultSensor(1);
DeviceSensorLooper.this.sensorManager.registerListener(DeviceSensorLooper.this.sensorEventListener, accelerometer, level, handler);
Sensor gyroscope = DeviceSensorLooper.this.getUncalibratedGyro();
if(gyroscope == null) {
Log.i(DeviceSensorLooper.LOG_TAG, "Uncalibrated gyroscope unavailable, default to regular gyroscope.");
gyroscope = DeviceSensorLooper.this.sensorManager.getDefaultSensor(4);
}
DeviceSensorLooper.this.sensorManager.registerListener(DeviceSensorLooper.this.sensorEventListener, gyroscope, level, handler);
}
};
sensorThread.start();
this.sensorLooper = sensorThread.getLooper();
this.isRunning = true;
}
}
public void stop() {
if(this.isRunning) {
this.sensorManager.unregisterListener(this.sensorEventListener);
this.sensorEventListener = null;
this.sensorLooper.quit();
this.sensorLooper = null;
this.isRunning = false;
}
}
public void registerListener(SensorEventListener listener) {
ArrayList var2 = this.registeredListeners;
synchronized(this.registeredListeners) {
this.registeredListeners.add(listener);
}
}
public void unregisterListener(SensorEventListener listener) {
ArrayList var2 = this.registeredListeners;
synchronized(this.registeredListeners) {
this.registeredListeners.remove(listener);
}
}
}