diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 913a275..fe188da 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id("com.android.application") id("org.jetbrains.kotlin.android") @@ -5,12 +7,12 @@ plugins { } android { - compileSdk = 35 + compileSdk = 36 defaultConfig { applicationId = "ru.hepolise.volumekeymusicmanagermodule" minSdk = 27 - targetSdk = 35 + targetSdk = 36 versionCode = rootProject.ext["appVersionCode"].toString().toInt() versionName = rootProject.ext["appVersionName"].toString() } @@ -27,8 +29,10 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = "17" + kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + } } namespace = "ru.hepolise.volumekeytrackcontrolmodule" diff --git a/app/src/main/java/ru/hepolise/volumekeytrackcontrol/module/VolumeControlModule.kt b/app/src/main/java/ru/hepolise/volumekeytrackcontrol/module/VolumeControlModule.kt index f6deafa..bc20ce1 100644 --- a/app/src/main/java/ru/hepolise/volumekeytrackcontrol/module/VolumeControlModule.kt +++ b/app/src/main/java/ru/hepolise/volumekeytrackcontrol/module/VolumeControlModule.kt @@ -34,13 +34,14 @@ class VolumeControlModule : IXposedHookLoadPackage { } private val initMethodSignatures = mapOf( - // Android 14 & 15 signature + // Android 14, 15 and 16 signature // https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-14.0.0_r18/services/core/java/com/android/server/policy/PhoneWindowManager.java#2033 // https://android.googlesource.com/platform/frameworks/base/+/refs/heads/android15-release/services/core/java/com/android/server/policy/PhoneWindowManager.java#2199 + // https://android.googlesource.com/platform/frameworks/base/+/refs/heads/android16-release/services/core/java/com/android/server/policy/PhoneWindowManager.java#2359 arrayOf( Context::class.java, CLASS_WINDOW_MANAGER_FUNCS - ) to "Using Android 14 or 15 method signature", + ) to "Using Android 14, 15 or 16 method signature", // Android 13 signature // https://android.googlesource.com/platform/frameworks/base/+/refs/heads/android13-dev/services/core/java/com/android/server/policy/PhoneWindowManager.java#1873 @@ -59,13 +60,13 @@ class VolumeControlModule : IXposedHookLoadPackage { ) private fun init(classLoader: ClassLoader) { - val foundMethod = initMethodSignatures.any { (params, logMessage) -> - tryHookMethod(classLoader, params, logMessage) - } - - if (!foundMethod) { - log("Method hook failed for init!") - return + initMethodSignatures.any { (params, logMessage) -> + tryHookInitMethod(classLoader, params, logMessage) + }.also { hooked -> + if (!hooked) { + log("Method hook failed for init!") + return + } } // https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-14.0.0_r18/services/core/java/com/android/server/policy/PhoneWindowManager.java#4117 @@ -79,7 +80,7 @@ class VolumeControlModule : IXposedHookLoadPackage { ) } - private fun tryHookMethod( + private fun tryHookInitMethod( classLoader: ClassLoader, params: Array, logMessage: String @@ -91,7 +92,7 @@ class VolumeControlModule : IXposedHookLoadPackage { ) log(logMessage) true - } catch (ignored: NoSuchMethodError) { + } catch (_: NoSuchMethodError) { false } } diff --git a/app/src/main/java/ru/hepolise/volumekeytrackcontrol/module/VolumeKeyControlModuleHandlers.kt b/app/src/main/java/ru/hepolise/volumekeytrackcontrol/module/VolumeKeyControlModuleHandlers.kt index 2ec73d3..3279c83 100644 --- a/app/src/main/java/ru/hepolise/volumekeytrackcontrol/module/VolumeKeyControlModuleHandlers.kt +++ b/app/src/main/java/ru/hepolise/volumekeytrackcontrol/module/VolumeKeyControlModuleHandlers.kt @@ -245,7 +245,7 @@ object VolumeKeyControlModuleHandlers { private fun MethodHookParam.abortAll() { log("Aborting all") - abortEvents(MediaEvent.Prev, MediaEvent.Next, MediaEvent.PlayPause) + abortEvents(*MediaEvent.entries.toTypedArray()) } private fun MethodHookParam.abortEvents(vararg events: MediaEvent) { diff --git a/app/src/main/java/ru/hepolise/volumekeytrackcontrol/ui/component/NumberAlertDialog.kt b/app/src/main/java/ru/hepolise/volumekeytrackcontrol/ui/component/NumberAlertDialog.kt index 1f641e0..edbf895 100644 --- a/app/src/main/java/ru/hepolise/volumekeytrackcontrol/ui/component/NumberAlertDialog.kt +++ b/app/src/main/java/ru/hepolise/volumekeytrackcontrol/ui/component/NumberAlertDialog.kt @@ -31,11 +31,12 @@ fun NumberAlertDialog( ) { fun validate(value: Int) = value in minValue..maxValue var value by remember { mutableStateOf(defaultValue.toString()) } - val focusRequester = remember { FocusRequester() } AlertDialog( onDismissRequest = onDismissRequest, title = { Text(text = title) }, text = { + val focusRequester = remember { FocusRequester() } + Column { OutlinedTextField( value = value, @@ -45,6 +46,9 @@ fun NumberAlertDialog( isError = value.toIntOrNull() == null || !validate(value.toInt()), modifier = Modifier.focusRequester(focusRequester) ) + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } } }, confirmButton = { @@ -63,7 +67,4 @@ fun NumberAlertDialog( } }, ) - LaunchedEffect(Unit) { - focusRequester.requestFocus() - } } \ No newline at end of file