Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.plugin.compose")
}

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()
}
Expand All @@ -27,8 +29,10 @@ android {
targetCompatibility = JavaVersion.VERSION_17
}

kotlinOptions {
jvmTarget = "17"
kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}

namespace = "ru.hepolise.volumekeytrackcontrolmodule"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -79,7 +80,7 @@ class VolumeControlModule : IXposedHookLoadPackage {
)
}

private fun tryHookMethod(
private fun tryHookInitMethod(
classLoader: ClassLoader,
params: Array<Serializable>,
logMessage: String
Expand All @@ -91,7 +92,7 @@ class VolumeControlModule : IXposedHookLoadPackage {
)
log(logMessage)
true
} catch (ignored: NoSuchMethodError) {
} catch (_: NoSuchMethodError) {
false
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -45,6 +46,9 @@ fun NumberAlertDialog(
isError = value.toIntOrNull() == null || !validate(value.toInt()),
modifier = Modifier.focusRequester(focusRequester)
)
LaunchedEffect(Unit) {
focusRequester.requestFocus()
}
}
},
confirmButton = {
Expand All @@ -63,7 +67,4 @@ fun NumberAlertDialog(
}
},
)
LaunchedEffect(Unit) {
focusRequester.requestFocus()
}
}