From fc6cd747527ba0aabf647f167ef65c61a1796a28 Mon Sep 17 00:00:00 2001 From: Matthias Urhahn Date: Thu, 2 Feb 2023 16:45:05 +0100 Subject: [PATCH] If the current pods don't have a lid state value, and there is none in recent history, we can assume NOT_IN_CASE. (#90) --- .../capod/pods/core/apple/ApplePodsFactory.kt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app-common/src/main/java/eu/darken/capod/pods/core/apple/ApplePodsFactory.kt b/app-common/src/main/java/eu/darken/capod/pods/core/apple/ApplePodsFactory.kt index 5eedcb60..eba9dd9b 100644 --- a/app-common/src/main/java/eu/darken/capod/pods/core/apple/ApplePodsFactory.kt +++ b/app-common/src/main/java/eu/darken/capod/pods/core/apple/ApplePodsFactory.kt @@ -8,7 +8,6 @@ import eu.darken.capod.common.lowerNibble import eu.darken.capod.common.upperNibble import eu.darken.capod.pods.core.HasCase import eu.darken.capod.pods.core.PodDevice -import eu.darken.capod.pods.core.apple.airpods.AirPodsPro import eu.darken.capod.pods.core.apple.protocol.ProximityPairing import java.time.Duration import java.time.Instant @@ -80,13 +79,19 @@ abstract class ApplePodsFactory(private val tag: String) { .lastOrNull() fun KnownDevice.getLatestCaseLidState(basic: DualApplePods): DualApplePods.LidState? { - val definitive = setOf(DualApplePods.LidState.OPEN, DualApplePods.LidState.CLOSED) - if (definitive.contains(basic.caseLidState)) return null + val definitive = setOf( + DualApplePods.LidState.OPEN, + DualApplePods.LidState.CLOSED, + DualApplePods.LidState.NOT_IN_CASE, + ) + if (definitive.contains(basic.caseLidState)) return basic.caseLidState return history - .filterIsInstance() // TODO why is this AirPodsPro specific here? - .lastOrNull { it.caseLidState != DualApplePods.LidState.NOT_IN_CASE } + .takeLast(2) + .filterIsInstance() + .lastOrNull { it.caseLidState != DualApplePods.LidState.UNKNOWN } ?.caseLidState + ?: DualApplePods.LidState.NOT_IN_CASE } open fun historyTrimmer(