From 51739514fa773ba07dbb73088821c8e8906adcec Mon Sep 17 00:00:00 2001 From: Kavish Devar Date: Thu, 23 Apr 2026 01:22:49 +0530 Subject: [PATCH] android: fix normal builds --- android/app/libs/libxposed-api-100.aar | Bin 16996 -> 0 bytes .../librepods/util/NativeBridge.kt | 5 + .../librepods/utils/KotlinModule.kt | 125 ------------------ .../librepods/utils/XposedServiceHolder.kt | 28 ---- .../librepods/utils/XposedServiceHolder.kt | 0 5 files changed, 5 insertions(+), 153 deletions(-) delete mode 100644 android/app/libs/libxposed-api-100.aar create mode 100644 android/app/src/normal/java/me/kavishdevar/librepods/util/NativeBridge.kt delete mode 100644 android/app/src/normal/java/me/kavishdevar/librepods/utils/KotlinModule.kt delete mode 100644 android/app/src/normal/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt rename android/app/src/{main => xposed}/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt (100%) diff --git a/android/app/libs/libxposed-api-100.aar b/android/app/libs/libxposed-api-100.aar deleted file mode 100644 index 1b03d8a6e8a7a72d686858e290fcce9b02a0ff3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16996 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

{^2h;I@J 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 diff --git a/android/app/src/normal/java/me/kavishdevar/librepods/util/NativeBridge.kt b/android/app/src/normal/java/me/kavishdevar/librepods/util/NativeBridge.kt new file mode 100644 index 0000000..45c50e6 --- /dev/null +++ b/android/app/src/normal/java/me/kavishdevar/librepods/util/NativeBridge.kt @@ -0,0 +1,5 @@ +package me.kavishdevar.librepods.utils + +object NativeBridge { + fun setSdpHook(enabled: Boolean) { } +} diff --git a/android/app/src/normal/java/me/kavishdevar/librepods/utils/KotlinModule.kt b/android/app/src/normal/java/me/kavishdevar/librepods/utils/KotlinModule.kt deleted file mode 100644 index 0d1c2bd..0000000 --- a/android/app/src/normal/java/me/kavishdevar/librepods/utils/KotlinModule.kt +++ /dev/null @@ -1,125 +0,0 @@ -package me.kavishdevar.librepods.utils - -import android.annotation.SuppressLint -import android.content.Context -import android.os.Handler -import android.os.Looper -import android.util.Log -import android.widget.ImageView -import androidx.core.net.toUri -import io.github.libxposed.api.XposedModule -import io.github.libxposed.api.XposedModuleInterface.ModuleLoadedParam -import io.github.libxposed.api.XposedModuleInterface.PackageLoadedParam - -private const val TAG = "LibrePodsHook" - -@SuppressLint("DiscouragedApi", "PrivateApi") -class KotlinModule: XposedModule() { - override fun onModuleLoaded(param: ModuleLoadedParam) { - log(Log.INFO, TAG, "module initialized at :: ${param.processName}") - log(Log.INFO, TAG, "framework: $frameworkName($frameworkVersionCode) API $apiVersion") - } - - override fun onPackageLoaded(param: PackageLoadedParam) { - log(Log.INFO, TAG, "onPackageLoaded :: ${param.packageName}") - - if (param.packageName == "com.google.android.bluetooth" || param.packageName == "com.android.bluetooth") { - log(Log.INFO, TAG, "Bluetooth app detected, hooking l2c_fcr_chk_chan_modes") - try { - if (param.isFirstPackage) { - log(Log.INFO, TAG, "Loading native library for Bluetooth hook") - - NativeBridge.setSdpHook(getRemotePreferences("me.kavishdevar.librepods").getBoolean("vendor_id_hook", false)) - System.loadLibrary("l2c_fcr_hook") - log(Log.INFO, TAG, "Native library loaded successfully") - } - } catch (e: Exception) { - log(Log.ERROR, TAG, "Failed to load native library: ${e.message}") - } - } - - if (param.packageName == "com.google.android.settings") { - hookSettingsController(param, "com.google.android.settings.bluetooth.AdvancedBluetoothDetailsHeaderController") - } - - if (param.packageName == "com.android.settings") { - hookSettingsController(param, "com.android.settings.bluetooth.AdvancedBluetoothDetailsHeaderController") - } - } - - private fun hookSettingsController(param: PackageLoadedParam, className: String) { - log(Log.INFO, TAG, "Settings app detected, hooking Bluetooth icon handling") - try { - val headerControllerClass = Class.forName(className, false, param.defaultClassLoader) - val updateIconMethod = headerControllerClass.getDeclaredMethod( - "updateIcon", - ImageView::class.java, - String::class.java - ) - - hook(updateIconMethod).intercept { chain -> - try { - log(Log.INFO, TAG, "Bluetooth icon hook called with args: ${chain.args.joinToString(", ")}") - val imageView = chain.args[0] as? ImageView - val iconUri = chain.args[1] as? String - - if (imageView == null || iconUri == null) { - return@intercept chain.proceed() - } - - val uri = iconUri.toUri() - if (!uri.toString().startsWith("android.resource://me.kavishdevar.librepods")) { - return@intercept chain.proceed() - } - - log(Log.INFO, TAG, "Handling AirPods icon URI: $uri") - - Handler(Looper.getMainLooper()).post { - try { - val context = imageView.context - val packageName = uri.authority ?: return@post - val packageContext = context.createPackageContext( - packageName, - Context.CONTEXT_IGNORE_SECURITY - ) - - val resPath = uri.pathSegments - if (resPath.size >= 2 && resPath[0] == "drawable") { - val resourceName = resPath[1] - val resourceId = packageContext.resources.getIdentifier( - resourceName, "drawable", packageName - ) - - if (resourceId != 0) { - val drawable = packageContext.resources.getDrawable( - resourceId, packageContext.theme - ) - imageView.setImageDrawable(drawable) - imageView.alpha = 1.0f - log(Log.INFO, TAG, "Successfully loaded icon from resource: $resourceName") - } else { - log(Log.ERROR, TAG, "Resource not found: $resourceName") - } - } - } catch (e: Exception) { - log(Log.ERROR, TAG, "Error loading resource from URI $uri: ${e.message}") - } - } - null - } catch (e: Exception) { - log(Log.ERROR, TAG, "Error in Bluetooth icon hook: ${e.message}") - chain.proceed() - } - } - - log(Log.INFO, TAG, "Successfully hooked updateIcon method in Bluetooth settings") - } catch (e: Exception) { - log(Log.ERROR, TAG, "Failed to hook Bluetooth icon handler: ${e.message}") - } - } -} - - -object NativeBridge { - external fun setSdpHook(enabled: Boolean) -} diff --git a/android/app/src/normal/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt b/android/app/src/normal/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt deleted file mode 100644 index 5412c5f..0000000 --- a/android/app/src/normal/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt +++ /dev/null @@ -1,28 +0,0 @@ -package me.kavishdevar.librepods.utils - -import android.content.Context -import io.github.libxposed.service.XposedService -import io.github.libxposed.service.XposedServiceHelper - -object XposedServiceHolder { - var service: XposedService? = null -} - - -object XposedInitializer: XposedServiceHelper.OnServiceListener { - private var initialized = false - - fun ensureInit(context: Context) { - if (initialized) return - initialized = true - XposedServiceHelper.registerListener(this) - } - - override fun onServiceBind(service: XposedService) { - XposedServiceHolder.service = service - } - - override fun onServiceDied(service: XposedService) { - XposedServiceHolder.service = null - } -} diff --git a/android/app/src/main/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt b/android/app/src/xposed/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt similarity index 100% rename from android/app/src/main/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt rename to android/app/src/xposed/java/me/kavishdevar/librepods/utils/XposedServiceHolder.kt