android: listen for intents to set anc mode

This commit is contained in:
Kavish Devar
2025-05-09 08:56:10 +05:30
parent d381adaa09
commit 45ed8a3a88

View File

@@ -901,13 +901,58 @@ class AirPodsService : Service() {
Log.d("AirPodsService", "Metadata set: $metadataSet")
}
}
val ancModeFilter = IntentFilter("me.kavishdevar.librepods.SET_ANC_MODE")
var ancModeReceiver: BroadcastReceiver? = null
@SuppressLint("InlinedApi", "MissingPermission", "UnspecifiedRegisterReceiverFlag")
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d("AirPodsService", "Service started")
ServiceManager.setService(this)
startForegroundNotification()
initGestureDetector()
ancModeReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == "me.kavishdevar.librepods.SET_ANC_MODE") {
if (intent.hasExtra("mode")) {
// If a specific mode is requested, use it
val mode = intent.getIntExtra("mode", -1)
if (mode in 1..4) {
setANCMode(mode)
}
} else {
val currentMode = ancNotification.status
val offListeningMode = sharedPreferences.getBoolean("off_listening_mode", true)
val nextMode = if (offListeningMode) {
when (currentMode) {
1 -> 2
2 -> 3
3 -> 4
4 -> 1
else -> 1
}
} else {
when (currentMode) {
1 -> 2
2 -> 3
3 -> 4
4 -> 2
else -> 2
}
}
setANCMode(nextMode)
Log.d("AirPodsService", "Cycling ANC mode from $currentMode to $nextMode (offListeningMode: $offListeningMode)")
}
}
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
registerReceiver(ancModeReceiver, ancModeFilter, RECEIVER_EXPORTED)
} else {
registerReceiver(ancModeReceiver, ancModeFilter)
}
val audioManager =
this@AirPodsService.getSystemService(AUDIO_SERVICE) as AudioManager
MediaController.initialize(
@@ -1962,6 +2007,11 @@ class AirPodsService : Service() {
} catch (e: Exception) {
e.printStackTrace()
}
try {
unregisterReceiver(ancModeReceiver)
} catch (e: Exception) {
e.printStackTrace()
}
try {
unregisterReceiver(connectionReceiver)
} catch (e: Exception) {