From 58dfed97b333107e0e13d9c88fa0af23e9d120d5 Mon Sep 17 00:00:00 2001 From: Kavish Devar Date: Thu, 8 May 2025 23:50:30 +0530 Subject: [PATCH] android: fix the xposed module skip unecessary parsing the argument for debugging, just return true and hope that it works --- android/app/build.gradle.kts | 4 +- android/app/src/main/AndroidManifest.xml | 18 +- android/app/src/main/cpp/l2c_fcr_hook.cpp | 15 +- .../me/kavishdevar/librepods/MainActivity.kt | 8 +- .../librepods/screens/AppSettingsScreen.kt | 94 ++++++- .../librepods/screens/HeadTrackingScreen.kt | 6 + .../librepods/services/AirPodsQSService.kt | 40 +++ .../librepods/services/AirPodsService.kt | 235 +++++++++++++++++- .../librepods/utils/CrossDevice.kt | 2 +- .../librepods/utils/RadareOffsetFinder.kt | 6 +- .../librepods/utils/SystemAPIUtils.kt | 21 ++ .../librepods/widgets/BatteryWidget.kt | 8 +- .../librepods/widgets/NoiseControlWidget.kt | 2 + .../app/src/main/res/drawable/pro_2_left.png | Bin 0 -> 35720 bytes .../app/src/main/res/drawable/pro_2_right.png | Bin 0 -> 37346 bytes 15 files changed, 406 insertions(+), 53 deletions(-) create mode 100644 android/app/src/main/res/drawable/pro_2_left.png create mode 100644 android/app/src/main/res/drawable/pro_2_right.png diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 05f1c78..c74a56b 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -13,8 +13,8 @@ android { applicationId = "me.kavishdevar.librepods" minSdk = 28 targetSdk = 35 - versionCode = 4 - versionName = "0.1.0" + versionCode = 5 + versionName = "0.1.0-rc.2" } buildTypes { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 4c1f11b..7249171 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,24 +1,26 @@ + xmlns:tools="http://schemas.android.com/tools" + android:sharedUserId="android.uid.system" + android:sharedUserMaxSdkVersion="32" + tools:targetApi="33"> + + + - - + + (p_ccb); - LOGI("Original FCR mode: 0x%02x", ccb->our_cfg.fcr.mode); - - ccb->our_cfg.fcr.mode = 0; - ccb->our_cfg.fcr_present = true; - ccb->peer_cfg.fcr.mode = 0; - ccb->peer_cfg.fcr_present = true; - - LOGI("FCR mode set to Basic Mode (0) for both local and peer config, here's the new desired FCR mode: 0x%02x, and the peer's FCR mode: 0x%02x", ccb->our_cfg.fcr.mode, ccb->peer_cfg.fcr.mode); - + LOGI("l2c_fcr_chk_chan_modes hooked, returning true."); return 1; } diff --git a/android/app/src/main/java/me/kavishdevar/librepods/MainActivity.kt b/android/app/src/main/java/me/kavishdevar/librepods/MainActivity.kt index ce25b1b..505d7e3 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/MainActivity.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/MainActivity.kt @@ -186,6 +186,8 @@ fun Main() { permissions = listOf( "android.permission.BLUETOOTH_CONNECT", "android.permission.BLUETOOTH_SCAN", + "android.permission.BLUETOOTH", + "android.permission.BLUETOOTH_ADMIN", "android.permission.BLUETOOTH_ADVERTISE", "android.permission.POST_NOTIFICATIONS", "android.permission.READ_PHONE_STATE", @@ -517,16 +519,16 @@ fun PermissionsScreen( ), ) } - + if (!canDrawOverlays && basicPermissionsGranted) { Spacer(modifier = Modifier.height(12.dp)) - + Button( onClick = { val editor = context.getSharedPreferences("settings", MODE_PRIVATE).edit() editor.putBoolean("overlay_permission_skipped", true) editor.apply() - + val intent = Intent(context, MainActivity::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) context.startActivity(intent) diff --git a/android/app/src/main/java/me/kavishdevar/librepods/screens/AppSettingsScreen.kt b/android/app/src/main/java/me/kavishdevar/librepods/screens/AppSettingsScreen.kt index 67289af..67bf3cd 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/screens/AppSettingsScreen.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/screens/AppSettingsScreen.kt @@ -71,6 +71,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController @@ -106,6 +107,7 @@ fun AppSettingsScreen(navController: NavController) { navController.popBackStack() }, shape = RoundedCornerShape(8.dp), + modifier = Modifier.width(180.dp) ) { Icon( Icons.AutoMirrored.Filled.KeyboardArrowLeft, @@ -121,6 +123,9 @@ fun AppSettingsScreen(navController: NavController) { color = if (isDarkTheme) Color(0xFF007AFF) else Color(0xFF3C6DF5), fontFamily = FontFamily(Font(R.font.sf_pro)) ), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = Modifier.weight(1f) ) } }, @@ -142,10 +147,22 @@ fun AppSettingsScreen(navController: NavController) { val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF) val textColor = if (isDarkTheme) Color.White else Color.Black - val accentColor = if (isDarkTheme) Color(0xFF007AFF) else Color(0xFF3C6DF5) IndependentToggle("Show phone battery in widget", ServiceManager.getService()!!, "setPhoneBatteryInWidget", sharedPreferences) + Text( + text = stringResource(R.string.conversational_awareness_customization).uppercase(), + style = TextStyle( + fontSize = 14.sp, + fontWeight = FontWeight.Light, + color = (if (isSystemInDarkTheme()) Color.White else Color.Black).copy(alpha = 0.6f), + fontFamily = FontFamily(Font(R.font.sf_pro)) + ), + modifier = Modifier.padding(8.dp, bottom = 2.dp) + ) + + Spacer(modifier = Modifier.height(2.dp)) + Column ( modifier = Modifier .fillMaxWidth() @@ -170,17 +187,6 @@ fun AppSettingsScreen(navController: NavController) { val thumbColor = if (isDarkTheme) Color(0xFFFFFFFF) else Color(0xFFFFFFFF) val labelTextColor = if (isDarkTheme) Color.White else Color.Black - Text( - text = stringResource(R.string.conversational_awareness_customization), - style = TextStyle( - fontSize = 20.sp, - color = textColor - ), - modifier = Modifier - .padding(top = 12.dp, bottom = 4.dp) - ) - - var conversationalAwarenessPauseMusicEnabled by remember { mutableStateOf( sharedPreferences.getBoolean("conversational_awareness_pause_music", true) @@ -367,6 +373,70 @@ fun AppSettingsScreen(navController: NavController) { Spacer(modifier = Modifier.height(24.dp)) + Column( + modifier = Modifier + .fillMaxWidth() + .background( + backgroundColor, + RoundedCornerShape(14.dp) + ) + .padding(horizontal = 16.dp, vertical = 8.dp) + ) { + var openDialogForControlling by remember { + mutableStateOf( + sharedPreferences.getString("qs_click_behavior", "dialog") == "dialog" + ) + } + + fun updateQsClickBehavior(enabled: Boolean) { + openDialogForControlling = enabled + sharedPreferences.edit().putString("qs_click_behavior", if (enabled) "dialog" else "cycle").apply() + } + + Row( + modifier = Modifier + .fillMaxWidth() + .clickable( + indication = null, + interactionSource = remember { MutableInteractionSource() } + ) { + updateQsClickBehavior(!openDialogForControlling) + }, + verticalAlignment = Alignment.CenterVertically + ) { + Column( + modifier = Modifier + .weight(1f) + .padding(vertical = 16.dp) + .padding(end = 4.dp) + ) { + Text( + text = "Open dialog for controlling", + fontSize = 16.sp, + color = textColor + ) + Spacer(modifier = Modifier.height(4.dp)) + Text( + text = if (openDialogForControlling) + "If disabled, clicking on the QS will cycle through modes" + else "If enabled, it will show a dialog for controlling noise control mode and conversational awareness", + fontSize = 14.sp, + color = textColor.copy(0.6f), + lineHeight = 16.sp, + ) + } + + StyledSwitch( + checked = openDialogForControlling, + onCheckedChange = { + updateQsClickBehavior(it) + } + ) + } + } + + Spacer(modifier = Modifier.height(24.dp)) + Button( onClick = { showResetDialog = true }, modifier = Modifier diff --git a/android/app/src/main/java/me/kavishdevar/librepods/screens/HeadTrackingScreen.kt b/android/app/src/main/java/me/kavishdevar/librepods/screens/HeadTrackingScreen.kt index b60666b..69f4a20 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/screens/HeadTrackingScreen.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/screens/HeadTrackingScreen.kt @@ -39,6 +39,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft @@ -92,6 +93,7 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.rememberTextMeasurer import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -138,6 +140,7 @@ fun HeadTrackingScreen(navController: NavController) { if (ServiceManager.getService()?.isHeadTrackingActive == true) ServiceManager.getService()?.stopHeadTracking() }, shape = RoundedCornerShape(8.dp), + modifier = Modifier.width(180.dp) ) { Icon( Icons.AutoMirrored.Filled.KeyboardArrowLeft, @@ -153,6 +156,9 @@ fun HeadTrackingScreen(navController: NavController) { color = if (isDarkTheme) Color(0xFF007AFF) else Color(0xFF3C6DF5), fontFamily = FontFamily(Font(R.font.sf_pro)) ), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + modifier = Modifier.weight(1f) ) } }, diff --git a/android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsQSService.kt b/android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsQSService.kt index 277a221..4106256 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsQSService.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsQSService.kt @@ -31,6 +31,8 @@ import android.service.quicksettings.Tile import android.service.quicksettings.TileService import android.util.Log import androidx.annotation.RequiresApi +import androidx.compose.material3.ExperimentalMaterial3Api +import me.kavishdevar.librepods.MainActivity import me.kavishdevar.librepods.QuickSettingsDialogActivity import me.kavishdevar.librepods.R import me.kavishdevar.librepods.utils.AirPodsNotifications @@ -260,4 +262,42 @@ class AirPodsQSService : TileService() { else -> R.drawable.airpods } } + + @ExperimentalMaterial3Api + override fun onTileAdded() { + super.onTileAdded() + Log.d("AirPodsQSService", "Tile added") + + val intent = Intent(this, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + } + + @ExperimentalMaterial3Api + fun openMainActivity() { + Log.d("AirPodsQSService", "Opening MainActivity") + + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + val pendingIntent = PendingIntent.getActivity( + this, + 0, + Intent(this, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + }, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + ) + startActivityAndCollapse(pendingIntent) + } else { + @Suppress("DEPRECATION") + val intent = Intent(this, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + startActivityAndCollapse(intent) + } + Log.d("AirPodsQSService", "Called startActivityAndCollapse for MainActivity") + } catch (e: Exception) { + Log.e("AirPodsQSService", "Error launching MainActivity: $e") + } + } } diff --git a/android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsService.kt b/android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsService.kt index 6102a6e..9b88369 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsService.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsService.kt @@ -26,12 +26,14 @@ import android.app.NotificationManager import android.app.PendingIntent import android.app.Service import android.appwidget.AppWidgetManager +import android.bluetooth.BluetoothAssignedNumbers.APPLE import android.bluetooth.BluetoothDevice import android.bluetooth.BluetoothManager import android.bluetooth.BluetoothProfile import android.bluetooth.BluetoothSocket import android.content.BroadcastReceiver import android.content.ComponentName +import android.content.ContentResolver import android.content.Context import android.content.Intent import android.content.IntentFilter @@ -39,6 +41,7 @@ import android.content.SharedPreferences import android.content.pm.PackageManager import android.content.res.Resources import android.media.AudioManager +import android.net.Uri import android.os.BatteryManager import android.os.Binder import android.os.Build @@ -46,6 +49,7 @@ import android.os.Handler import android.os.IBinder import android.os.Looper import android.os.ParcelUuid +import android.os.UserHandle import android.provider.Settings import android.telecom.TelecomManager import android.telephony.PhoneStateListener @@ -85,6 +89,26 @@ import me.kavishdevar.librepods.utils.LongPressPackets import me.kavishdevar.librepods.utils.MediaController import me.kavishdevar.librepods.utils.PopupWindow import me.kavishdevar.librepods.utils.RadareOffsetFinder +import me.kavishdevar.librepods.utils.SystemApisUtils +import me.kavishdevar.librepods.utils.SystemApisUtils.DEVICE_TYPE_UNTETHERED_HEADSET +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_COMPANION_APP +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_DEVICE_TYPE +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_MAIN_BATTERY +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_MAIN_ICON +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_MANUFACTURER_NAME +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_MODEL_NAME +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_CASE_BATTERY +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_CASE_CHARGING +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_CASE_ICON +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_CASE_LOW_BATTERY_THRESHOLD +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_LEFT_BATTERY +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_LEFT_CHARGING +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_LEFT_ICON +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_LEFT_LOW_BATTERY_THRESHOLD +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_RIGHT_BATTERY +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_RIGHT_CHARGING +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_RIGHT_ICON +import me.kavishdevar.librepods.utils.SystemApisUtils.METADATA_UNTETHERED_RIGHT_LOW_BATTERY_THRESHOLD import me.kavishdevar.librepods.utils.isHeadTrackingData import me.kavishdevar.librepods.widgets.BatteryWidget import me.kavishdevar.librepods.widgets.NoiseControlWidget @@ -295,7 +319,7 @@ class AirPodsService : Service() { object BatteryChangedIntentReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent) { if (intent.action == Intent.ACTION_BATTERY_CHANGED) { - ServiceManager.getService()?.updateBatteryWidget() + ServiceManager.getService()?.updateBattery() } else if (intent.action == AirPodsNotifications.DISCONNECT_RECEIVERS) { try { context?.unregisterReceiver(this) @@ -308,7 +332,7 @@ class AirPodsService : Service() { fun setPhoneBatteryInWidget(enabled: Boolean) { widgetMobileBatteryEnabled = enabled - updateBatteryWidget() + updateBattery() } @OptIn(ExperimentalMaterial3Api::class) @@ -369,7 +393,8 @@ class AirPodsService : Service() { } @OptIn(ExperimentalMaterial3Api::class) - fun updateBatteryWidget() { + fun updateBattery() { + // Update widget val appWidgetManager = AppWidgetManager.getInstance(this) val componentName = ComponentName(this, BatteryWidget::class.java) val widgetIds = appWidgetManager.getAppWidgetIds(componentName) @@ -463,6 +488,43 @@ class AirPodsService : Service() { } } appWidgetManager.updateAppWidget(widgetIds, remoteViews) + + // set metadata + device?.let { + SystemApisUtils.setMetadata( + it, + it.METADATA_UNTETHERED_CASE_BATTERY, + batteryNotification.getBattery().find { it.component == BatteryComponent.CASE }?.level.toString().toByteArray() + ) + SystemApisUtils.setMetadata( + it, + it.METADATA_UNTETHERED_CASE_CHARGING, + (if (batteryNotification.getBattery().find { it.component == BatteryComponent.CASE}?.status == BatteryStatus.CHARGING) "1".toByteArray() else "0".toByteArray()) + ) + SystemApisUtils.setMetadata( + it, + it.METADATA_UNTETHERED_LEFT_BATTERY, + batteryNotification.getBattery().find { it.component == BatteryComponent.LEFT }?.level.toString().toByteArray() + ) + SystemApisUtils.setMetadata( + it, + it.METADATA_UNTETHERED_LEFT_CHARGING, + (if (batteryNotification.getBattery().find { it.component == BatteryComponent.LEFT}?.status == BatteryStatus.CHARGING) "1".toByteArray() else "0".toByteArray()) + ) + SystemApisUtils.setMetadata( + it, + it.METADATA_UNTETHERED_RIGHT_BATTERY, + batteryNotification.getBattery().find { it.component == BatteryComponent.RIGHT }?.level.toString().toByteArray() + ) + SystemApisUtils.setMetadata( + it, + it.METADATA_UNTETHERED_RIGHT_CHARGING, + (if (batteryNotification.getBattery().find { it.component == BatteryComponent.RIGHT}?.status == BatteryStatus.CHARGING) "1".toByteArray() else "0".toByteArray()) + ) + } + + // broadcast +// broadcastBatteryInformation() } fun updateNoiseControlWidget() { @@ -678,6 +740,168 @@ class AirPodsService : Service() { private lateinit var connectionReceiver: BroadcastReceiver private lateinit var disconnectionReceiver: BroadcastReceiver + private fun resToUri(resId: Int): Uri? { + return try { + Uri.Builder() + .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) + .authority("me.kavishdevar.librepods") + .appendPath(applicationContext.resources.getResourceTypeName(resId)) + .appendPath(applicationContext.resources.getResourceEntryName(resId)) + .build() + } catch (e: Resources.NotFoundException) { + null + } + } + + private val VENDOR_SPECIFIC_HEADSET_EVENT_IPHONEACCEV = "+IPHONEACCEV" + private val VENDOR_SPECIFIC_HEADSET_EVENT_IPHONEACCEV_BATTERY_LEVEL = 1 + private val APPLE = 0x004C + private val ACTION_BATTERY_LEVEL_CHANGED = "android.bluetooth.device.action.BATTERY_LEVEL_CHANGED" + private val EXTRA_BATTERY_LEVEL = "android.bluetooth.device.extra.BATTERY_LEVEL" + private val PACKAGE_ASI = "com.google.android.settings.intelligence" + private val ACTION_ASI_UPDATE_BLUETOOTH_DATA = "batterywidget.impl.action.update_bluetooth_data" + + @Suppress("MissingPermission") + fun broadcastBatteryInformation() { + if (device == null) return + + val batteryList = batteryNotification.getBattery() + val leftBattery = batteryList.find { it.component == BatteryComponent.LEFT } + val rightBattery = batteryList.find { it.component == BatteryComponent.RIGHT } + + // Calculate unified battery level (minimum of left and right) + val batteryUnified = minOf( + leftBattery?.level ?: 100, + rightBattery?.level ?: 100 + ) + + // Check charging status + val isLeftCharging = leftBattery?.status == BatteryStatus.CHARGING + val isRightCharging = rightBattery?.status == BatteryStatus.CHARGING + val isChargingMain = isLeftCharging && isRightCharging + + // Create arguments for vendor-specific event + val arguments = arrayOf( + 1, // Number of key/value pairs + VENDOR_SPECIFIC_HEADSET_EVENT_IPHONEACCEV_BATTERY_LEVEL, // IndicatorType: Battery Level + batteryUnified // Battery Level + ) + + // Broadcast vendor-specific event + val intent = Intent(android.bluetooth.BluetoothHeadset.ACTION_VENDOR_SPECIFIC_HEADSET_EVENT).apply { + putExtra(android.bluetooth.BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD, VENDOR_SPECIFIC_HEADSET_EVENT_IPHONEACCEV) + putExtra(android.bluetooth.BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE, android.bluetooth.BluetoothHeadset.AT_CMD_TYPE_SET) + putExtra(android.bluetooth.BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS, arguments) + putExtra(BluetoothDevice.EXTRA_DEVICE, device) + putExtra(BluetoothDevice.EXTRA_NAME, device?.name) + addCategory("${android.bluetooth.BluetoothHeadset.VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY}.$APPLE") + } + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + sendBroadcastAsUser( + intent, + UserHandle.getUserHandleForUid(-1), + Manifest.permission.BLUETOOTH_CONNECT + ) + } else { + sendBroadcastAsUser(intent, UserHandle.getUserHandleForUid(-1)) + } + } catch (e: Exception) { + Log.e("AirPodsService", "Failed to send vendor-specific event: ${e.message}") + } + + // Broadcast battery level changes + val batteryIntent = Intent(ACTION_BATTERY_LEVEL_CHANGED).apply { + putExtra(BluetoothDevice.EXTRA_DEVICE, device) + putExtra(EXTRA_BATTERY_LEVEL, batteryUnified) + } + + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + sendBroadcast(batteryIntent, Manifest.permission.BLUETOOTH_CONNECT) + } else { + sendBroadcastAsUser(batteryIntent, UserHandle.getUserHandleForUid(-1)) + } + } catch (e: Exception) { + Log.e("AirPodsService", "Failed to send battery level broadcast: ${e.message}") + } + + // Update Android Settings Intelligence's battery widget + val statusIntent = Intent(ACTION_ASI_UPDATE_BLUETOOTH_DATA).apply { + setPackage(PACKAGE_ASI) + putExtra(ACTION_BATTERY_LEVEL_CHANGED, intent) + } + + try { + sendBroadcastAsUser(statusIntent, UserHandle.getUserHandleForUid(-1)) + } catch (e: Exception) { + Log.e("AirPodsService", "Failed to send ASI battery level broadcast: ${e.message}") + } + + Log.d("AirPodsService", "Broadcast battery level $batteryUnified% to system") + } + + private fun setMetadatas(d: BluetoothDevice) { + d.let{ device -> + val metadataSet = SystemApisUtils.setMetadata( + device, + device.METADATA_MAIN_ICON, + resToUri(R.drawable.pro_2).toString().toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_MODEL_NAME, + "AirPods Pro (2 Gen.)".toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_DEVICE_TYPE, + device.DEVICE_TYPE_UNTETHERED_HEADSET.toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_UNTETHERED_CASE_ICON, + resToUri(R.drawable.pro_2_case).toString().toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_UNTETHERED_RIGHT_ICON, + resToUri(R.drawable.pro_2_right).toString().toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_UNTETHERED_LEFT_ICON, + resToUri(R.drawable.pro_2_left).toString().toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_MANUFACTURER_NAME, + "Apple".toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_COMPANION_APP, + "me.kavisdevar.librepods".toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_UNTETHERED_CASE_LOW_BATTERY_THRESHOLD, + "20".toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_UNTETHERED_LEFT_LOW_BATTERY_THRESHOLD, + "20".toByteArray() + ) && + SystemApisUtils.setMetadata( + device, + device.METADATA_UNTETHERED_RIGHT_LOW_BATTERY_THRESHOLD, + "20".toByteArray() + ) + Log.d("AirPodsService", "Metadata set: $metadataSet") + } + } + @SuppressLint("InlinedApi", "MissingPermission", "UnspecifiedRegisterReceiverFlag") override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { Log.d("AirPodsService", "Service started") @@ -778,6 +1002,8 @@ class AirPodsService : Service() { Log.d("AirPodsService", "$name connected") showPopup(this@AirPodsService, name.toString()) connectToSocket(device!!) + Log.d("AirPodsService", "Setting metadata") + setMetadatas(device!!) isConnectedLocally = true macAddress = device!!.address sharedPreferences.edit { @@ -850,6 +1076,7 @@ class AirPodsService : Service() { if (connectedDevices.isNotEmpty()) { if (!CrossDevice.isAvailable) { connectToSocket(device) + setMetadatas(device) macAddress = device.address sharedPreferences.edit { putString("mac_address", macAddress) @@ -1186,7 +1413,7 @@ class AirPodsService : Service() { ArrayList(batteryNotification.getBattery()) ) }) - updateBatteryWidget() + updateBattery() updateNotificationContent( true, this@AirPodsService.getSharedPreferences( diff --git a/android/app/src/main/java/me/kavishdevar/librepods/utils/CrossDevice.kt b/android/app/src/main/java/me/kavishdevar/librepods/utils/CrossDevice.kt index bfbc611..deb1f29 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/utils/CrossDevice.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/utils/CrossDevice.kt @@ -238,7 +238,7 @@ object CrossDevice { batteryBytes = trimmedPacket ServiceManager.getService()?.batteryNotification?.setBattery(trimmedPacket) Log.d("CrossDevice", "Battery data: ${ServiceManager.getService()?.batteryNotification?.getBattery()[0]?.level}") - ServiceManager.getService()?.updateBatteryWidget() + ServiceManager.getService()?.updateBattery() ServiceManager.getService()?.sendBatteryBroadcast() ServiceManager.getService()?.sendBatteryNotification() } else if (ServiceManager.getService()?.ancNotification?.isANCData(trimmedPacket) == true) { diff --git a/android/app/src/main/java/me/kavishdevar/librepods/utils/RadareOffsetFinder.kt b/android/app/src/main/java/me/kavishdevar/librepods/utils/RadareOffsetFinder.kt index 2ab4159..5e6381a 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/utils/RadareOffsetFinder.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/utils/RadareOffsetFinder.kt @@ -416,9 +416,9 @@ class RadareOffsetFinder(context: Context) { Log.e(TAG, "rabin2 command failed with exit code $exitCode") } - // findAndSaveL2cuProcessCfgReqOffset(libraryPath, envSetup) - // findAndSaveL2cCsmConfigOffset(libraryPath, envSetup) - findAndSaveL2cuSendPeerInfoReqOffset(libraryPath, envSetup) +// findAndSaveL2cuProcessCfgReqOffset(libraryPath, envSetup) +// findAndSaveL2cCsmConfigOffset(libraryPath, envSetup) +// findAndSaveL2cuSendPeerInfoReqOffset(libraryPath, envSetup) } catch (e: Exception) { Log.e(TAG, "Failed to find function offset", e) diff --git a/android/app/src/main/java/me/kavishdevar/librepods/utils/SystemAPIUtils.kt b/android/app/src/main/java/me/kavishdevar/librepods/utils/SystemAPIUtils.kt index cb2a9b8..694fc86 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/utils/SystemAPIUtils.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/utils/SystemAPIUtils.kt @@ -1,6 +1,8 @@ package me.kavishdevar.librepods.utils import android.bluetooth.BluetoothDevice +import android.util.Log +import org.lsposed.hiddenapibypass.HiddenApiBypass object SystemApisUtils { @@ -282,4 +284,23 @@ object SystemApisUtils { const val ACTION_BLUETOOTH_HANDSFREE_BATTERY_CHANGED = "android.intent.action.BLUETOOTH_HANDSFREE_BATTERY_CHANGED" const val EXTRA_SHOW_BT_HANDSFREE_BATTERY = "android.intent.extra.show_bluetooth_handsfree_battery" const val EXTRA_BT_HANDSFREE_BATTERY_LEVEL = "android.intent.extra.bluetooth_handsfree_battery_level" + + /** + * Helper method to set metadata using HiddenApiBypass + */ + fun setMetadata(device: BluetoothDevice, key: Int, value: ByteArray): Boolean { + return try { + val result = HiddenApiBypass.invoke( + BluetoothDevice::class.java, + device, + "setMetadata", + key, + value + ) as Boolean + result + } catch (e: Exception) { + Log.e("SystemApisUtils", "Failed to set metadata for key $key", e) + false + } + } } diff --git a/android/app/src/main/java/me/kavishdevar/librepods/widgets/BatteryWidget.kt b/android/app/src/main/java/me/kavishdevar/librepods/widgets/BatteryWidget.kt index 279bf46..ae4c33c 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/widgets/BatteryWidget.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/widgets/BatteryWidget.kt @@ -19,15 +19,9 @@ package me.kavishdevar.librepods.widgets -import android.app.PendingIntent import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProvider import android.content.Context -import android.content.Intent -import android.widget.RemoteViews -import androidx.compose.material3.ExperimentalMaterial3Api -import me.kavishdevar.librepods.MainActivity -import me.kavishdevar.librepods.R import me.kavishdevar.librepods.services.ServiceManager class BatteryWidget : AppWidgetProvider() { @@ -36,6 +30,6 @@ class BatteryWidget : AppWidgetProvider() { appWidgetManager: AppWidgetManager, appWidgetIds: IntArray ) { - ServiceManager.getService()?.updateBatteryWidget() + ServiceManager.getService()?.updateBattery() } } diff --git a/android/app/src/main/java/me/kavishdevar/librepods/widgets/NoiseControlWidget.kt b/android/app/src/main/java/me/kavishdevar/librepods/widgets/NoiseControlWidget.kt index b791f3c..710257f 100644 --- a/android/app/src/main/java/me/kavishdevar/librepods/widgets/NoiseControlWidget.kt +++ b/android/app/src/main/java/me/kavishdevar/librepods/widgets/NoiseControlWidget.kt @@ -24,6 +24,7 @@ import android.appwidget.AppWidgetManager import android.appwidget.AppWidgetProvider import android.content.Context import android.content.Intent +import android.util.Log import android.widget.RemoteViews import me.kavishdevar.librepods.R import me.kavishdevar.librepods.services.ServiceManager @@ -77,6 +78,7 @@ class NoiseControlWidget : AppWidgetProvider() { super.onReceive(context, intent) if (intent.action == "ACTION_SET_ANC_MODE") { val mode = intent.getIntExtra("ANC_MODE", 1) + Log.d("NoiseControlWidget", "Setting ANC mode to $mode") ServiceManager.getService()?.setANCMode(mode) } } diff --git a/android/app/src/main/res/drawable/pro_2_left.png b/android/app/src/main/res/drawable/pro_2_left.png new file mode 100644 index 0000000000000000000000000000000000000000..a50b7a0e7e11fc7f00d35338611a35375dee9c94 GIT binary patch literal 35720 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έ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 x9PYYe%dbE$a?A7p~LZ{f>} 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 q|UgM~V?VUabnPfhOQ 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