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?,