From 5e119d948ae5f5c567d637c578e69c0959bb5d63 Mon Sep 17 00:00:00 2001 From: David Madl Date: Sun, 14 Jun 2026 19:05:59 +0200 Subject: [PATCH] fixup: add missing file --- .../player/playback/PasadaAccelFeeder.kt | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 app/src/main/java/at/lockstep/player/playback/PasadaAccelFeeder.kt diff --git a/app/src/main/java/at/lockstep/player/playback/PasadaAccelFeeder.kt b/app/src/main/java/at/lockstep/player/playback/PasadaAccelFeeder.kt new file mode 100644 index 0000000..582f3b1 --- /dev/null +++ b/app/src/main/java/at/lockstep/player/playback/PasadaAccelFeeder.kt @@ -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() + } +}