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 49fe6c5f..c7908b47 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 @@ -131,6 +131,7 @@ fun OverviewScreenHost(vm: OverviewViewModel = hiltViewModel()) { onToggleUnmatched = { vm.toggleUnmatchedDevices() }, onAncModeChange = { device, mode -> vm.setAncMode(device, mode) }, onDeviceSettings = { device -> vm.goToDeviceSettings(device) }, + onEditProfile = { device -> vm.goToEditProfile(device) }, ) } @@ -144,6 +145,7 @@ fun OverviewScreen( onToggleUnmatched: () -> Unit, onAncModeChange: (PodDevice, AapSetting.AncMode.Value) -> Unit = { _, _ -> }, onDeviceSettings: (PodDevice) -> Unit = {}, + onEditProfile: (PodDevice) -> Unit = {}, ) { Scaffold( topBar = { @@ -236,6 +238,7 @@ fun OverviewScreen( onAncModeChange = { mode -> onAncModeChange(device, mode) }, onUpgrade = onUpgrade, onDeviceSettings = { onDeviceSettings(device) }, + onEditProfile = { onEditProfile(device) }, ) } @@ -298,6 +301,7 @@ private fun PodDeviceCard( onAncModeChange: (AapSetting.AncMode.Value) -> Unit, onUpgrade: () -> Unit, onDeviceSettings: (() -> Unit)? = null, + onEditProfile: (() -> Unit)? = null, ) { when { device.hasDualPods -> DualPodsCard( @@ -305,12 +309,14 @@ private fun PodDeviceCard( onAncModeChange = onAncModeChange, onUpgrade = onUpgrade, onDeviceSettings = onDeviceSettings, + onEditProfile = onEditProfile, ) device.model != PodModel.UNKNOWN -> SinglePodsCard( device = device, isPro = isPro, showDebug = showDebug, now = now, onAncModeChange = onAncModeChange, onUpgrade = onUpgrade, onDeviceSettings = onDeviceSettings, + onEditProfile = onEditProfile, ) else -> UnknownPodDeviceCard(device = device, showDebug = showDebug) } diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewViewModel.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewViewModel.kt index afd33853..f558943e 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewViewModel.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/OverviewViewModel.kt @@ -158,6 +158,11 @@ class OverviewViewModel @Inject constructor( navTo(Nav.Main.DeviceSettings(address)) } + fun goToEditProfile(device: PodDevice) { + val profileId = device.profileId ?: return + navTo(Nav.Main.DeviceProfileCreation(profileId = profileId)) + } + fun onUpgrade() { navTo(Nav.Main.Upgrade) } diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/DualPodsCard.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/DualPodsCard.kt index 409d3c89..ddcaad8f 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/DualPodsCard.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/DualPodsCard.kt @@ -21,6 +21,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.twotone.BatteryChargingFull import androidx.compose.material.icons.twotone.GridView import androidx.compose.material.icons.twotone.Tune +import androidx.compose.material.icons.twotone.Warning import androidx.compose.material3.CardDefaults import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ElevatedCard @@ -65,6 +66,7 @@ fun DualPodsCard( onAncModeChange: ((AapSetting.AncMode.Value) -> Unit)? = null, onUpgrade: (() -> Unit)? = null, onDeviceSettings: (() -> Unit)? = null, + onEditProfile: (() -> Unit)? = null, ) { val context = LocalContext.current @@ -147,6 +149,14 @@ fun DualPodsCard( tint = MaterialTheme.colorScheme.onSurfaceVariant, ) } + } else if (device.profileId != null && device.address == null && onEditProfile != null) { + IconButton(onClick = onEditProfile) { + Icon( + imageVector = Icons.TwoTone.Warning, + contentDescription = stringResource(R.string.overview_card_missing_paired_device_cd), + tint = MaterialTheme.colorScheme.error, + ) + } } } @@ -429,3 +439,14 @@ private fun DualPodsCardCachedPreview() = PreviewWrapper { now = Instant.now(), ) } + +@Preview2 +@Composable +private fun DualPodsCardMissingAddressPreview() = PreviewWrapper { + DualPodsCard( + device = MockPodDataProvider.dualPodMonitoredMixed(), + showDebug = false, + now = Instant.now(), + onEditProfile = {}, + ) +} diff --git a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/SinglePodsCard.kt b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/SinglePodsCard.kt index 66e793fc..3e61c140 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/overview/cards/SinglePodsCard.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/overview/cards/SinglePodsCard.kt @@ -22,6 +22,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.twotone.BatteryChargingFull import androidx.compose.material.icons.twotone.Hearing import androidx.compose.material.icons.twotone.Tune +import androidx.compose.material.icons.twotone.Warning import androidx.compose.material3.CardDefaults import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ElevatedCard @@ -61,6 +62,7 @@ fun SinglePodsCard( onAncModeChange: ((AapSetting.AncMode.Value) -> Unit)? = null, onUpgrade: (() -> Unit)? = null, onDeviceSettings: (() -> Unit)? = null, + onEditProfile: (() -> Unit)? = null, ) { val context = LocalContext.current @@ -146,6 +148,14 @@ fun SinglePodsCard( tint = MaterialTheme.colorScheme.onSurfaceVariant, ) } + } else if (device.profileId != null && device.address == null && onEditProfile != null) { + IconButton(onClick = onEditProfile) { + Icon( + imageVector = Icons.TwoTone.Warning, + contentDescription = stringResource(R.string.overview_card_missing_paired_device_cd), + tint = MaterialTheme.colorScheme.error, + ) + } } } @@ -299,3 +309,14 @@ private fun SinglePodsCardCachedPreview() = PreviewWrapper { now = Instant.now(), ) } + +@Preview2 +@Composable +private fun SinglePodsCardMissingAddressPreview() = PreviewWrapper { + SinglePodsCard( + device = MockPodDataProvider.singlePodMonitored(), + showDebug = false, + now = Instant.now(), + onEditProfile = {}, + ) +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d9f0d2ca..f892b17d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -474,6 +474,7 @@ Single press to mute microphone Double press to end call Open device settings + Profile has no paired Bluetooth device — tap to edit profile General