diff --git a/app/src/debug/java/eu/darken/capod/screenshots/ScreenshotContent.kt b/app/src/debug/java/eu/darken/capod/screenshots/ScreenshotContent.kt index 2ad88e15..42636f2d 100644 --- a/app/src/debug/java/eu/darken/capod/screenshots/ScreenshotContent.kt +++ b/app/src/debug/java/eu/darken/capod/screenshots/ScreenshotContent.kt @@ -11,17 +11,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.compose.ui.graphics.toArgb -import eu.darken.capod.R import eu.darken.capod.common.compose.PreviewWrapper -import eu.darken.capod.main.ui.widget.ComposeWidgetPreview -import eu.darken.capod.main.ui.widget.WidgetRenderState -import eu.darken.capod.reaction.ui.popup.PopUpContent as PopUpCard -import eu.darken.capod.main.ui.widget.WidgetConfigurationScreen -import eu.darken.capod.main.ui.widget.WidgetConfigurationViewModel -import eu.darken.capod.main.ui.widget.WidgetTheme import eu.darken.capod.common.compose.preview.MOCK_NOW import eu.darken.capod.common.compose.preview.MockPodDataProvider import eu.darken.capod.common.theming.CapodTheme @@ -29,7 +22,12 @@ import eu.darken.capod.main.ui.overview.OverviewScreen import eu.darken.capod.main.ui.overview.OverviewViewModel import eu.darken.capod.main.ui.settings.SettingsScreen import eu.darken.capod.main.ui.settings.SettingsViewModel -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.main.ui.widget.ComposeWidgetPreview +import eu.darken.capod.main.ui.widget.WidgetConfigurationScreen +import eu.darken.capod.main.ui.widget.WidgetConfigurationViewModel +import eu.darken.capod.main.ui.widget.WidgetRenderState +import eu.darken.capod.main.ui.widget.WidgetTheme +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.profiles.ui.DeviceManagerScreen import eu.darken.capod.profiles.ui.DeviceManagerViewModel import eu.darken.capod.profiles.ui.creation.DeviceProfileCreationScreen @@ -37,6 +35,7 @@ import eu.darken.capod.profiles.ui.creation.DeviceProfileCreationViewModel import eu.darken.capod.reaction.core.autoconnect.AutoConnectCondition import eu.darken.capod.reaction.ui.ReactionSettingsScreen import eu.darken.capod.reaction.ui.ReactionSettingsViewModel +import eu.darken.capod.reaction.ui.popup.PopUpContent as PopUpCard internal const val DS = "spec:width=1080px,height=2400px,dpi=428" @@ -54,8 +53,8 @@ internal fun DashboardContent() = PreviewWrapper { isDebugMode = false, isBluetoothEnabled = true, profiles = listOf( - MockPodDataProvider.profile("My AirPods Pro", PodDevice.Model.AIRPODS_PRO2), - MockPodDataProvider.profile("AirPods Max", PodDevice.Model.AIRPODS_MAX), + MockPodDataProvider.profile("My AirPods Pro", PodModel.AIRPODS_PRO2), + MockPodDataProvider.profile("AirPods Max", PodModel.AIRPODS_MAX), ), upgradeInfo = MockPodDataProvider.gplayInfo(isPro = true), showUnmatchedDevices = false, @@ -73,9 +72,9 @@ internal fun DeviceProfilesContent() = PreviewWrapper { DeviceManagerScreen( state = DeviceManagerViewModel.State( profiles = listOf( - MockPodDataProvider.profile("Work AirPods", PodDevice.Model.AIRPODS_PRO2), - MockPodDataProvider.profile("AirPods Max", PodDevice.Model.AIRPODS_MAX), - MockPodDataProvider.profile("Gym Beats", PodDevice.Model.POWERBEATS_PRO), + MockPodDataProvider.profile("Work AirPods", PodModel.AIRPODS_PRO2), + MockPodDataProvider.profile("AirPods Max", PodModel.AIRPODS_MAX), + MockPodDataProvider.profile("Gym Beats", PodModel.POWERBEATS_PRO), ), ), onBack = {}, @@ -92,7 +91,7 @@ internal fun AddProfileContent() = PreviewWrapper { name = "", nameError = null, selectedModel = null, - availableModels = PodDevice.Model.entries.filter { it != PodDevice.Model.UNKNOWN }, + availableModels = PodModel.entries.filter { it != PodModel.UNKNOWN }, identityKey = null, encryptionKey = null, selectedDevice = null, @@ -158,8 +157,8 @@ internal fun ReactionSettingsContent() = PreviewWrapper { @Composable internal fun WidgetConfigurationContent() = PreviewWrapper { val profiles = listOf( - MockPodDataProvider.profile("My AirPods Pro", PodDevice.Model.AIRPODS_PRO2), - MockPodDataProvider.profile("AirPods Max", PodDevice.Model.AIRPODS_MAX), + MockPodDataProvider.profile("My AirPods Pro", PodModel.AIRPODS_PRO2), + MockPodDataProvider.profile("AirPods Max", PodModel.AIRPODS_MAX), ) WidgetConfigurationScreen( state = WidgetConfigurationViewModel.State( diff --git a/app/src/main/java/eu/darken/capod/common/compose/preview/MockPodDataProvider.kt b/app/src/main/java/eu/darken/capod/common/compose/preview/MockPodDataProvider.kt index 4043db3f..6ed410c7 100644 --- a/app/src/main/java/eu/darken/capod/common/compose/preview/MockPodDataProvider.kt +++ b/app/src/main/java/eu/darken/capod/common/compose/preview/MockPodDataProvider.kt @@ -13,11 +13,12 @@ import eu.darken.capod.pods.core.HasDualMicrophone import eu.darken.capod.pods.core.HasEarDetection import eu.darken.capod.pods.core.HasEarDetectionDual import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.SinglePodDevice -import eu.darken.capod.pods.core.unknown.UnknownDevice -import eu.darken.capod.profiles.core.AppleDeviceProfile import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.protocol.ProximityPayload +import eu.darken.capod.pods.core.unknown.UnknownDevice +import eu.darken.capod.profiles.core.AppleDeviceProfile import eu.darken.capod.profiles.core.DeviceProfile import java.time.Instant @@ -39,7 +40,7 @@ object MockPodDataProvider { // --- Dual pod scenarios --- fun airPodsProFullCharge(): DualPodDevice = MockDualPodDevice( - _model = PodDevice.Model.AIRPODS_PRO2, + _model = PodModel.AIRPODS_PRO2, _label = "Work AirPods", batteryLeftPodPercent = 1.0f, batteryRightPodPercent = 1.0f, @@ -50,7 +51,7 @@ object MockPodDataProvider { ) fun airPodsProMixed(): DualPodDevice = MockDualPodDevice( - _model = PodDevice.Model.AIRPODS_PRO2, + _model = PodModel.AIRPODS_PRO2, _label = "My AirPods Pro", batteryLeftPodPercent = 0.80f, batteryRightPodPercent = 0.45f, @@ -62,7 +63,7 @@ object MockPodDataProvider { ) fun airPodsProLowBattery(): DualPodDevice = MockDualPodDevice( - _model = PodDevice.Model.AIRPODS_PRO2, + _model = PodModel.AIRPODS_PRO2, _label = "My AirPods Pro", batteryLeftPodPercent = 0.10f, batteryRightPodPercent = 0.05f, @@ -75,7 +76,7 @@ object MockPodDataProvider { ) fun airPodsProInCase(): DualPodDevice = MockDualPodDevice( - _model = PodDevice.Model.AIRPODS_PRO2, + _model = PodModel.AIRPODS_PRO2, _label = "My AirPods Pro", batteryLeftPodPercent = null, batteryRightPodPercent = null, @@ -86,7 +87,7 @@ object MockPodDataProvider { ) fun airPodsGen1Wearing(): DualPodDevice = MockDualPodDevice( - _model = PodDevice.Model.AIRPODS_GEN1, + _model = PodModel.AIRPODS_GEN1, _label = "Old AirPods", batteryLeftPodPercent = 0.70f, batteryRightPodPercent = 0.65f, @@ -100,7 +101,7 @@ object MockPodDataProvider { ) fun powerBeatsPro(): DualPodDevice = MockDualPodDeviceNoCase( - _model = PodDevice.Model.POWERBEATS_PRO, + _model = PodModel.POWERBEATS_PRO, _label = "PowerBeats Pro", batteryLeftPodPercent = 0.55f, batteryRightPodPercent = 0.60f, @@ -111,14 +112,14 @@ object MockPodDataProvider { // --- Single pod scenarios --- fun airPodsMax(): SinglePodDevice = MockSinglePodDevice( - _model = PodDevice.Model.AIRPODS_MAX, + _model = PodModel.AIRPODS_MAX, _label = "AirPods Max", batteryHeadsetPercent = 0.85f, _isBeingWorn = true, ) fun airPodsMaxCharging(): SinglePodDevice = MockSingleApplePodDevice( - _model = PodDevice.Model.AIRPODS_MAX, + _model = PodModel.AIRPODS_MAX, _label = "AirPods Max", batteryHeadsetPercent = 0.40f, _isHeadsetBeingCharged = true, @@ -127,7 +128,7 @@ object MockPodDataProvider { ) fun beatsSolo3(): SinglePodDevice = MockSinglePodDevice( - _model = PodDevice.Model.BEATS_SOLO_3, + _model = PodModel.BEATS_SOLO_3, _label = "Beats Solo 3", batteryHeadsetPercent = 0.70f, ) @@ -140,7 +141,7 @@ object MockPodDataProvider { // --- Profile helpers --- - fun profile(label: String, model: PodDevice.Model): AppleDeviceProfile = AppleDeviceProfile( + fun profile(label: String, model: PodModel): AppleDeviceProfile = AppleDeviceProfile( label = label, model = model, ) @@ -188,7 +189,7 @@ private data class MockUpgradeInfo( ) : UpgradeRepo.Info private class MockDualPodDevice( - private val _model: PodDevice.Model, + private val _model: PodModel, private val _label: String, override val batteryLeftPodPercent: Float?, override val batteryRightPodPercent: Float?, @@ -206,7 +207,7 @@ private class MockDualPodDevice( rssi: Int = -50, ) : DualPodDevice, HasCase, HasChargeDetectionDual, HasEarDetectionDual, HasDualMicrophone { override val identifier: PodDevice.Id = PodDevice.Id() - override val model: PodDevice.Model = _model + override val model: PodModel = _model override val seenLastAt: Instant = MOCK_NOW override val seenFirstAt: Instant = MOCK_NOW override val seenCounter: Int = 5 @@ -239,7 +240,7 @@ private class MockDualPodDevice( } private class MockDualPodDeviceNoCase( - private val _model: PodDevice.Model, + private val _model: PodModel, private val _label: String, override val batteryLeftPodPercent: Float?, override val batteryRightPodPercent: Float?, @@ -248,7 +249,7 @@ private class MockDualPodDeviceNoCase( rssi: Int = -50, ) : DualPodDevice, HasChargeDetectionDual, HasEarDetectionDual { override val identifier: PodDevice.Id = PodDevice.Id() - override val model: PodDevice.Model = _model + override val model: PodModel = _model override val seenLastAt: Instant = MOCK_NOW override val seenFirstAt: Instant = MOCK_NOW override val seenCounter: Int = 5 @@ -272,7 +273,7 @@ private class MockDualPodDeviceNoCase( } private class MockSinglePodDevice( - private val _model: PodDevice.Model, + private val _model: PodModel, private val _label: String, override val batteryHeadsetPercent: Float?, private val _isHeadsetBeingCharged: Boolean = false, @@ -280,7 +281,7 @@ private class MockSinglePodDevice( rssi: Int = -50, ) : SinglePodDevice, HasChargeDetection, HasEarDetection { override val identifier: PodDevice.Id = PodDevice.Id() - override val model: PodDevice.Model = _model + override val model: PodModel = _model override val seenLastAt: Instant = MOCK_NOW override val seenFirstAt: Instant = MOCK_NOW override val seenCounter: Int = 5 @@ -303,7 +304,7 @@ private class MockSinglePodDevice( @Suppress("PropertyName") private class MockSingleApplePodDevice( - private val _model: PodDevice.Model, + private val _model: PodModel, private val _label: String, override val batteryHeadsetPercent: Float?, private val _isHeadsetBeingCharged: Boolean = false, @@ -313,7 +314,7 @@ private class MockSingleApplePodDevice( rssi: Int = -50, ) : SinglePodDevice, ApplePods, HasChargeDetection, HasEarDetection { override val identifier: PodDevice.Id = PodDevice.Id() - override val model: PodDevice.Model = _model + override val model: PodModel = _model override val seenLastAt: Instant = MOCK_NOW override val seenFirstAt: Instant = MOCK_NOW override val seenCounter: Int = 5 diff --git a/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt b/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt index 9c37e931..cb989b5b 100644 --- a/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt +++ b/app/src/main/java/eu/darken/capod/main/core/GeneralSettings.kt @@ -16,7 +16,7 @@ import eu.darken.capod.common.serialization.SerializationCapod import eu.darken.capod.common.theming.ThemeColor import eu.darken.capod.common.theming.ThemeMode import eu.darken.capod.common.theming.ThemeStyle -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.protocol.IdentityResolvingKey import eu.darken.capod.pods.core.apple.protocol.ProximityEncryptionKey import kotlinx.serialization.builtins.nullable @@ -54,7 +54,8 @@ class GeneralSettings @Inject constructor( writer = { value -> value }, ) - val oldMainDeviceModel = dataStore.createValue("core.maindevice.model", PodDevice.Model.UNKNOWN, json, onErrorFallbackToDefault = true) + val oldMainDeviceModel = + dataStore.createValue("core.maindevice.model", PodModel.UNKNOWN, json, onErrorFallbackToDefault = true) val oldMainDeviceIdentityKey = dataStore.createValue( key = "core.maindevice.identitykey", diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewScreen.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewScreen.kt index f3ffe811..1687112f 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewScreen.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewScreen.kt @@ -9,9 +9,12 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.twotone.DevicesOther +import androidx.compose.material.icons.twotone.Settings +import androidx.compose.material.icons.twotone.Stars import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar @@ -24,10 +27,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.colorResource -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.twotone.DevicesOther -import androidx.compose.material.icons.twotone.Settings -import androidx.compose.material.icons.twotone.Stars import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.buildAnnotatedString @@ -37,11 +36,11 @@ import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.Lifecycle import androidx.lifecycle.compose.LifecycleEventEffect +import androidx.lifecycle.compose.collectAsStateWithLifecycle import eu.darken.capod.R import eu.darken.capod.common.compose.Preview2 import eu.darken.capod.common.compose.PreviewWrapper import eu.darken.capod.common.compose.preview.MockPodDataProvider -import androidx.lifecycle.compose.collectAsStateWithLifecycle import eu.darken.capod.common.error.ErrorEventHandler import eu.darken.capod.common.navigation.NavigationEventHandler import eu.darken.capod.common.permissions.Permission @@ -55,7 +54,7 @@ import eu.darken.capod.main.ui.overview.cards.SinglePodsCard import eu.darken.capod.main.ui.overview.cards.UnknownPodDeviceCard import eu.darken.capod.main.ui.overview.cards.UnmatchedDevicesCard import eu.darken.capod.monitor.core.MonitoredDevice -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import java.time.Instant @Composable @@ -261,7 +260,7 @@ fun OverviewScreen( private fun PodDeviceCard(device: MonitoredDevice, showDebug: Boolean, now: Instant) { when { device.hasDualPods -> DualPodsCard(device = device, showDebug = showDebug, now = now) - device.model != PodDevice.Model.UNKNOWN -> SinglePodsCard(device = device, showDebug = showDebug, now = now) + device.model != PodModel.UNKNOWN -> SinglePodsCard(device = device, showDebug = showDebug, now = now) else -> UnknownPodDeviceCard(device = device, showDebug = showDebug, now = now) } } @@ -281,8 +280,8 @@ private fun OverviewScreenWithDevicesPreview() = PreviewWrapper { isDebugMode = false, isBluetoothEnabled = true, profiles = listOf( - MockPodDataProvider.profile("My AirPods Pro", PodDevice.Model.AIRPODS_PRO2), - MockPodDataProvider.profile("AirPods Max", PodDevice.Model.AIRPODS_MAX), + MockPodDataProvider.profile("My AirPods Pro", PodModel.AIRPODS_PRO2), + MockPodDataProvider.profile("AirPods Max", PodModel.AIRPODS_MAX), ), upgradeInfo = MockPodDataProvider.fossInfo(), showUnmatchedDevices = false, @@ -305,7 +304,7 @@ private fun OverviewScreenEmptyPreview() = PreviewWrapper { devices = emptyList(), isDebugMode = false, isBluetoothEnabled = true, - profiles = listOf(MockPodDataProvider.profile("My AirPods", PodDevice.Model.AIRPODS_PRO2)), + profiles = listOf(MockPodDataProvider.profile("My AirPods", PodModel.AIRPODS_PRO2)), upgradeInfo = MockPodDataProvider.fossInfo(), showUnmatchedDevices = false, ), @@ -349,7 +348,7 @@ private fun OverviewScreenBluetoothOffPreview() = PreviewWrapper { devices = emptyList(), isDebugMode = false, isBluetoothEnabled = false, - profiles = listOf(MockPodDataProvider.profile("My AirPods", PodDevice.Model.AIRPODS_PRO2)), + profiles = listOf(MockPodDataProvider.profile("My AirPods", PodModel.AIRPODS_PRO2)), upgradeInfo = MockPodDataProvider.fossInfo(isPro = true), showUnmatchedDevices = false, ), diff --git a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationScreen.kt b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationScreen.kt index 91e27a7c..6258c32e 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationScreen.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationScreen.kt @@ -24,10 +24,10 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.systemBars @@ -77,7 +77,7 @@ import eu.darken.capod.R import eu.darken.capod.common.compose.Preview2 import eu.darken.capod.common.compose.PreviewWrapper import eu.darken.capod.common.compose.preview.MockPodDataProvider -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.profiles.core.DeviceProfile @OptIn(ExperimentalLayoutApi::class) @@ -413,7 +413,7 @@ private fun ProfileSelectionItem( style = MaterialTheme.typography.bodyLarge, ) val modelText = when (profile.model) { - PodDevice.Model.UNKNOWN -> stringResource(R.string.pods_unknown_label) + PodModel.UNKNOWN -> stringResource(R.string.pods_unknown_label) else -> profile.model.label } Text( @@ -456,7 +456,9 @@ private fun WidgetConfigPreview( tonalElevation = 2.dp, ) { Box( - modifier = Modifier.fillMaxWidth().padding(24.dp), + modifier = Modifier + .fillMaxWidth() + .padding(24.dp), contentAlignment = Alignment.Center, ) { if (hasTransparency) { @@ -691,8 +693,8 @@ private fun HexColorInput( @Composable private fun WidgetConfigurationScreenPreview() = PreviewWrapper { val profiles = listOf( - MockPodDataProvider.profile("My AirPods Pro", PodDevice.Model.AIRPODS_PRO2), - MockPodDataProvider.profile("AirPods Max", PodDevice.Model.AIRPODS_MAX), + MockPodDataProvider.profile("My AirPods Pro", PodModel.AIRPODS_PRO2), + MockPodDataProvider.profile("AirPods Max", PodModel.AIRPODS_MAX), ) WidgetConfigurationScreen( state = WidgetConfigurationViewModel.State( @@ -720,7 +722,7 @@ private fun WidgetConfigurationScreenPreview() = PreviewWrapper { @Composable private fun WidgetConfigurationScreenCustomPreview() = PreviewWrapper { val profiles = listOf( - MockPodDataProvider.profile("My AirPods Pro", PodDevice.Model.AIRPODS_PRO2), + MockPodDataProvider.profile("My AirPods Pro", PodModel.AIRPODS_PRO2), ) WidgetConfigurationScreen( state = WidgetConfigurationViewModel.State( @@ -753,7 +755,7 @@ private fun WidgetConfigurationScreenCustomPreview() = PreviewWrapper { @Composable private fun WidgetConfigurationScreenNonProPreview() = PreviewWrapper { val profiles = listOf( - MockPodDataProvider.profile("My AirPods Pro", PodDevice.Model.AIRPODS_PRO2), + MockPodDataProvider.profile("My AirPods Pro", PodModel.AIRPODS_PRO2), ) WidgetConfigurationScreen( state = WidgetConfigurationViewModel.State( diff --git a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetRenderStateMapper.kt b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetRenderStateMapper.kt index 40d79786..91ee49be 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetRenderStateMapper.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetRenderStateMapper.kt @@ -5,7 +5,7 @@ import androidx.annotation.ColorInt import androidx.appcompat.view.ContextThemeWrapper import eu.darken.capod.R import eu.darken.capod.monitor.core.MonitoredDevice -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.getBatteryDrawable import eu.darken.capod.pods.core.toBatteryFloat @@ -54,7 +54,7 @@ object WidgetRenderStateMapper { caseCharging = device.isCaseCharging == true, ) - device != null && device.model != PodDevice.Model.UNKNOWN -> WidgetRenderState.SinglePod( + device != null && device.model != PodModel.UNKNOWN -> WidgetRenderState.SinglePod( theme = theme, resolvedBgColor = bgColor, resolvedTextColor = textColor, diff --git a/app/src/main/java/eu/darken/capod/monitor/core/MonitoredDevice.kt b/app/src/main/java/eu/darken/capod/monitor/core/MonitoredDevice.kt index 7d1d1107..1fda6a50 100644 --- a/app/src/main/java/eu/darken/capod/monitor/core/MonitoredDevice.kt +++ b/app/src/main/java/eu/darken/capod/monitor/core/MonitoredDevice.kt @@ -11,6 +11,7 @@ import eu.darken.capod.pods.core.HasDualMicrophone import eu.darken.capod.pods.core.HasEarDetection import eu.darken.capod.pods.core.HasEarDetectionDual import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.SinglePodDevice import eu.darken.capod.pods.core.apple.DualApplePods import eu.darken.capod.pods.core.apple.protocol.aap.AapPodState @@ -27,7 +28,7 @@ data class MonitoredDevice( internal val aap: AapPodState?, ) { // Identity - val model: PodDevice.Model get() = ble?.model ?: PodDevice.Model.UNKNOWN + val model: PodModel get() = ble?.model ?: PodModel.UNKNOWN val address: BluetoothAddress? get() = ble?.address val identifier: PodDevice.Id? get() = ble?.identifier val meta: PodDevice.Meta? get() = ble?.meta diff --git a/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotificationViewFactory.kt b/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotificationViewFactory.kt index ef38f420..ec1c14f1 100644 --- a/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotificationViewFactory.kt +++ b/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotificationViewFactory.kt @@ -6,7 +6,7 @@ import android.widget.RemoteViews import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.R import eu.darken.capod.monitor.core.MonitoredDevice -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.formatBatteryPercent import eu.darken.capod.pods.core.getBatteryDrawable import javax.inject.Inject @@ -19,7 +19,7 @@ class MonitorNotificationViewFactory @Inject constructor( fun createContentView(device: MonitoredDevice): RemoteViews = when { device.hasDualPods -> createDualPods(device) - device.model != PodDevice.Model.UNKNOWN -> createSinglePod(device) + device.model != PodModel.UNKNOWN -> createSinglePod(device) else -> createUnknownDevice(device) } @@ -81,7 +81,7 @@ class MonitorNotificationViewFactory @Inject constructor( fun createBigContentView(device: MonitoredDevice): RemoteViews = when { device.hasDualPods -> createDualPodsBig(device) - device.model != PodDevice.Model.UNKNOWN -> createSinglePodBig(device) + device.model != PodModel.UNKNOWN -> createSinglePodBig(device) else -> createUnknownDeviceBig(device) } diff --git a/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotifications.kt b/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotifications.kt index 71889979..268413a0 100644 --- a/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotifications.kt +++ b/app/src/main/java/eu/darken/capod/monitor/ui/MonitorNotifications.kt @@ -16,7 +16,7 @@ import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.common.notifications.PendingIntentCompat import eu.darken.capod.main.ui.MainActivity import eu.darken.capod.monitor.core.MonitoredDevice -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.formatBatteryPercent import javax.inject.Inject @@ -100,7 +100,7 @@ class MonitorNotifications @Inject constructor( } } - device.model != PodDevice.Model.UNKNOWN -> { + device.model != PodModel.UNKNOWN -> { val headset = formatBatteryPercent(context, device.batteryHeadset) if (device.hasCase) { val case = formatBatteryPercent(context, device.batteryCase) diff --git a/app/src/main/java/eu/darken/capod/pods/core/PodDevice.kt b/app/src/main/java/eu/darken/capod/pods/core/PodDevice.kt index cb5ad63b..3fc07dbe 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/PodDevice.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/PodDevice.kt @@ -2,14 +2,11 @@ package eu.darken.capod.pods.core import android.content.Context import androidx.annotation.DrawableRes -import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.bluetooth.BluetoothAddress import eu.darken.capod.common.debug.logging.Logging.Priority.VERBOSE import eu.darken.capod.common.debug.logging.log import eu.darken.capod.profiles.core.DeviceProfile -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable import java.time.Duration import java.time.Instant import java.util.UUID @@ -20,7 +17,7 @@ interface PodDevice { val identifier: Id - val model: Model + val model: PodModel val address: BluetoothAddress get() = scanResult.address @@ -74,119 +71,6 @@ interface PodDevice { @JvmInline value class Id(private val id: UUID = UUID.randomUUID()) - @Serializable - enum class Model( - val label: String, - @DrawableRes val iconRes: Int = R.drawable.device_earbuds_generic_both, - val features: Features = Features(), - ) { - @SerialName("airpods.gen1") AIRPODS_GEN1( - "AirPods (Gen 1)", R.drawable.device_airpods_gen1_both, - Features(hasDualPods = true, hasCase = true), - ), - @SerialName("airpods.gen2") AIRPODS_GEN2( - "AirPods (Gen 2)", R.drawable.device_airpods_gen1_both, - Features(hasDualPods = true, hasCase = true), - ), - @SerialName("airpods.gen3") AIRPODS_GEN3( - "AirPods (Gen 3)", R.drawable.device_airpods_gen3_both, - Features(hasDualPods = true, hasCase = true), - ), - @SerialName("airpods.gen4") AIRPODS_GEN4( - "AirPods (Gen 4)", R.drawable.device_airpods_gen3_both, - Features(hasDualPods = true, hasCase = true), - ), - @SerialName("airpods.gen4.anc") AIRPODS_GEN4_ANC( - "AirPods (Gen 4 ANC)", R.drawable.device_airpods_gen4anc_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("airpods.pro") AIRPODS_PRO( - "AirPods Pro", R.drawable.device_airpods_pro2_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("airpods.pro2") AIRPODS_PRO2( - "AirPods Pro 2", R.drawable.device_airpods_pro2_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("airpods.pro2.usbc") AIRPODS_PRO2_USBC( - "AirPods Pro 2 USB-C", R.drawable.device_airpods_pro2_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("airpods.pro3") AIRPODS_PRO3( - "AirPods Pro 3", R.drawable.device_airpods_pro2_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("airpods.max") AIRPODS_MAX( - "AirPods Max", R.drawable.device_airpods_max, - Features(hasAncControl = true), - ), - @SerialName("airpods.max.usbc") AIRPODS_MAX_USBC( - "AirPods Max USB-C", R.drawable.device_airpods_max, - Features(hasAncControl = true), - ), - @SerialName("beats.flex") BEATS_FLEX( - "Beats Flex", R.drawable.device_beats_earbuds, - ), - @SerialName("beats.solo.3") BEATS_SOLO_3( - "Beats Solo 3", R.drawable.device_beats_headphones, - ), - @SerialName("beats.studio.3") BEATS_STUDIO_3( - "Beats Studio 3", R.drawable.device_beats_studio3, - Features(hasAncControl = true), - ), - @SerialName("beats.x") BEATS_X( - "Beats X", R.drawable.device_beats_x, - ), - @SerialName("beats.powerbeats.3") POWERBEATS_3( - "Power Beats 3", R.drawable.device_powerbeats_3, - ), - @SerialName("beats.powerbeats.4") POWERBEATS_4( - "Power Beats 4", R.drawable.device_powerbeats_4, - ), - @SerialName("beats.powerbeats.pro") POWERBEATS_PRO( - "Power Beats Pro", R.drawable.device_powerbeats_pro_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true), - ), - @SerialName("beats.powerbeats.pro2") POWERBEATS_PRO2( - "Power Beats Pro 2", R.drawable.device_powerbeats_pro2_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("beats.fit.pro") BEATS_FIT_PRO( - "Beats Fit Pro", R.drawable.device_beats_fitpro_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("fakes.tws.i99999") FAKE_AIRPODS_GEN1( - "AirPods (Gen 1)? \uD83C\uDFAD", R.drawable.device_airpods_gen1_both, - Features(hasDualPods = true, hasCase = true), - ), - @SerialName("fakes.generic.airpods.gen2") FAKE_AIRPODS_GEN2( - "AirPods (Gen 2)? \uD83C\uDFAD", R.drawable.device_airpods_gen1_both, - Features(hasDualPods = true, hasCase = true), - ), - @SerialName("fakes.generic.airpods.gen3") FAKE_AIRPODS_GEN3( - "AirPods (Gen 3)? \uD83C\uDFAD", R.drawable.device_airpods_gen3_both, - Features(hasDualPods = true, hasCase = true), - ), - @SerialName("fakes.varunr.airpodspro") FAKE_AIRPODS_PRO( - "AirPods Pro? \uD83C\uDFAD", R.drawable.device_airpods_pro2_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("fakes.generic.airpods.pro2") FAKE_AIRPODS_PRO2( - "AirPods Pro2? \uD83C\uDFAD", R.drawable.device_airpods_pro2_both, - Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), - ), - @SerialName("unknown") UNKNOWN( - "Unknown" - ); - - data class Features( - val hasDualPods: Boolean = false, - val hasCase: Boolean = false, - val hasEarDetection: Boolean = false, - val hasAncControl: Boolean = false, - ) - } - companion object { const val BASE_CONFIDENCE = 0.0f } diff --git a/app/src/main/java/eu/darken/capod/pods/core/PodModel.kt b/app/src/main/java/eu/darken/capod/pods/core/PodModel.kt new file mode 100644 index 00000000..43080aa1 --- /dev/null +++ b/app/src/main/java/eu/darken/capod/pods/core/PodModel.kt @@ -0,0 +1,119 @@ +package eu.darken.capod.pods.core + +import androidx.annotation.DrawableRes +import eu.darken.capod.R +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class PodModel( + val label: String, + @DrawableRes val iconRes: Int = R.drawable.device_earbuds_generic_both, + val features: Features = Features(), +) { + @SerialName("airpods.gen1") AIRPODS_GEN1( + "AirPods (Gen 1)", R.drawable.device_airpods_gen1_both, + Features(hasDualPods = true, hasCase = true), + ), + @SerialName("airpods.gen2") AIRPODS_GEN2( + "AirPods (Gen 2)", R.drawable.device_airpods_gen1_both, + Features(hasDualPods = true, hasCase = true), + ), + @SerialName("airpods.gen3") AIRPODS_GEN3( + "AirPods (Gen 3)", R.drawable.device_airpods_gen3_both, + Features(hasDualPods = true, hasCase = true), + ), + @SerialName("airpods.gen4") AIRPODS_GEN4( + "AirPods (Gen 4)", R.drawable.device_airpods_gen3_both, + Features(hasDualPods = true, hasCase = true), + ), + @SerialName("airpods.gen4.anc") AIRPODS_GEN4_ANC( + "AirPods (Gen 4 ANC)", R.drawable.device_airpods_gen4anc_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("airpods.pro") AIRPODS_PRO( + "AirPods Pro", R.drawable.device_airpods_pro2_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("airpods.pro2") AIRPODS_PRO2( + "AirPods Pro 2", R.drawable.device_airpods_pro2_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("airpods.pro2.usbc") AIRPODS_PRO2_USBC( + "AirPods Pro 2 USB-C", R.drawable.device_airpods_pro2_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("airpods.pro3") AIRPODS_PRO3( + "AirPods Pro 3", R.drawable.device_airpods_pro2_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("airpods.max") AIRPODS_MAX( + "AirPods Max", R.drawable.device_airpods_max, + Features(hasAncControl = true), + ), + @SerialName("airpods.max.usbc") AIRPODS_MAX_USBC( + "AirPods Max USB-C", R.drawable.device_airpods_max, + Features(hasAncControl = true), + ), + @SerialName("beats.flex") BEATS_FLEX( + "Beats Flex", R.drawable.device_beats_earbuds, + ), + @SerialName("beats.solo.3") BEATS_SOLO_3( + "Beats Solo 3", R.drawable.device_beats_headphones, + ), + @SerialName("beats.studio.3") BEATS_STUDIO_3( + "Beats Studio 3", R.drawable.device_beats_studio3, + Features(hasAncControl = true), + ), + @SerialName("beats.x") BEATS_X( + "Beats X", R.drawable.device_beats_x, + ), + @SerialName("beats.powerbeats.3") POWERBEATS_3( + "Power Beats 3", R.drawable.device_powerbeats_3, + ), + @SerialName("beats.powerbeats.4") POWERBEATS_4( + "Power Beats 4", R.drawable.device_powerbeats_4, + ), + @SerialName("beats.powerbeats.pro") POWERBEATS_PRO( + "Power Beats Pro", R.drawable.device_powerbeats_pro_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true), + ), + @SerialName("beats.powerbeats.pro2") POWERBEATS_PRO2( + "Power Beats Pro 2", R.drawable.device_powerbeats_pro2_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("beats.fit.pro") BEATS_FIT_PRO( + "Beats Fit Pro", R.drawable.device_beats_fitpro_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("fakes.tws.i99999") FAKE_AIRPODS_GEN1( + "AirPods (Gen 1)? \uD83C\uDFAD", R.drawable.device_airpods_gen1_both, + Features(hasDualPods = true, hasCase = true), + ), + @SerialName("fakes.generic.airpods.gen2") FAKE_AIRPODS_GEN2( + "AirPods (Gen 2)? \uD83C\uDFAD", R.drawable.device_airpods_gen1_both, + Features(hasDualPods = true, hasCase = true), + ), + @SerialName("fakes.generic.airpods.gen3") FAKE_AIRPODS_GEN3( + "AirPods (Gen 3)? \uD83C\uDFAD", R.drawable.device_airpods_gen3_both, + Features(hasDualPods = true, hasCase = true), + ), + @SerialName("fakes.varunr.airpodspro") FAKE_AIRPODS_PRO( + "AirPods Pro? \uD83C\uDFAD", R.drawable.device_airpods_pro2_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("fakes.generic.airpods.pro2") FAKE_AIRPODS_PRO2( + "AirPods Pro2? \uD83C\uDFAD", R.drawable.device_airpods_pro2_both, + Features(hasDualPods = true, hasCase = true, hasEarDetection = true, hasAncControl = true), + ), + @SerialName("unknown") UNKNOWN( + "Unknown" + ); + + data class Features( + val hasDualPods: Boolean = false, + val hasCase: Boolean = false, + val hasEarDetection: Boolean = false, + val hasAncControl: Boolean = false, + ) +} \ No newline at end of file diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/AppleFactory.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/AppleFactory.kt index 02c05f1c..b36a16f7 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/AppleFactory.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/AppleFactory.kt @@ -7,6 +7,7 @@ import eu.darken.capod.common.debug.logging.asLog import eu.darken.capod.common.debug.logging.log import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.misc.UnknownAppleDevice import eu.darken.capod.pods.core.apple.protocol.ContinuityProtocol import eu.darken.capod.pods.core.apple.protocol.ProximityMessage @@ -98,7 +99,7 @@ class AppleFactory @Inject constructor( meta = ApplePods.AppleMeta(), ) profile = profiles - .filter { it.model == PodDevice.Model.UNKNOWN || it.model == tempDevice.model } + .filter { it.model == PodModel.UNKNOWN || it.model == tempDevice.model } .firstOrNull { it.minimumSignalQuality <= tempDevice.signalQuality } } diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1.kt index af37de14..8a77290c 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1.kt @@ -3,6 +3,7 @@ package eu.darken.capod.pods.core.apple.airpods import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -27,7 +28,7 @@ data class AirPodsGen1( private val cachedCaseState: DualApplePods.LidState? = null ) : DualApplePods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_GEN1 + override val model: PodModel = PodModel.AIRPODS_GEN1 override val batteryCasePercent: Float? get() = super.batteryCasePercent ?: cachedBatteryPercentage diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2.kt index d148a19c..5d303f4a 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2.kt @@ -3,6 +3,7 @@ package eu.darken.capod.pods.core.apple.airpods import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -27,7 +28,7 @@ data class AirPodsGen2( private val cachedCaseState: DualApplePods.LidState? = null ) : DualApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_GEN2 + override val model: PodModel = PodModel.AIRPODS_GEN2 override val batteryCasePercent: Float? get() = super.batteryCasePercent ?: cachedBatteryPercentage diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3.kt index d274e18b..c28fac74 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -29,7 +30,7 @@ data class AirPodsGen3( private val cachedCaseState: DualApplePods.LidState? = null ) : DualApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_GEN3 + override val model: PodModel = PodModel.AIRPODS_GEN3 @get:DrawableRes override val leftPodIcon: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4.kt index 2a599713..071e1b0b 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -29,7 +30,7 @@ data class AirPodsGen4( private val cachedCaseState: DualApplePods.LidState? = null ) : DualApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_GEN4 + override val model: PodModel = PodModel.AIRPODS_GEN4 @get:DrawableRes override val leftPodIcon: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Anc.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Anc.kt index 59c3b1e8..eaa6a37c 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Anc.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Anc.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -29,7 +30,7 @@ data class AirPodsGen4Anc( private val cachedCaseState: DualApplePods.LidState? = null ) : DualApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_GEN4_ANC + override val model: PodModel = PodModel.AIRPODS_GEN4_ANC @get:DrawableRes override val leftPodIcon: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMax.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMax.kt index cb62ada8..1f6f9eb9 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMax.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMax.kt @@ -6,6 +6,7 @@ import eu.darken.capod.common.isBitSet import eu.darken.capod.pods.core.HasChargeDetection import eu.darken.capod.pods.core.HasEarDetection import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.HasAppleColor @@ -29,7 +30,7 @@ data class AirPodsMax( private val rssiAverage: Int? = null, ) : SingleApplePods, HasEarDetection, HasChargeDetection, HasAppleColor { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_MAX + override val model: PodModel = PodModel.AIRPODS_MAX override val rssi: Int get() = rssiAverage ?: super.rssi diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbc.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbc.kt index 2a0a65c9..65142528 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbc.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbc.kt @@ -6,6 +6,7 @@ import eu.darken.capod.common.isBitSet import eu.darken.capod.pods.core.HasChargeDetection import eu.darken.capod.pods.core.HasEarDetection import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.HasAppleColor @@ -29,7 +30,7 @@ data class AirPodsMaxUsbc( private val rssiAverage: Int? = null, ) : SingleApplePods, HasEarDetection, HasChargeDetection, HasAppleColor { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_MAX_USBC + override val model: PodModel = PodModel.AIRPODS_MAX_USBC override val rssi: Int get() = rssiAverage ?: super.rssi diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro.kt index 0728b9dc..58413811 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -30,7 +31,7 @@ data class AirPodsPro( private val cachedCaseState: LidState? = null ) : DualApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_PRO + override val model: PodModel = PodModel.AIRPODS_PRO @get:DrawableRes override val iconRes: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2.kt index fe4e6ef0..1ecde044 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -30,7 +31,7 @@ data class AirPodsPro2( private val cachedCaseState: LidState? = null ) : DualApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_PRO2 + override val model: PodModel = PodModel.AIRPODS_PRO2 @get:DrawableRes override val iconRes: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Usbc.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Usbc.kt index 68181c6c..4bf9b195 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Usbc.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Usbc.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -30,7 +31,7 @@ data class AirPodsPro2Usbc( private val cachedCaseState: LidState? = null ) : DualApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_PRO2_USBC + override val model: PodModel = PodModel.AIRPODS_PRO2_USBC @get:DrawableRes override val iconRes: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro3.kt index c007c458..c6351413 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro3.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -30,7 +31,7 @@ data class AirPodsPro3( private val cachedCaseState: LidState? = null ) : DualApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.AIRPODS_PRO3 + override val model: PodModel = PodModel.AIRPODS_PRO3 @get:DrawableRes override val iconRes: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFitPro.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFitPro.kt index 12fcac6f..f46d0383 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFitPro.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFitPro.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -29,7 +30,7 @@ data class BeatsFitPro( private val cachedCaseState: DualApplePods.LidState? = null ) : DualApplePods { - override val model: PodDevice.Model = PodDevice.Model.BEATS_FIT_PRO + override val model: PodModel = PodModel.BEATS_FIT_PRO @get:DrawableRes override val leftPodIcon: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFlex.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFlex.kt index 81c14f38..0fbc9ce3 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFlex.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsFlex.kt @@ -3,6 +3,7 @@ package eu.darken.capod.pods.core.apple.beats import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.SingleApplePods @@ -25,7 +26,7 @@ data class BeatsFlex( private val rssiAverage: Int? = null, ) : SingleApplePods { - override val model: PodDevice.Model = PodDevice.Model.BEATS_FLEX + override val model: PodModel = PodModel.BEATS_FLEX override val rssi: Int get() = rssiAverage ?: super.rssi diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3.kt index 26c16c62..00445ca2 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3.kt @@ -3,6 +3,7 @@ package eu.darken.capod.pods.core.apple.beats import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.SingleApplePods @@ -25,7 +26,7 @@ data class BeatsSolo3( private val rssiAverage: Int? = null, ) : SingleApplePods { - override val model: PodDevice.Model = PodDevice.Model.BEATS_SOLO_3 + override val model: PodModel = PodModel.BEATS_SOLO_3 override val rssi: Int get() = rssiAverage ?: super.rssi diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3.kt index 4c90b932..73ed96f2 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3.kt @@ -3,6 +3,7 @@ package eu.darken.capod.pods.core.apple.beats import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.SingleApplePods @@ -25,7 +26,7 @@ data class BeatsStudio3( private val rssiAverage: Int? = null, ) : SingleApplePods { - override val model: PodDevice.Model = PodDevice.Model.BEATS_STUDIO_3 + override val model: PodModel = PodModel.BEATS_STUDIO_3 class Factory @Inject constructor( private val repo: PodHistoryRepo, diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsX.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsX.kt index 45aaf4ff..56a6dc42 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsX.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/BeatsX.kt @@ -3,6 +3,7 @@ package eu.darken.capod.pods.core.apple.beats import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.SingleApplePods @@ -25,7 +26,7 @@ data class BeatsX( private val rssiAverage: Int? = null, ) : SingleApplePods { - override val model: PodDevice.Model = PodDevice.Model.BEATS_X + override val model: PodModel = PodModel.BEATS_X override val rssi: Int get() = rssiAverage ?: super.rssi diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3.kt index be92f189..d848b152 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3.kt @@ -3,6 +3,7 @@ package eu.darken.capod.pods.core.apple.beats import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.SingleApplePods @@ -25,7 +26,7 @@ data class PowerBeats3( private val rssiAverage: Int? = null, ) : SingleApplePods { - override val model: PodDevice.Model = PodDevice.Model.POWERBEATS_3 + override val model: PodModel = PodModel.POWERBEATS_3 override val rssi: Int get() = rssiAverage ?: super.rssi diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4.kt index 01676d7f..15836dc6 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4.kt @@ -3,6 +3,7 @@ package eu.darken.capod.pods.core.apple.beats import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.SingleApplePods @@ -26,7 +27,7 @@ data class PowerBeats4( private val rssiAverage: Int? = null, ) : SingleApplePods, HasStateDetectionAirPods { - override val model: PodDevice.Model = PodDevice.Model.POWERBEATS_4 + override val model: PodModel = PodModel.POWERBEATS_4 override val rssi: Int get() = rssiAverage ?: super.rssi diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro.kt index 1bcb93ab..2d63abfa 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -29,7 +30,7 @@ data class PowerBeatsPro( private val cachedCaseState: DualApplePods.LidState? = null ) : DualApplePods { - override val model: PodDevice.Model = PodDevice.Model.POWERBEATS_PRO + override val model: PodModel = PodModel.POWERBEATS_PRO @get:DrawableRes override val leftPodIcon: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2.kt index beecff52..2346e8c6 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -29,7 +30,7 @@ data class PowerBeatsPro2( private val cachedCaseState: DualApplePods.LidState? = null ) : DualApplePods { - override val model: PodDevice.Model = PodDevice.Model.POWERBEATS_PRO2 + override val model: PodModel = PodModel.POWERBEATS_PRO2 @get:DrawableRes override val leftPodIcon: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/history/PodHistoryRepo.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/history/PodHistoryRepo.kt index d09985c4..c84deb73 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/history/PodHistoryRepo.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/history/PodHistoryRepo.kt @@ -9,6 +9,7 @@ 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.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.DualApplePods import eu.darken.capod.pods.core.apple.protocol.ProximityPayload @@ -65,7 +66,7 @@ class PodHistoryRepo @Inject constructor( val chargingLeft: Boolean, val chargingRight: Boolean, val color: UByte, - val model: PodDevice.Model, + val model: PodModel, ) suspend fun search(current: ApplePods): KnownDevice? { diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1.kt index d1dc24fa..6f908558 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1.kt @@ -6,6 +6,7 @@ import eu.darken.capod.pods.core.HasCase import eu.darken.capod.pods.core.HasChargeDetectionDual import eu.darken.capod.pods.core.HasEarDetectionDual import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -33,13 +34,13 @@ data class FakeAirPodsGen1( private val cachedBatteryPercentage: Float? = null, ) : DualApplePods, HasEarDetectionDual, HasChargeDetectionDual, HasCase { - override val model: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_GEN1 + override val model: PodModel = PodModel.FAKE_AIRPODS_GEN1 override val batteryCasePercent: Float? get() = super.batteryCasePercent ?: cachedBatteryPercentage override val rssi: Int - get() = rssiAverage ?: super.rssi + get() = rssiAverage ?: super.rssi class Factory @Inject constructor( private val repo: PodHistoryRepo, diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2.kt index 0489ca9c..7c930344 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2.kt @@ -6,6 +6,7 @@ import eu.darken.capod.pods.core.HasCase import eu.darken.capod.pods.core.HasChargeDetectionDual import eu.darken.capod.pods.core.HasEarDetectionDual import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -31,10 +32,10 @@ data class FakeAirPodsGen2( private val cachedBatteryPercentage: Float? = null, ) : DualApplePods, HasEarDetectionDual, HasChargeDetectionDual, HasCase { - override val model: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_GEN2 + override val model: PodModel = PodModel.FAKE_AIRPODS_GEN2 override val rssi: Int - get() = rssiAverage ?: super.rssi + get() = rssiAverage ?: super.rssi override val batteryCasePercent: Float? get() = super.batteryCasePercent ?: cachedBatteryPercentage diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3.kt index c02898dc..d1ff6a3f 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3.kt @@ -8,6 +8,7 @@ import eu.darken.capod.pods.core.HasCase import eu.darken.capod.pods.core.HasChargeDetectionDual import eu.darken.capod.pods.core.HasEarDetectionDual import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -35,7 +36,7 @@ data class FakeAirPodsGen3( private val cachedBatteryPercentage: Float? = null, ) : DualApplePods, HasEarDetectionDual, HasChargeDetectionDual, HasCase { - override val model: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_GEN3 + override val model: PodModel = PodModel.FAKE_AIRPODS_GEN3 @get:DrawableRes override val leftPodIcon: Int @@ -50,7 +51,7 @@ data class FakeAirPodsGen3( get() = R.drawable.device_airpods_gen3_case override val rssi: Int - get() = rssiAverage ?: super.rssi + get() = rssiAverage ?: super.rssi override val batteryCasePercent: Float? get() = super.batteryCasePercent ?: cachedBatteryPercentage diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro.kt index adc71f37..80e17608 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro.kt @@ -8,6 +8,7 @@ import eu.darken.capod.pods.core.HasCase import eu.darken.capod.pods.core.HasChargeDetectionDual import eu.darken.capod.pods.core.HasEarDetectionDual import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -35,7 +36,7 @@ data class FakeAirPodsPro( private val cachedBatteryPercentage: Float? = null, ) : DualApplePods, HasChargeDetectionDual, HasEarDetectionDual, HasCase { - override val model: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_PRO + override val model: PodModel = PodModel.FAKE_AIRPODS_PRO @get:DrawableRes override val iconRes: Int @@ -54,7 +55,7 @@ data class FakeAirPodsPro( get() = R.drawable.device_airpods_pro2_right override val rssi: Int - get() = rssiAverage ?: super.rssi + get() = rssiAverage ?: super.rssi override val batteryCasePercent: Float? get() = super.batteryCasePercent ?: cachedBatteryPercentage diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2.kt index a71fe899..838249d3 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2.kt @@ -9,6 +9,7 @@ import eu.darken.capod.pods.core.HasCase import eu.darken.capod.pods.core.HasChargeDetectionDual import eu.darken.capod.pods.core.HasEarDetectionDual import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.DualApplePods @@ -37,7 +38,7 @@ data class FakeAirPodsPro2( private val cachedCaseState: LidState? = null, ) : DualApplePods, HasChargeDetectionDual, DualPodDevice, HasEarDetectionDual, HasCase { - override val model: PodDevice.Model = PodDevice.Model.FAKE_AIRPODS_PRO2 + override val model: PodModel = PodModel.FAKE_AIRPODS_PRO2 @get:DrawableRes override val iconRes: Int diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/UnknownAppleDevice.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/UnknownAppleDevice.kt index 323a3654..1e251521 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/misc/UnknownAppleDevice.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/misc/UnknownAppleDevice.kt @@ -5,6 +5,7 @@ import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.ApplePods import eu.darken.capod.pods.core.apple.ApplePodsFactory import eu.darken.capod.pods.core.apple.history.PodHistoryRepo @@ -25,7 +26,7 @@ data class UnknownAppleDevice( private val rssiAverage: Int? = null, ) : ApplePods { - override val model: PodDevice.Model = PodDevice.Model.UNKNOWN + override val model: PodModel = PodModel.UNKNOWN override fun getLabel(context: Context): String = context.getString(R.string.pods_unknown_label) diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/protocol/aap/AapConnectionManager.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/protocol/aap/AapConnectionManager.kt index d877cb1c..dc4001c7 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/protocol/aap/AapConnectionManager.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/protocol/aap/AapConnectionManager.kt @@ -4,7 +4,7 @@ import android.bluetooth.BluetoothDevice import android.util.Log import eu.darken.capod.common.bluetooth.BluetoothAddress import eu.darken.capod.common.bluetooth.l2cap.L2capSocketFactory -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -36,7 +36,7 @@ class AapConnectionManager @Inject constructor( suspend fun connect( address: BluetoothAddress, device: BluetoothDevice, - model: PodDevice.Model, + model: PodModel, ) { if (connections.containsKey(address)) { Log.d(TAG, "Already connected to $address") diff --git a/app/src/main/java/eu/darken/capod/pods/core/apple/protocol/aap/AapDeviceProfile.kt b/app/src/main/java/eu/darken/capod/pods/core/apple/protocol/aap/AapDeviceProfile.kt index c0ace96c..0e7da1bd 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/apple/protocol/aap/AapDeviceProfile.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/apple/protocol/aap/AapDeviceProfile.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.protocol.aap -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import kotlin.reflect.KClass /** @@ -36,6 +36,6 @@ interface AapDeviceProfile { fun encodeHandshake(): ByteArray companion object { - fun forModel(model: PodDevice.Model): AapDeviceProfile = DefaultAapDeviceProfile() + fun forModel(model: PodModel): AapDeviceProfile = DefaultAapDeviceProfile() } } diff --git a/app/src/main/java/eu/darken/capod/pods/core/unknown/UnknownDevice.kt b/app/src/main/java/eu/darken/capod/pods/core/unknown/UnknownDevice.kt index 485db172..721f5f43 100644 --- a/app/src/main/java/eu/darken/capod/pods/core/unknown/UnknownDevice.kt +++ b/app/src/main/java/eu/darken/capod/pods/core/unknown/UnknownDevice.kt @@ -4,8 +4,9 @@ import android.content.Context import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BleScanResult import eu.darken.capod.common.debug.logging.logTag -import eu.darken.capod.profiles.core.DeviceProfile import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel +import eu.darken.capod.profiles.core.DeviceProfile import java.time.Instant data class UnknownDevice( @@ -19,7 +20,7 @@ data class UnknownDevice( private val rssiAverage: Int? = null, ) : PodDevice { - override val model: PodDevice.Model = PodDevice.Model.UNKNOWN + override val model: PodModel = PodModel.UNKNOWN override fun getLabel(context: Context): String = context.getString(R.string.pods_unknown_label) diff --git a/app/src/main/java/eu/darken/capod/profiles/core/AppleDeviceProfile.kt b/app/src/main/java/eu/darken/capod/profiles/core/AppleDeviceProfile.kt index d9e24432..aa2b6267 100644 --- a/app/src/main/java/eu/darken/capod/profiles/core/AppleDeviceProfile.kt +++ b/app/src/main/java/eu/darken/capod/profiles/core/AppleDeviceProfile.kt @@ -1,7 +1,7 @@ package eu.darken.capod.profiles.core import eu.darken.capod.common.serialization.ByteArrayBase64Serializer -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.protocol.IdentityResolvingKey import eu.darken.capod.pods.core.apple.protocol.ProximityEncryptionKey import kotlinx.parcelize.Parcelize @@ -16,7 +16,7 @@ data class AppleDeviceProfile( @SerialName("id") override val id: ProfileId = UUID.randomUUID().toString(), @SerialName("label") override val label: String, @SerialName("priority") override val priority: Int = 0, - @SerialName("model") override val model: PodDevice.Model = PodDevice.Model.UNKNOWN, + @SerialName("model") override val model: PodModel = PodModel.UNKNOWN, @SerialName("minimumSignalQuality") override val minimumSignalQuality: Float = DeviceProfile.DEFAULT_MINIMUM_SIGNAL_QUALITY, @SerialName("identityKey") @Serializable(with = ByteArrayBase64Serializer::class) val identityKey: IdentityResolvingKey? = null, @SerialName("encryptionKey") @Serializable(with = ByteArrayBase64Serializer::class) val encryptionKey: ProximityEncryptionKey? = null, diff --git a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfile.kt b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfile.kt index 44d6361c..2205d6a7 100644 --- a/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfile.kt +++ b/app/src/main/java/eu/darken/capod/profiles/core/DeviceProfile.kt @@ -1,7 +1,7 @@ package eu.darken.capod.profiles.core import android.os.Parcelable -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import kotlinx.serialization.Serializable @Serializable @@ -9,7 +9,7 @@ sealed interface DeviceProfile : Parcelable { val id: ProfileId val label: String val priority: Int - val model: PodDevice.Model + val model: PodModel val minimumSignalQuality: Float? val address: String? diff --git a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceManagerScreen.kt b/app/src/main/java/eu/darken/capod/profiles/ui/DeviceManagerScreen.kt index 7cb1aa39..50504b3d 100644 --- a/app/src/main/java/eu/darken/capod/profiles/ui/DeviceManagerScreen.kt +++ b/app/src/main/java/eu/darken/capod/profiles/ui/DeviceManagerScreen.kt @@ -34,14 +34,14 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import eu.darken.capod.R import eu.darken.capod.common.compose.Preview2 import eu.darken.capod.common.compose.PreviewWrapper import eu.darken.capod.common.compose.preview.MockPodDataProvider -import androidx.lifecycle.compose.collectAsStateWithLifecycle import eu.darken.capod.common.error.ErrorEventHandler import eu.darken.capod.common.navigation.NavigationEventHandler -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.profiles.core.DeviceProfile @Composable @@ -129,9 +129,9 @@ private fun DeviceManagerScreenWithProfilesPreview() = PreviewWrapper { DeviceManagerScreen( state = DeviceManagerViewModel.State( profiles = listOf( - MockPodDataProvider.profile("Work AirPods", PodDevice.Model.AIRPODS_PRO2), - MockPodDataProvider.profile("AirPods Max", PodDevice.Model.AIRPODS_MAX), - MockPodDataProvider.profile("Gym Beats", PodDevice.Model.POWERBEATS_PRO), + MockPodDataProvider.profile("Work AirPods", PodModel.AIRPODS_PRO2), + MockPodDataProvider.profile("AirPods Max", PodModel.AIRPODS_MAX), + MockPodDataProvider.profile("Gym Beats", PodModel.POWERBEATS_PRO), ), ), onBack = {}, diff --git a/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationScreen.kt b/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationScreen.kt index 4fb1b197..578af792 100644 --- a/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationScreen.kt +++ b/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationScreen.kt @@ -24,13 +24,13 @@ import androidx.compose.material.icons.twotone.SettingsInputAntenna import androidx.compose.material3.AlertDialog import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold @@ -56,15 +56,15 @@ import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import eu.darken.capod.R import eu.darken.capod.common.bluetooth.BluetoothDevice2 import eu.darken.capod.common.compose.Preview2 import eu.darken.capod.common.compose.PreviewWrapper -import androidx.lifecycle.compose.collectAsStateWithLifecycle import eu.darken.capod.common.error.ErrorEventHandler import eu.darken.capod.common.navigation.NavigationEventHandler import eu.darken.capod.common.toHex -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel @Composable fun DeviceProfileCreationScreenHost( @@ -144,7 +144,7 @@ fun DeviceProfileCreationScreen( onSave: () -> Unit, onDelete: () -> Unit, onNameChange: (String) -> Unit, - onModelChange: (PodDevice.Model) -> Unit, + onModelChange: (PodModel) -> Unit, onDeviceChange: (BluetoothDevice2?) -> Unit, onIdentityKeyChange: (ByteArray?) -> Unit, onEncryptionKeyChange: (ByteArray?) -> Unit, @@ -294,12 +294,12 @@ private fun ProfileSectionCard( private fun DeviceInfoCard( name: String, nameError: String?, - selectedModel: PodDevice.Model?, - availableModels: List, + selectedModel: PodModel?, + availableModels: List, selectedDevice: BluetoothDevice2?, bondedDevices: List, onNameChange: (String) -> Unit, - onModelChange: (PodDevice.Model) -> Unit, + onModelChange: (PodModel) -> Unit, onDeviceChange: (BluetoothDevice2?) -> Unit, ) { ProfileSectionCard( @@ -656,7 +656,7 @@ private fun DeviceProfileCreationScreenNewPreview() = PreviewWrapper { name = "", nameError = null, selectedModel = null, - availableModels = PodDevice.Model.entries.filter { it != PodDevice.Model.UNKNOWN }, + availableModels = PodModel.entries.filter { it != PodModel.UNKNOWN }, identityKey = null, encryptionKey = null, selectedDevice = null, @@ -685,8 +685,8 @@ private fun DeviceProfileCreationScreenEditPreview() = PreviewWrapper { isEditMode = true, name = "My AirPods Pro", nameError = null, - selectedModel = PodDevice.Model.AIRPODS_PRO2, - availableModels = PodDevice.Model.entries.filter { it != PodDevice.Model.UNKNOWN }, + selectedModel = PodModel.AIRPODS_PRO2, + availableModels = PodModel.entries.filter { it != PodModel.UNKNOWN }, identityKey = null, encryptionKey = null, selectedDevice = null, @@ -715,8 +715,8 @@ private fun DeviceProfileCreationScreenWithKeysPreview() = PreviewWrapper { isEditMode = true, name = "My AirPods Pro", nameError = null, - selectedModel = PodDevice.Model.AIRPODS_PRO2, - availableModels = PodDevice.Model.entries.filter { it != PodDevice.Model.UNKNOWN }, + selectedModel = PodModel.AIRPODS_PRO2, + availableModels = PodModel.entries.filter { it != PodModel.UNKNOWN }, identityKey = byteArrayOf( 0xFE.toByte(), 0xD0.toByte(), 0x1C.toByte(), 0x54.toByte(), 0x11.toByte(), 0x81.toByte(), 0xBC.toByte(), 0xBC.toByte(), diff --git a/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationViewModel.kt b/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationViewModel.kt index 9d7042c3..7e8c064d 100644 --- a/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationViewModel.kt +++ b/app/src/main/java/eu/darken/capod/profiles/ui/creation/DeviceProfileCreationViewModel.kt @@ -14,7 +14,7 @@ import eu.darken.capod.common.flow.SingleEventFlow import eu.darken.capod.common.fromHex import eu.darken.capod.common.toHex import eu.darken.capod.common.uix.ViewModel4 -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.protocol.IdentityResolvingKey import eu.darken.capod.pods.core.apple.protocol.ProximityEncryptionKey import eu.darken.capod.profiles.core.AppleDeviceProfile @@ -31,7 +31,7 @@ import javax.inject.Inject private data class ProfileEditorState( val name: String = "", - val selectedModel: PodDevice.Model? = null, + val selectedModel: PodModel? = null, val identityKeyHex: String? = null, val encryptionKeyHex: String? = null, val selectedDeviceAddress: String? = null, @@ -109,7 +109,7 @@ class DeviceProfileCreationViewModel @Inject constructor( name = editorState.name, nameError = nameErr, selectedModel = editorState.selectedModel, - availableModels = PodDevice.Model.entries, + availableModels = PodModel.entries, identityKey = editorState.identityKeyHex?.fromHex(), encryptionKey = editorState.encryptionKeyHex?.fromHex(), selectedDevice = selectedDevice, @@ -123,8 +123,8 @@ class DeviceProfileCreationViewModel @Inject constructor( val isEditMode: Boolean, val name: String, val nameError: String?, - val selectedModel: PodDevice.Model?, - val availableModels: List, + val selectedModel: PodModel?, + val availableModels: List, val identityKey: IdentityResolvingKey?, val encryptionKey: ProximityEncryptionKey?, val selectedDevice: BluetoothDevice2?, @@ -138,7 +138,7 @@ class DeviceProfileCreationViewModel @Inject constructor( _nameError.value = if (name.isBlank()) context.getString(R.string.profiles_name_empty_error) else null } - fun updateModel(model: PodDevice.Model) { + fun updateModel(model: PodModel) { _currentState.value = _currentState.value.copy(selectedModel = model) log(TAG) { "Selected model: $model" } } diff --git a/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpContent.kt b/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpContent.kt index 163ad8cc..5032e0ea 100644 --- a/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpContent.kt +++ b/app/src/main/java/eu/darken/capod/reaction/ui/popup/PopUpContent.kt @@ -12,6 +12,8 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.twotone.SignalCellularAlt import androidx.compose.material3.Button import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults @@ -23,8 +25,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.twotone.SignalCellularAlt import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign @@ -36,7 +36,7 @@ import eu.darken.capod.common.compose.PreviewWrapper import eu.darken.capod.common.compose.preview.MockPodDataProvider import eu.darken.capod.monitor.core.MonitoredDevice import eu.darken.capod.monitor.core.getSignalQuality -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.formatBatteryPercent import eu.darken.capod.pods.core.getBatteryDrawable import eu.darken.capod.pods.core.toBatteryFloat @@ -98,7 +98,7 @@ fun PopUpContent( // Device-specific content when { device.hasDualPods -> DualPodContent(device) - device.model != PodDevice.Model.UNKNOWN -> SinglePodContent(device) + device.model != PodModel.UNKNOWN -> SinglePodContent(device) } Spacer(modifier = Modifier.height(20.dp)) diff --git a/app/src/test/java/eu/darken/capod/common/datastore/DataStoreMigrationCompatTest.kt b/app/src/test/java/eu/darken/capod/common/datastore/DataStoreMigrationCompatTest.kt index b46f72b8..355da649 100644 --- a/app/src/test/java/eu/darken/capod/common/datastore/DataStoreMigrationCompatTest.kt +++ b/app/src/test/java/eu/darken/capod/common/datastore/DataStoreMigrationCompatTest.kt @@ -5,7 +5,7 @@ import eu.darken.capod.common.theming.ThemeColor import eu.darken.capod.common.theming.ThemeMode import eu.darken.capod.common.theming.ThemeStyle import eu.darken.capod.main.core.MonitorMode -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.profiles.core.AppleDeviceProfile import eu.darken.capod.profiles.core.DeviceProfilesContainer import eu.darken.capod.reaction.core.autoconnect.AutoConnectCondition @@ -145,21 +145,21 @@ class DataStoreMigrationCompatTest : BaseTest() { @Test fun `PodDevice Model encodes to canonical string`() { - json.encodeToString(serializer(), PodDevice.Model.AIRPODS_PRO) shouldBe "\"airpods.pro\"" + json.encodeToString(serializer(), PodModel.AIRPODS_PRO) shouldBe "\"airpods.pro\"" } @Test fun `all PodDevice Model values round-trip`() { - for (model in PodDevice.Model.entries) { - val encoded = json.encodeToString(serializer(), model) - json.decodeFromString(serializer(), encoded) shouldBe model + for (model in PodModel.entries) { + val encoded = json.encodeToString(serializer(), model) + json.decodeFromString(serializer(), encoded) shouldBe model } } @Test fun `PodDevice Model legacy string decodes correctly`() { val legacyOutput = "\"airpods.pro\"" - json.decodeFromString(serializer(), legacyOutput) shouldBe PodDevice.Model.AIRPODS_PRO + json.decodeFromString(serializer(), legacyOutput) shouldBe PodModel.AIRPODS_PRO } @Test @@ -186,7 +186,7 @@ class DataStoreMigrationCompatTest : BaseTest() { val profile = result.profiles[0] as AppleDeviceProfile profile.id shouldBe "test-uuid" profile.label shouldBe "My AirPods Pro" - profile.model shouldBe PodDevice.Model.AIRPODS_PRO + profile.model shouldBe PodModel.AIRPODS_PRO profile.minimumSignalQuality shouldBe 0.15f profile.address shouldBe "AA:BB:CC:DD:EE:FF" profile.identityKey shouldBe null @@ -200,7 +200,7 @@ class DataStoreMigrationCompatTest : BaseTest() { AppleDeviceProfile( id = "round-trip-id", label = "Test Profile", - model = PodDevice.Model.AIRPODS_GEN2, + model = PodModel.AIRPODS_GEN2, address = "11:22:33:44:55:66", ) ) @@ -212,7 +212,7 @@ class DataStoreMigrationCompatTest : BaseTest() { val profile = decoded.profiles[0] as AppleDeviceProfile profile.id shouldBe "round-trip-id" profile.label shouldBe "Test Profile" - profile.model shouldBe PodDevice.Model.AIRPODS_GEN2 + profile.model shouldBe PodModel.AIRPODS_GEN2 profile.address shouldBe "11:22:33:44:55:66" } diff --git a/app/src/test/java/eu/darken/capod/common/datastore/DataStoreValueSerializationTest.kt b/app/src/test/java/eu/darken/capod/common/datastore/DataStoreValueSerializationTest.kt index b918da32..c4df5042 100644 --- a/app/src/test/java/eu/darken/capod/common/datastore/DataStoreValueSerializationTest.kt +++ b/app/src/test/java/eu/darken/capod/common/datastore/DataStoreValueSerializationTest.kt @@ -8,14 +8,14 @@ import eu.darken.capod.common.theming.ThemeColor import eu.darken.capod.common.theming.ThemeMode import eu.darken.capod.common.theming.ThemeStyle import eu.darken.capod.main.core.MonitorMode -import kotlinx.serialization.builtins.nullable -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.profiles.core.AppleDeviceProfile import eu.darken.capod.profiles.core.DeviceProfile import eu.darken.capod.profiles.core.DeviceProfilesContainer import eu.darken.capod.reaction.core.autoconnect.AutoConnectCondition import io.kotest.assertions.throwables.shouldThrow import io.kotest.matchers.shouldBe +import kotlinx.serialization.builtins.nullable import kotlinx.serialization.json.Json import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir @@ -23,7 +23,6 @@ import testhelpers.BaseTest import testhelpers.coroutine.runTest2 import java.io.File import java.time.Instant -import eu.darken.capod.common.datastore.value class DataStoreValueSerializationTest : BaseTest() { @@ -59,9 +58,9 @@ class DataStoreValueSerializationTest : BaseTest() { @Test fun `enum round-trip - PodDevice Model`() = runTest2 { val ds = createDataStore() - val pref = ds.createValue("model", PodDevice.Model.UNKNOWN, json) + val pref = ds.createValue("model", PodModel.UNKNOWN, json) - PodDevice.Model.entries.forEach { model -> + PodModel.entries.forEach { model -> pref.value(model) pref.value() shouldBe model } @@ -75,7 +74,7 @@ class DataStoreValueSerializationTest : BaseTest() { AppleDeviceProfile( id = "test-id-1", label = "My AirPods", - model = PodDevice.Model.AIRPODS_PRO, + model = PodModel.AIRPODS_PRO, address = "AA:BB:CC:DD:EE:FF", ) ) @@ -89,7 +88,7 @@ class DataStoreValueSerializationTest : BaseTest() { val profile = result.profiles[0] as AppleDeviceProfile profile.id shouldBe "test-id-1" profile.label shouldBe "My AirPods" - profile.model shouldBe PodDevice.Model.AIRPODS_PRO + profile.model shouldBe PodModel.AIRPODS_PRO profile.address shouldBe "AA:BB:CC:DD:EE:FF" } @@ -229,7 +228,7 @@ class DataStoreValueSerializationTest : BaseTest() { val profile: DeviceProfile = AppleDeviceProfile( id = "poly-test", label = "Test Profile", - model = PodDevice.Model.AIRPODS_GEN2, + model = PodModel.AIRPODS_GEN2, identityKey = byteArrayOf(0x01, 0x02), encryptionKey = byteArrayOf(0x03, 0x04), ) @@ -243,7 +242,7 @@ class DataStoreValueSerializationTest : BaseTest() { val restored = result.profiles[0] as AppleDeviceProfile restored.id shouldBe "poly-test" restored.label shouldBe "Test Profile" - restored.model shouldBe PodDevice.Model.AIRPODS_GEN2 + restored.model shouldBe PodModel.AIRPODS_GEN2 restored.identityKey!!.toList() shouldBe listOf(0x01, 0x02) restored.encryptionKey!!.toList() shouldBe listOf(0x03, 0x04) } diff --git a/app/src/test/java/eu/darken/capod/monitor/core/MonitoredDeviceTest.kt b/app/src/test/java/eu/darken/capod/monitor/core/MonitoredDeviceTest.kt index 7d838d8b..741c3706 100644 --- a/app/src/test/java/eu/darken/capod/monitor/core/MonitoredDeviceTest.kt +++ b/app/src/test/java/eu/darken/capod/monitor/core/MonitoredDeviceTest.kt @@ -2,10 +2,10 @@ package eu.darken.capod.monitor.core import eu.darken.capod.pods.core.HasCase import eu.darken.capod.pods.core.HasChargeDetectionDual -import eu.darken.capod.pods.core.HasDualMicrophone import eu.darken.capod.pods.core.HasEarDetection import eu.darken.capod.pods.core.HasEarDetectionDual import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.DualApplePods import eu.darken.capod.pods.core.apple.protocol.aap.AapConnectionState import eu.darken.capod.pods.core.apple.protocol.aap.AapPodState @@ -23,7 +23,7 @@ import java.time.Instant class MonitoredDeviceTest : BaseTest() { private fun mockDualPod( - model: PodDevice.Model = PodDevice.Model.AIRPODS_PRO3, + model: PodModel = PodModel.AIRPODS_PRO3, leftBattery: Float? = 0.8f, rightBattery: Float? = 0.9f, caseBattery: Float? = 0.5f, @@ -47,7 +47,7 @@ class MonitoredDeviceTest : BaseTest() { @Test fun `capabilities come from model features`() { val device = MonitoredDevice( - ble = mockDualPod(model = PodDevice.Model.AIRPODS_PRO3), + ble = mockDualPod(model = PodModel.AIRPODS_PRO3), aap = null, ) device.hasDualPods shouldBe true @@ -59,7 +59,7 @@ class MonitoredDeviceTest : BaseTest() { @Test fun `Beats Solo 3 has no dual pods or case`() { val device = MonitoredDevice( - ble = mockk(relaxed = true) { every { model } returns PodDevice.Model.BEATS_SOLO_3 }, + ble = mockk(relaxed = true) { every { model } returns PodModel.BEATS_SOLO_3 }, aap = null, ) device.hasDualPods shouldBe false @@ -92,7 +92,7 @@ class MonitoredDeviceTest : BaseTest() { @Test fun `null BLE gives UNKNOWN model`() { val device = MonitoredDevice(ble = null, aap = null) - device.model shouldBe PodDevice.Model.UNKNOWN + device.model shouldBe PodModel.UNKNOWN } @Test @@ -148,7 +148,7 @@ class MonitoredDeviceTest : BaseTest() { @Test fun `charging properties delegate to BLE interfaces`() { val mock = mockk(relaxed = true) { - every { model } returns PodDevice.Model.AIRPODS_PRO3 + every { model } returns PodModel.AIRPODS_PRO3 every { (this@mockk as HasChargeDetectionDual).isLeftPodCharging } returns true every { (this@mockk as HasChargeDetectionDual).isRightPodCharging } returns false every { (this@mockk as HasCase).isCaseCharging } returns true @@ -162,7 +162,7 @@ class MonitoredDeviceTest : BaseTest() { @Test fun `ear detection properties delegate to BLE interfaces`() { val mock = mockk(relaxed = true) { - every { model } returns PodDevice.Model.AIRPODS_PRO3 + every { model } returns PodModel.AIRPODS_PRO3 every { (this@mockk as HasEarDetectionDual).isLeftPodInEar } returns true every { (this@mockk as HasEarDetectionDual).isRightPodInEar } returns false every { (this@mockk as HasEarDetection).isBeingWorn } returns false @@ -179,7 +179,7 @@ class MonitoredDeviceTest : BaseTest() { fun `icon and label properties delegate to BLE`() { val device = MonitoredDevice( ble = mockk(relaxed = true) { - every { model } returns PodDevice.Model.AIRPODS_PRO3 + every { model } returns PodModel.AIRPODS_PRO3 every { iconRes } returns 42 }, aap = null, diff --git a/app/src/test/java/eu/darken/capod/pods/core/ModelFeaturesTest.kt b/app/src/test/java/eu/darken/capod/pods/core/ModelFeaturesTest.kt index 52b65094..a4c99fea 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/ModelFeaturesTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/ModelFeaturesTest.kt @@ -8,7 +8,7 @@ class ModelFeaturesTest : BaseTest() { @Test fun `AirPods Pro 3 has all features`() { - val f = PodDevice.Model.AIRPODS_PRO3.features + val f = PodModel.AIRPODS_PRO3.features f.hasDualPods shouldBe true f.hasCase shouldBe true f.hasEarDetection shouldBe true @@ -17,7 +17,7 @@ class ModelFeaturesTest : BaseTest() { @Test fun `AirPods Gen 1 has dual pods and case but no ear detection or ANC`() { - val f = PodDevice.Model.AIRPODS_GEN1.features + val f = PodModel.AIRPODS_GEN1.features f.hasDualPods shouldBe true f.hasCase shouldBe true f.hasEarDetection shouldBe false @@ -26,7 +26,7 @@ class ModelFeaturesTest : BaseTest() { @Test fun `AirPods Max is single device with ANC but no dual pods or case`() { - val f = PodDevice.Model.AIRPODS_MAX.features + val f = PodModel.AIRPODS_MAX.features f.hasDualPods shouldBe false f.hasCase shouldBe false f.hasEarDetection shouldBe false @@ -35,7 +35,7 @@ class ModelFeaturesTest : BaseTest() { @Test fun `Beats Solo 3 has no features`() { - val f = PodDevice.Model.BEATS_SOLO_3.features + val f = PodModel.BEATS_SOLO_3.features f.hasDualPods shouldBe false f.hasCase shouldBe false f.hasEarDetection shouldBe false @@ -44,7 +44,7 @@ class ModelFeaturesTest : BaseTest() { @Test fun `PowerBeats Pro has dual pods, case, ear detection but no ANC`() { - val f = PodDevice.Model.POWERBEATS_PRO.features + val f = PodModel.POWERBEATS_PRO.features f.hasDualPods shouldBe true f.hasCase shouldBe true f.hasEarDetection shouldBe true @@ -53,7 +53,7 @@ class ModelFeaturesTest : BaseTest() { @Test fun `UNKNOWN model has no features`() { - val f = PodDevice.Model.UNKNOWN.features + val f = PodModel.UNKNOWN.features f.hasDualPods shouldBe false f.hasCase shouldBe false f.hasEarDetection shouldBe false @@ -62,7 +62,7 @@ class ModelFeaturesTest : BaseTest() { @Test fun `all ANC-capable models also have ear detection or are headphones`() { - PodDevice.Model.entries + PodModel.entries .filter { it.features.hasAncControl && it.features.hasDualPods } .forEach { model -> model.features.hasEarDetection shouldBe true @@ -71,7 +71,7 @@ class ModelFeaturesTest : BaseTest() { @Test fun `all models with case also have dual pods`() { - PodDevice.Model.entries + PodModel.entries .filter { it.features.hasCase } .forEach { model -> model.features.hasDualPods shouldBe true diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1Test.kt index 9992cecc..3d9bda5f 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen1Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.DualApplePods import eu.darken.capod.pods.core.apple.HasAppleColor @@ -39,7 +39,7 @@ class AirPodsGen1Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_GEN1 + model shouldBe PodModel.AIRPODS_GEN1 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2Test.kt index 58db3694..8e6bb4e7 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen2Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.DualApplePods import eu.darken.capod.pods.core.apple.HasAppleColor @@ -40,7 +40,7 @@ class AirPodsGen2Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_GEN2 + model shouldBe PodModel.AIRPODS_GEN2 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3Test.kt index 8bef8869..68f1a78c 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen3Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.DualApplePods import eu.darken.capod.pods.core.apple.HasAppleColor @@ -40,7 +40,7 @@ class AirPodsGen3Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_GEN3 + model shouldBe PodModel.AIRPODS_GEN3 } } diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4AncTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4AncTest.kt index be70d354..1228ac21 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4AncTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4AncTest.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.DualApplePods import eu.darken.capod.pods.core.apple.HasAppleColor @@ -40,7 +40,7 @@ class AirPodsGen4AncTest : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_GEN4_ANC + model shouldBe PodModel.AIRPODS_GEN4_ANC } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Test.kt index a89bb4bb..3b83434c 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsGen4Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.DualApplePods import eu.darken.capod.pods.core.apple.HasAppleColor @@ -40,7 +40,7 @@ class AirPodsGen4Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_GEN4 + model shouldBe PodModel.AIRPODS_GEN4 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxTest.kt index 8d1135b6..f32720d8 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxTest.kt @@ -1,7 +1,7 @@ package eu.darken.capod.pods.core.apple.airpods import eu.darken.capod.common.isBitSet -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor import io.kotest.matchers.shouldBe @@ -28,7 +28,7 @@ class AirPodsMaxTest : BaseAirPodsTest() { isHeadsetBeingCharged shouldBe false - model shouldBe PodDevice.Model.AIRPODS_MAX + model shouldBe PodModel.AIRPODS_MAX } } diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbcTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbcTest.kt index 552478fb..2accc380 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbcTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsMaxUsbcTest.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -26,7 +26,7 @@ class AirPodsMaxUsbcTest : BaseAirPodsTest() { isHeadsetBeingCharged shouldBe false - model shouldBe PodDevice.Model.AIRPODS_MAX_USBC + model shouldBe PodModel.AIRPODS_MAX_USBC } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Test.kt index 8b0ad012..9439be35 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor import io.kotest.matchers.shouldBe @@ -42,7 +42,7 @@ class AirPodsPro2Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_PRO2 + model shouldBe PodModel.AIRPODS_PRO2 } } diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2UsbcTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2UsbcTest.kt index 94b7e883..b3799b77 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2UsbcTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro2UsbcTest.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor import io.kotest.matchers.shouldBe @@ -42,7 +42,7 @@ class AirPodsPro2UsbcTest : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_PRO2_USBC + model shouldBe PodModel.AIRPODS_PRO2_USBC } } @@ -66,7 +66,7 @@ class AirPodsPro2UsbcTest : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_PRO2_USBC + model shouldBe PodModel.AIRPODS_PRO2_USBC } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro3Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro3Test.kt index 2bd4eaeb..0ae9086c 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro3Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsPro3Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.airpods -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor import io.kotest.matchers.shouldBe @@ -45,7 +45,7 @@ class AirPodsPro3Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_PRO3 + model shouldBe PodModel.AIRPODS_PRO3 } } @@ -71,7 +71,7 @@ class AirPodsPro3Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_PRO3 + model shouldBe PodModel.AIRPODS_PRO3 } } @@ -88,7 +88,7 @@ class AirPodsPro3Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_PRO3 + model shouldBe PodModel.AIRPODS_PRO3 } } } diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsProTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsProTest.kt index 1ca36e07..bfcffc2e 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsProTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/airpods/AirPodsProTest.kt @@ -1,7 +1,7 @@ package eu.darken.capod.pods.core.apple.airpods import eu.darken.capod.common.toHex -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor import eu.darken.capod.profiles.core.AppleDeviceProfile @@ -38,7 +38,7 @@ class AirPodsProTest : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.AIRPODS_PRO + model shouldBe PodModel.AIRPODS_PRO } } diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsFitProTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsFitProTest.kt index e68ef264..05a7a42f 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsFitProTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsFitProTest.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor import io.kotest.matchers.shouldBe @@ -37,7 +37,7 @@ class BeatsFitProTest : BaseAirPodsTest() { batteryCasePercent shouldBe null podStyle.identifier shouldBe HasAppleColor.DeviceColor.UNKNOWN.name - model shouldBe PodDevice.Model.BEATS_FIT_PRO + model shouldBe PodModel.BEATS_FIT_PRO } } @@ -66,7 +66,7 @@ class BeatsFitProTest : BaseAirPodsTest() { batteryCasePercent shouldBe 0.2f podStyle.identifier shouldBe HasAppleColor.DeviceColor.UNKNOWN.name - model shouldBe PodDevice.Model.BEATS_FIT_PRO + model shouldBe PodModel.BEATS_FIT_PRO } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsFlexText.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsFlexText.kt index 6c0340f1..92b839d5 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsFlexText.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsFlexText.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -24,7 +24,7 @@ class BeatsFlexText : BaseAirPodsTest() { batteryHeadsetPercent shouldBe 0.4f - model shouldBe PodDevice.Model.BEATS_FLEX + model shouldBe PodModel.BEATS_FLEX } } diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3Test.kt index ce0832b9..502c15f6 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsSolo3Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -24,7 +24,7 @@ class BeatsSolo3Test : BaseAirPodsTest() { batteryHeadsetPercent shouldBe 0.4f - model shouldBe PodDevice.Model.BEATS_SOLO_3 + model shouldBe PodModel.BEATS_SOLO_3 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3Test.kt index fbfe3a78..2bb2047c 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsStudio3Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -24,7 +24,7 @@ class BeatsStudio3Test : BaseAirPodsTest() { batteryHeadsetPercent shouldBe 0.4f - model shouldBe PodDevice.Model.BEATS_STUDIO_3 + model shouldBe PodModel.BEATS_STUDIO_3 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsXTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsXTest.kt index 773862da..6e0000e1 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsXTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/BeatsXTest.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -24,7 +24,7 @@ class BeatsXTest : BaseAirPodsTest() { batteryHeadsetPercent shouldBe 0.5f - model shouldBe PodDevice.Model.BEATS_X + model shouldBe PodModel.BEATS_X } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3Test.kt index 83cbe7e2..e5b4de9f 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeats3Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -24,7 +24,7 @@ class PowerBeats3Test : BaseAirPodsTest() { batteryHeadsetPercent shouldBe 0.4f - model shouldBe PodDevice.Model.POWERBEATS_3 + model shouldBe PodModel.POWERBEATS_3 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4Test.kt index 4fa13634..52dc0259 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeats4Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.airpods.HasStateDetectionAirPods import io.kotest.matchers.shouldBe @@ -24,7 +24,7 @@ class PowerBeats4Test : BaseAirPodsTest() { batteryHeadsetPercent shouldBe 0.2f - model shouldBe PodDevice.Model.POWERBEATS_4 + model shouldBe PodModel.POWERBEATS_4 state shouldBe HasStateDetectionAirPods.ConnectionState.MUSIC } @@ -45,7 +45,7 @@ class PowerBeats4Test : BaseAirPodsTest() { batteryHeadsetPercent shouldBe 0.2f - model shouldBe PodDevice.Model.POWERBEATS_4 + model shouldBe PodModel.POWERBEATS_4 state shouldBe HasStateDetectionAirPods.ConnectionState.IDLE } @@ -67,7 +67,7 @@ class PowerBeats4Test : BaseAirPodsTest() { batteryHeadsetPercent shouldBe 0.2f - model shouldBe PodDevice.Model.POWERBEATS_4 + model shouldBe PodModel.POWERBEATS_4 state shouldBe HasStateDetectionAirPods.ConnectionState.DISCONNECTED } diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2Test.kt index 46ce4394..aea1d139 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsPro2Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor import io.kotest.matchers.shouldBe @@ -35,7 +35,7 @@ class PowerBeatsPro2Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.RED.name - model shouldBe PodDevice.Model.POWERBEATS_PRO2 + model shouldBe PodModel.POWERBEATS_PRO2 } } @@ -55,7 +55,7 @@ class PowerBeatsPro2Test : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.RED.name - model shouldBe PodDevice.Model.POWERBEATS_PRO2 + model shouldBe PodModel.POWERBEATS_PRO2 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsProTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsProTest.kt index 90ab127b..d312f820 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsProTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/beats/PowerBeatsProTest.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.beats -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import eu.darken.capod.pods.core.apple.HasAppleColor import io.kotest.matchers.shouldBe @@ -35,7 +35,7 @@ class PowerBeatsProTest : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.WHITE.name - model shouldBe PodDevice.Model.POWERBEATS_PRO + model shouldBe PodModel.POWERBEATS_PRO } } @@ -66,7 +66,7 @@ class PowerBeatsProTest : BaseAirPodsTest() { podStyle.identifier shouldBe HasAppleColor.DeviceColor.UNKNOWN.name - model shouldBe PodDevice.Model.POWERBEATS_PRO + model shouldBe PodModel.POWERBEATS_PRO } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1Test.kt index 8b093b62..c59902f3 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen1Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.misc -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -34,7 +34,7 @@ class FakeAirPodsGen1Test : BaseAirPodsTest() { batteryCasePercent shouldBe 0.7f - model shouldBe PodDevice.Model.FAKE_AIRPODS_GEN2 + model shouldBe PodModel.FAKE_AIRPODS_GEN2 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2Test.kt index d4d1dee7..e30be28d 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen2Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.misc -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -34,7 +34,7 @@ class FakeAirPodsGen2Test : BaseAirPodsTest() { batteryCasePercent shouldBe 0.7f - model shouldBe PodDevice.Model.FAKE_AIRPODS_GEN1 + model shouldBe PodModel.FAKE_AIRPODS_GEN1 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3Test.kt index d238a6e0..297fe761 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsGen3Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.misc -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -33,7 +33,7 @@ class FakeAirPodsGen3Test : BaseAirPodsTest() { batteryCasePercent shouldBe 0.7f - model shouldBe PodDevice.Model.FAKE_AIRPODS_GEN3 + model shouldBe PodModel.FAKE_AIRPODS_GEN3 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2Test.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2Test.kt index 81848e92..b72c6c5f 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2Test.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsPro2Test.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.misc -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -28,7 +28,7 @@ class FakeAirPodsPro2Test : BaseAirPodsTest() { batteryCasePercent shouldBe 0.8f - model shouldBe PodDevice.Model.FAKE_AIRPODS_PRO2 + model shouldBe PodModel.FAKE_AIRPODS_PRO2 } } @@ -55,7 +55,7 @@ class FakeAirPodsPro2Test : BaseAirPodsTest() { batteryCasePercent shouldBe 0.2f - model shouldBe PodDevice.Model.FAKE_AIRPODS_PRO2 + model shouldBe PodModel.FAKE_AIRPODS_PRO2 } } } \ No newline at end of file diff --git a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsProTest.kt b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsProTest.kt index 3466a269..e03f6e57 100644 --- a/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsProTest.kt +++ b/app/src/test/java/eu/darken/capod/pods/core/apple/misc/FakeAirPodsProTest.kt @@ -1,6 +1,6 @@ package eu.darken.capod.pods.core.apple.misc -import eu.darken.capod.pods.core.PodDevice +import eu.darken.capod.pods.core.PodModel import eu.darken.capod.pods.core.apple.BaseAirPodsTest import io.kotest.matchers.shouldBe import kotlinx.coroutines.test.runTest @@ -34,7 +34,7 @@ class FakeAirPodsProTest : BaseAirPodsTest() { batteryCasePercent shouldBe 0.7f - model shouldBe PodDevice.Model.FAKE_AIRPODS_PRO + model shouldBe PodModel.FAKE_AIRPODS_PRO } } } \ No newline at end of file