From 36ae35918a6faa524cf1ea54ad49938b27913080 Mon Sep 17 00:00:00 2001 From: darken Date: Sat, 25 Apr 2026 15:51:46 +0200 Subject: [PATCH] refactor(widget): Move WidgetDeviceKey into widget package --- app/src/main/java/eu/darken/capod/App.kt | 34 +--------------- .../capod/main/ui/widget/WidgetDeviceKey.kt | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 33 deletions(-) create mode 100644 app/src/main/java/eu/darken/capod/main/ui/widget/WidgetDeviceKey.kt diff --git a/app/src/main/java/eu/darken/capod/App.kt b/app/src/main/java/eu/darken/capod/App.kt index 1fa02b9e..2d5fec08 100644 --- a/app/src/main/java/eu/darken/capod/App.kt +++ b/app/src/main/java/eu/darken/capod/App.kt @@ -17,13 +17,11 @@ import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.common.flow.throttleLatest import eu.darken.capod.common.upgrade.UpgradeRepo import eu.darken.capod.main.ui.widget.WidgetManager +import eu.darken.capod.main.ui.widget.toWidgetKey import eu.darken.capod.monitor.core.DeviceMonitor -import eu.darken.capod.monitor.core.PodDevice import eu.darken.capod.monitor.core.devicesWithProfiles -import eu.darken.capod.pods.core.apple.PodModel -import eu.darken.capod.pods.core.apple.aap.protocol.AapSetting import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.distinctUntilChangedBy import kotlinx.coroutines.flow.launchIn @@ -99,33 +97,3 @@ open class App : Application() { } } } - -private data class WidgetDeviceKey( - val profileId: String?, - val model: PodModel, - val batteryLeft: Float?, - val batteryRight: Float?, - val batteryCase: Float?, - val batteryHeadset: Float?, - val isLeftPodCharging: Boolean?, - val isRightPodCharging: Boolean?, - val isCaseCharging: Boolean?, - val isHeadsetBeingCharged: Boolean?, - val ancMode: AapSetting.AncMode.Value?, - val pendingAncMode: AapSetting.AncMode.Value?, -) - -private fun PodDevice.toWidgetKey(): WidgetDeviceKey = WidgetDeviceKey( - profileId = profileId, - model = model, - batteryLeft = batteryLeft, - batteryRight = batteryRight, - batteryCase = batteryCase, - batteryHeadset = batteryHeadset, - isLeftPodCharging = isLeftPodCharging, - isRightPodCharging = isRightPodCharging, - isCaseCharging = isCaseCharging, - isHeadsetBeingCharged = isHeadsetBeingCharged, - ancMode = ancMode?.current, - pendingAncMode = pendingAncMode, -) diff --git a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetDeviceKey.kt b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetDeviceKey.kt new file mode 100644 index 00000000..9c2d4e67 --- /dev/null +++ b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetDeviceKey.kt @@ -0,0 +1,40 @@ +package eu.darken.capod.main.ui.widget + +import eu.darken.capod.monitor.core.PodDevice +import eu.darken.capod.pods.core.apple.PodModel +import eu.darken.capod.pods.core.apple.aap.protocol.AapSetting + +/** + * Snapshot of the [PodDevice] fields that affect widget rendering. Used to + * gate widget refreshes so RSSI / reliability / scan-counter churn doesn't + * cause a refresh on every BLE advertisement. + */ +internal data class WidgetDeviceKey( + val profileId: String?, + val model: PodModel, + val batteryLeft: Float?, + val batteryRight: Float?, + val batteryCase: Float?, + val batteryHeadset: Float?, + val isLeftPodCharging: Boolean?, + val isRightPodCharging: Boolean?, + val isCaseCharging: Boolean?, + val isHeadsetBeingCharged: Boolean?, + val ancMode: AapSetting.AncMode.Value?, + val pendingAncMode: AapSetting.AncMode.Value?, +) + +internal fun PodDevice.toWidgetKey(): WidgetDeviceKey = WidgetDeviceKey( + profileId = profileId, + model = model, + batteryLeft = batteryLeft, + batteryRight = batteryRight, + batteryCase = batteryCase, + batteryHeadset = batteryHeadset, + isLeftPodCharging = isLeftPodCharging, + isRightPodCharging = isRightPodCharging, + isCaseCharging = isCaseCharging, + isHeadsetBeingCharged = isHeadsetBeingCharged, + ancMode = ancMode?.current, + pendingAncMode = pendingAncMode, +)