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