Skip to content

Commit 45ed8a3

Browse files
committed
android: listen for intents to set anc mode
1 parent d381ada commit 45ed8a3

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

android/app/src/main/java/me/kavishdevar/librepods/services/AirPodsService.kt

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,13 +901,58 @@ class AirPodsService : Service() {
901901
Log.d("AirPodsService", "Metadata set: $metadataSet")
902902
}
903903
}
904-
904+
val ancModeFilter = IntentFilter("me.kavishdevar.librepods.SET_ANC_MODE")
905+
var ancModeReceiver: BroadcastReceiver? = null
905906
@SuppressLint("InlinedApi", "MissingPermission", "UnspecifiedRegisterReceiverFlag")
906907
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
907908
Log.d("AirPodsService", "Service started")
908909
ServiceManager.setService(this)
909910
startForegroundNotification()
910911
initGestureDetector()
912+
913+
ancModeReceiver = object : BroadcastReceiver() {
914+
override fun onReceive(context: Context?, intent: Intent?) {
915+
if (intent?.action == "me.kavishdevar.librepods.SET_ANC_MODE") {
916+
if (intent.hasExtra("mode")) {
917+
// If a specific mode is requested, use it
918+
val mode = intent.getIntExtra("mode", -1)
919+
if (mode in 1..4) {
920+
setANCMode(mode)
921+
}
922+
} else {
923+
val currentMode = ancNotification.status
924+
val offListeningMode = sharedPreferences.getBoolean("off_listening_mode", true)
925+
926+
val nextMode = if (offListeningMode) {
927+
when (currentMode) {
928+
1 -> 2
929+
2 -> 3
930+
3 -> 4
931+
4 -> 1
932+
else -> 1
933+
}
934+
} else {
935+
when (currentMode) {
936+
1 -> 2
937+
2 -> 3
938+
3 -> 4
939+
4 -> 2
940+
else -> 2
941+
}
942+
}
943+
944+
setANCMode(nextMode)
945+
Log.d("AirPodsService", "Cycling ANC mode from $currentMode to $nextMode (offListeningMode: $offListeningMode)")
946+
}
947+
}
948+
}
949+
}
950+
951+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
952+
registerReceiver(ancModeReceiver, ancModeFilter, RECEIVER_EXPORTED)
953+
} else {
954+
registerReceiver(ancModeReceiver, ancModeFilter)
955+
}
911956
val audioManager =
912957
this@AirPodsService.getSystemService(AUDIO_SERVICE) as AudioManager
913958
MediaController.initialize(
@@ -1962,6 +2007,11 @@ class AirPodsService : Service() {
19622007
} catch (e: Exception) {
19632008
e.printStackTrace()
19642009
}
2010+
try {
2011+
unregisterReceiver(ancModeReceiver)
2012+
} catch (e: Exception) {
2013+
e.printStackTrace()
2014+
}
19652015
try {
19662016
unregisterReceiver(connectionReceiver)
19672017
} catch (e: Exception) {

0 commit comments

Comments
 (0)