git.iko.soy/opencode-android
on master help sign in
Fix stuck loading spinner, swallowed search errors, and empty folder after clearing file search
c6a343eiko
app/src/main/java/soy/iko/opencode/ui/file/FileBrowserScreen.kt+1−1
@@ -113,7 +113,7 @@ fun FileBrowserScreen(
113 Modifier.align(Alignment.Center).semantics { contentDescription = loadingLabel },
113 Modifier.align(Alignment.Center).semantics { contentDescription = loadingLabel },
114 )
114 )
115 }
115 }
116− state.error != null && !state.isSearching -> Text(
116+ state.error != null -> Text(
117 state.error ?: "",
117 state.error ?: "",
118 modifier = Modifier.align(Alignment.Center).padding(24.dp),
118 modifier = Modifier.align(Alignment.Center).padding(24.dp),
119 color = MaterialTheme.colorScheme.error,
119 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() {
132 openJob?.cancel()
132 openJob?.cancel()
133 if (query.isBlank()) {
133 if (query.isBlank()) {
134 _state.update { it.copy(results = emptyList(), searching = false) }
134 _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)
135 return
139 return
136 }
140 }
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) }
137 val client = api ?: run {
144 val client = api ?: run {
138 _state.update { it.copy(searching = false, error = container.string(R.string.not_connected)) }
145 _state.update { it.copy(searching = false, error = container.string(R.string.not_connected)) }
139 return
146 return