fixup: add missing file
This commit is contained in:
@@ -0,0 +1,77 @@
|
|||||||
|
package at.lockstep.player.playback
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.hardware.Sensor
|
||||||
|
import android.hardware.SensorEvent
|
||||||
|
import android.hardware.SensorEventListener
|
||||||
|
import android.hardware.SensorManager
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.HandlerThread
|
||||||
|
import at.lockstep.player.pasada.LibPasada
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers the accelerometer on a background [HandlerThread] and forwards samples to
|
||||||
|
* [LibPasada.feedAccel]. Owned by [PlaybackService] for the duration of a run session.
|
||||||
|
*/
|
||||||
|
class PasadaAccelFeeder(
|
||||||
|
context: Context,
|
||||||
|
) {
|
||||||
|
private val sensorManager = context.applicationContext.getSystemService(SensorManager::class.java)
|
||||||
|
private val accelerometer = sensorManager?.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
|
||||||
|
private val handlerThread = HandlerThread("PasadaAccel").apply { start() }
|
||||||
|
private val handler = Handler(handlerThread.looper)
|
||||||
|
|
||||||
|
@Volatile
|
||||||
|
private var feedingEnabled = false
|
||||||
|
|
||||||
|
private var registered = false
|
||||||
|
|
||||||
|
private val listener =
|
||||||
|
object : SensorEventListener {
|
||||||
|
override fun onSensorChanged(event: SensorEvent) {
|
||||||
|
if (!feedingEnabled || event.sensor.type != Sensor.TYPE_ACCELEROMETER) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
LibPasada.feedAccel(
|
||||||
|
event.values[0],
|
||||||
|
event.values[1],
|
||||||
|
event.values[2],
|
||||||
|
event.timestamp,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAccuracyChanged(
|
||||||
|
sensor: Sensor?,
|
||||||
|
accuracy: Int,
|
||||||
|
) = Unit
|
||||||
|
}
|
||||||
|
|
||||||
|
fun start() {
|
||||||
|
if (registered || sensorManager == null || accelerometer == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
feedingEnabled = true
|
||||||
|
sensorManager.registerListener(
|
||||||
|
listener,
|
||||||
|
accelerometer,
|
||||||
|
SensorManager.SENSOR_DELAY_GAME,
|
||||||
|
0,
|
||||||
|
handler,
|
||||||
|
)
|
||||||
|
registered = true
|
||||||
|
}
|
||||||
|
|
||||||
|
fun stop() {
|
||||||
|
feedingEnabled = false
|
||||||
|
if (!registered || sensorManager == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sensorManager.unregisterListener(listener)
|
||||||
|
registered = false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun release() {
|
||||||
|
stop()
|
||||||
|
handlerThread.quitSafely()
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user