Skip to content

Commit 445c999

Browse files
committed
android: start head gestures after auto-connect
1 parent 96e63cf commit 445c999

1 file changed

Lines changed: 31 additions & 5 deletions

File tree

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

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)