Fix startup crash: listener methods collided with Activity lifecycle

ControlServer.Listener declared onPause()/onResume(); implementing them in
MainActivity overrode Activity.onPause/onResume without super calls, so the
first resume died with SuperNotCalledException. Renamed to onPauseCast/
onResumeCast (matching onStopCast). Also drop R8 optimize variant.
Verified on a Sony Bravia (Android TV 14). Version 0.1.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-25 00:48:39 +02:00
parent db5e909028
commit fb7803e6fb
3 changed files with 9 additions and 9 deletions

View File

@@ -11,8 +11,8 @@ android {
applicationId = "dev.castarr.tv" applicationId = "dev.castarr.tv"
minSdk = 26 minSdk = 26
targetSdk = 35 targetSdk = 35
versionCode = 1 versionCode = 2
versionName = "0.1.0" versionName = "0.1.1"
} }
// Release signing from environment (see ~/.keys/castarr-release.env on the // Release signing from environment (see ~/.keys/castarr-release.env on the
@@ -32,7 +32,7 @@ android {
buildTypes { buildTypes {
release { release {
isMinifyEnabled = true isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
if (storeFileEnv != null) { if (storeFileEnv != null) {
signingConfig = signingConfigs.getByName("release") signingConfig = signingConfigs.getByName("release")
} }

View File

@@ -153,9 +153,9 @@ class MainActivity : Activity(), ControlServer.Listener {
override fun onTogglePlay() = playerController.toggle() override fun onTogglePlay() = playerController.toggle()
override fun onPause() = playerController.pause() override fun onPauseCast() = playerController.pause()
override fun onResume() = playerController.resume() override fun onResumeCast() = playerController.resume()
override fun onStopCast() = playerController.stop() override fun onStopCast() = playerController.stop()

View File

@@ -27,8 +27,8 @@ class ControlServer(
interface Listener { interface Listener {
fun onPlay(url: String, name: String, group: String) fun onPlay(url: String, name: String, group: String)
fun onTogglePlay() fun onTogglePlay()
fun onPause() fun onPauseCast()
fun onResume() fun onResumeCast()
fun onStopCast() fun onStopCast()
fun onSeek(deltaSeconds: Long) fun onSeek(deltaSeconds: Long)
fun onVolume(value: Float) fun onVolume(value: Float)
@@ -176,8 +176,8 @@ class ControlServer(
) )
} }
"toggle" -> post { listener.onTogglePlay() } "toggle" -> post { listener.onTogglePlay() }
"pause" -> post { listener.onPause() } "pause" -> post { listener.onPauseCast() }
"resume" -> post { listener.onResume() } "resume" -> post { listener.onResumeCast() }
"stop" -> post { listener.onStopCast() } "stop" -> post { listener.onStopCast() }
"seek" -> post { listener.onSeek(msg.optLong("delta")) } "seek" -> post { listener.onSeek(msg.optLong("delta")) }
"volume" -> post { listener.onVolume(msg.optDouble("value", 1.0).toFloat().coerceIn(0f, 1f)) } "volume" -> post { listener.onVolume(msg.optDouble("value", 1.0).toFloat().coerceIn(0f, 1f)) }