git.iko.soy/opencode-android
on master help sign in
Fix stuck loading spinner, swallowed search errors, and empty folder after clearing file search
commitc6a343e181e2bbb39c19f0c5f8805940da0e0539 authoriko <mail@iko.soy> dateTue 30 Jun 2026, 10:40 (3 months ago) parent363f751
2 files changed+8−1
app/src/main/java/soy/iko/opencode/ui/file/FileBrowserScreen.kt+1−1 app/src/main/java/soy/iko/opencode/ui/file/FileBrowserViewModel.kt+7
app/src/main/java/soy/iko/opencode/ui/file/FileBrowserScreen.kt+1−1
@@ -113,7 +113,7 @@ fun FileBrowserScreen(
113113 Modifier.align(Alignment.Center).semantics { contentDescription = loadingLabel },
114114 )
115115 }
116− state.error != null && !state.isSearching -> Text(
116+ state.error != null -> Text(
117117 state.error ?: "",
118118 modifier = Modifier.align(Alignment.Center).padding(24.dp),
119119 color = MaterialTheme.colorScheme.error,
app/src/main/java/soy/iko/opencode/ui/file/FileBrowserViewModel.kt+7
@@ -132,8 +132,15 @@ class FileBrowserViewModel(private val container: AppContainer) : ViewModel() {
132132 openJob?.cancel()
133133 if (query.isBlank()) {
134134 _state.update { it.copy(results = emptyList(), searching = false) }
135+ // Cancelling openJob above may have interrupted an in-flight directory load,
136+ // leaving loading=true stuck. Re-open the current directory so the listing
137+ // re-populates instead of showing a perpetual spinner after clearing search.
138+ open(_state.value.path)
135139 return
136140 }
141+ // The search view replaces the directory listing; clear loading so the spinner
142+ // from a cancelled open() doesn't persist into the search results view.
143+ _state.update { it.copy(loading = false) }
137144 val client = api ?: run {
138145 _state.update { it.copy(searching = false, error = container.string(R.string.not_connected)) }
139146 return