From 61d121f1caa209ed4b3b253c91dafb85ff43877f Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Fri, 5 Jun 2026 16:33:24 +0530 Subject: [PATCH] fix(android): show unavailable model rows as attention --- .../main/java/ai/openclaw/app/ui/ProvidersModelsScreen.kt | 5 +++-- .../java/ai/openclaw/app/ui/ProviderModelStatusTest.kt | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/ProvidersModelsScreen.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/ProvidersModelsScreen.kt index 520410dad790..0866ea02e369 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/ui/ProvidersModelsScreen.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/ProvidersModelsScreen.kt @@ -324,7 +324,7 @@ internal fun readyModelProviderCount( // Older gateways did not emit `available`; keep those rows on the legacy // readiness path while still honoring explicit false from upgraded gateways. -private fun modelAvailabilityUsable(model: GatewayModelSummary): Boolean = model.available != false +internal fun modelAvailabilityUsable(model: GatewayModelSummary): Boolean = model.available != false internal fun expiringModelProviderCount(providers: List): Int = providers @@ -579,12 +579,13 @@ private fun ModelGroup( @Composable private fun ModelRow(model: GatewayModelSummary) { + val available = modelAvailabilityUsable(model) Row(modifier = Modifier.fillMaxWidth().heightIn(min = 48.dp).padding(horizontal = 10.dp, vertical = 5.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(6.dp)) { Text(text = model.name, style = ClawTheme.type.mono, color = ClawTheme.colors.text, modifier = Modifier.weight(1f), maxLines = 1, overflow = TextOverflow.Ellipsis) modelCapabilityLabels(model).take(3).forEach { label -> ProviderMiniTag(text = label) } - Box(modifier = Modifier.size(4.5.dp).clip(CircleShape).background(ClawTheme.colors.success)) + Box(modifier = Modifier.size(4.5.dp).clip(CircleShape).background(if (available) ClawTheme.colors.success else ClawTheme.colors.warning)) } } diff --git a/apps/android/app/src/test/java/ai/openclaw/app/ui/ProviderModelStatusTest.kt b/apps/android/app/src/test/java/ai/openclaw/app/ui/ProviderModelStatusTest.kt index 33b60579cec6..72ab90b2eee0 100644 --- a/apps/android/app/src/test/java/ai/openclaw/app/ui/ProviderModelStatusTest.kt +++ b/apps/android/app/src/test/java/ai/openclaw/app/ui/ProviderModelStatusTest.kt @@ -102,6 +102,13 @@ class ProviderModelStatusTest { assertEquals(0, readyModelProviderCount(providers, models)) } + @Test + fun modelAvailabilityHonorsExplicitUnavailableRows() { + assertTrue(modelAvailabilityUsable(model(provider = "openai", available = true))) + assertTrue(modelAvailabilityUsable(model(provider = "openai", available = null))) + assertFalse(modelAvailabilityUsable(model(provider = "openai", available = false))) + } + private fun model( provider: String, available: Boolean?,