From 3e8f6cf2721fce0f19bca746f3cd84f56d04d4f4 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 25 Jul 2026 05:10:47 +0000 Subject: [PATCH] fix: show favorites above recent models in the model picker The favorites filter built its key as "$provider.id/..." without brace-wrapping provider.id, so it interpolated Provider.toString() instead of the id and never matched favoriteModelKeys, hiding the favorites section entirely. Also cap the recent list at 3 entries when rendering, matching the storage-side limit. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01JPgh5Ax2U4XfUzysSPKcgH --- .../android/feature/chat/ModelAndRuntimePickerSheet.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/opencode/android/feature/chat/ModelAndRuntimePickerSheet.kt b/app/src/main/java/com/opencode/android/feature/chat/ModelAndRuntimePickerSheet.kt index 2f42ddb..93d0845 100644 --- a/app/src/main/java/com/opencode/android/feature/chat/ModelAndRuntimePickerSheet.kt +++ b/app/src/main/java/com/opencode/android/feature/chat/ModelAndRuntimePickerSheet.kt @@ -42,6 +42,8 @@ import com.opencode.android.core.api.OpenCodeProvider import com.opencode.android.runtime.RuntimeTarget import com.opencode.android.runtime.RuntimeType +private const val MAX_RECENT_MODELS = 3 + /** * Bottom sheet opened from the chat screen's model chip. Lets the user pick both * the execution target (this Android device or a registered remote runtime) and @@ -137,7 +139,7 @@ fun ModelAndRuntimePickerSheet( val favoriteEntries = providers.flatMap { provider -> provider.models.values - .filter { "$provider.id/${it.id}" in favoriteModelKeys } + .filter { "${provider.id}/${it.id}" in favoriteModelKeys } .filter { query.isBlank() || it.name.contains(query, true) || it.id.contains(query, true) } .map { FavoriteEntry(provider, it) } }.sortedBy { it.model.name.lowercase() } @@ -151,6 +153,7 @@ fun ModelAndRuntimePickerSheet( FavoriteEntry(provider, model) }.filter { entry -> "${entry.provider.id}/${entry.model.id}" !in favoriteModelKeys } .filter { query.isBlank() || it.model.name.contains(query, true) || it.model.id.contains(query, true) } + .take(MAX_RECENT_MODELS) if (favoriteEntries.isNotEmpty()) { item {