@@ -183,6 +183,8 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
183183 private val maxLogEntries = 1000
184184 private val inMemoryLogs = mutableSetOf<String >()
185185
186+ private var handleIncomingCallOnceConnected = false
187+
186188 lateinit var bleManager: BLEManager
187189 private val bleStatusListener = object : BLEManager .AirPodsStatusListener {
188190 @SuppressLint(" NewApi" )
@@ -197,7 +199,24 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
197199 " mac_address" , " " ) ? : " " )
198200 connectToSocket(bluetoothDevice)
199201 }
200- Log .d(" AirPodsBLEService" , " Device status changed, inEar: ${device.isLeftInEar} , ${device.isRightInEar} " )
202+ Log .d(" AirPodsBLEService" , " Device status changed" )
203+ if (isConnectedLocally) return
204+ val leftLevel = bleManager.getMostRecentStatus()?.leftBattery? : 0
205+ val rightLevel = bleManager.getMostRecentStatus()?.rightBattery? : 0
206+ val caseLevel = bleManager.getMostRecentStatus()?.caseBattery? : 0
207+ val leftCharging = bleManager.getMostRecentStatus()?.isLeftCharging
208+ val rightCharging = bleManager.getMostRecentStatus()?.isRightCharging
209+ val caseCharging = bleManager.getMostRecentStatus()?.isCaseCharging
210+
211+ batteryNotification.setBatteryDirect(
212+ leftLevel = leftLevel,
213+ leftCharging = leftCharging == true ,
214+ rightLevel = rightLevel,
215+ rightCharging = rightCharging == true ,
216+ caseLevel = caseLevel,
217+ caseCharging = caseCharging == true
218+ )
219+ updateBattery()
201220 }
202221
203222 override fun onBroadcastFromNewAddress (device : BLEManager .AirPodsStatus ) {
@@ -213,7 +232,7 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
213232 this @AirPodsService,
214233 getSharedPreferences(" settings" , MODE_PRIVATE ).getString(" name" , " AirPods Pro" ) ? : " AirPods"
215234 )
216- if (isConnectedLocally) return
235+ if (isConnectedLocally) return
217236 val leftLevel = bleManager.getMostRecentStatus()?.leftBattery? : 0
218237 val rightLevel = bleManager.getMostRecentStatus()?.rightBattery? : 0
219238 val caseLevel = bleManager.getMostRecentStatus()?.caseBattery? : 0
@@ -1049,11 +1068,14 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
10491068 if (isInCall) return
10501069 if (config.headGestures) {
10511070 initGestureDetector()
1071+ aacpManager.sendStartHeadTracking()
10521072 gestureDetector?.startDetection { accepted ->
10531073 if (accepted) {
10541074 answerCall()
1075+ handleIncomingCallOnceConnected = false
10551076 } else {
10561077 rejectCall()
1078+ handleIncomingCallOnceConnected = false
10571079 }
10581080 }
10591081 }
@@ -1352,6 +1374,8 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
13521374 val ancModeFilter = IntentFilter (" me.kavishdevar.librepods.SET_ANC_MODE" )
13531375 var ancModeReceiver: BroadcastReceiver ? = null
13541376
1377+
1378+
13551379 @SuppressLint(" InlinedApi" , " MissingPermission" , " UnspecifiedRegisterReceiverFlag" )
13561380 override fun onStartCommand (intent : Intent ? , flags : Int , startId : Int ): Int {
13571381 Log .d(" AirPodsService" , " Service started" )
@@ -1683,7 +1707,7 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
16831707
16841708 if (CrossDevice .isAvailable) {
16851709 Log .d(" AirPodsService" , " CrossDevice is available, continuing" )
1686- }
1710+ }
16871711 else if (bleManager.getMostRecentStatus()?.isLeftInEar == true || bleManager.getMostRecentStatus()?.isRightInEar == true ) {
16881712 Log .d(" AirPodsService" , " At least one AirPod is in ear, continuing" )
16891713 }
@@ -1722,6 +1746,8 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
17221746 Log .d(" AirPodsService" , " Pausing music so that it doesn't play through speakers" )
17231747 MediaController .pausedForCrossDevice = true
17241748 MediaController .sendPause(true )
1749+ } else {
1750+ handleIncomingCallOnceConnected = true
17251751 }
17261752
17271753 Log .d(" AirPodsService" , " Taking over audio" )
@@ -1839,13 +1865,13 @@ class AirPodsService : Service(), SharedPreferences.OnSharedPreferenceChangeList
18391865 aacpManager.sendNotificationRequest()
18401866 delay(200 )
18411867 aacpManager.sendRequestProximityKeys((AACPManager .Companion .ProximityKeyType .IRK .value+ AACPManager .Companion .ProximityKeyType .ENC_KEY .value).toByte())
1842- startHeadTracking()
1868+ if ( ! handleIncomingCallOnceConnected) startHeadTracking() else handleIncomingCall ()
18431869 Handler (Looper .getMainLooper()).postDelayed({
18441870 aacpManager.sendPacket(aacpManager.createHandshakePacket())
18451871 aacpManager.sendSetFeatureFlagsPacket()
18461872 aacpManager.sendNotificationRequest()
18471873 aacpManager.sendRequestProximityKeys(AACPManager .Companion .ProximityKeyType .IRK .value)
1848- stopHeadTracking()
1874+ if ( ! handleIncomingCallOnceConnected) stopHeadTracking()
18491875 }, 5000 )
18501876
18511877 sendBroadcast(
0 commit comments