@@ -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