// // 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); } } }