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