Improve feature support for fake AirPods Gen3 (#72)

Remove microphone detection and add ear detection.
This commit is contained in:
Matthias Urhahn
2023-01-06 16:40:03 +01:00
committed by GitHub
parent 4101fddc5b
commit fcbeda4888
2 changed files with 15 additions and 14 deletions
@@ -28,7 +28,7 @@ data class FakeAirPodsGen3 constructor(
override val confidence: Float = PodDevice.BASE_CONFIDENCE,
private val rssiAverage: Int? = null,
private val cachedBatteryPercentage: Float? = null,
) : ApplePods, DualPodDevice, HasDualMicrophone, HasCase, HasChargeDetectionDual {
) : ApplePods, DualPodDevice, HasEarDetectionDual, HasChargeDetectionDual, HasCase {
override val model: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_GEN3
@@ -88,22 +88,20 @@ data class FakeAirPodsGen3 constructor(
true -> rawFlags.isBitSet(0)
}
val isThisPodInThecase: Boolean
private val isThisPodInThecase: Boolean
get() = rawStatus.isBitSet(6)
/**
* The data flip bit is set if the left pod is primary.
* For the pod that is in the case, this is flipped again though.
*/
override val isLeftPodMicrophone: Boolean
get() = rawStatus.isBitSet(5) xor isThisPodInThecase
override val isLeftPodInEar: Boolean
get() = when (areValuesFlipped xor isThisPodInThecase) {
true -> rawStatus.isBitSet(3)
false -> rawStatus.isBitSet(1)
}
/**
* The data flip bit is UNset if the right pod is primary.
* For the pod that is in the case, this is flipped again though.
*/
override val isRightPodMicrophone: Boolean
get() = !rawStatus.isBitSet(5) xor isThisPodInThecase
override val isRightPodInEar: Boolean
get() = when (areValuesFlipped xor isThisPodInThecase) {
true -> rawStatus.isBitSet(1)
false -> rawStatus.isBitSet(3)
}
override val batteryCasePercent: Float?
get() = when (val value = rawCaseBattery.toInt()) {
@@ -24,6 +24,9 @@ class FakeAirPodsGen3Test : BaseAirPodsTest() {
batteryLeftPodPercent shouldBe 1f
batteryRightPodPercent shouldBe 1f
isLeftPodInEar shouldBe false
isRightPodInEar shouldBe false
isCaseCharging shouldBe false
isLeftPodCharging shouldBe true
isRightPodCharging shouldBe true