v1.0.47: built-in folder browsers, icon crop fix, nav bar button fix
- Replace SAF document picker with custom LocalBrowserDialog (File API, quick-access shortcuts, breadcrumb nav, search, folder-only listing) - Rewrite RemoteBrowserDialog as full-screen dialog with breadcrumbs, search, and new-folder creation; add navigateToBreadcrumb/createFolder to RemoteBrowserViewModel - Fix Select button cut off by navigation bar in both browsers: wrap button in Column(navigationBarsPadding()) so the button sits above the nav bar rather than behind it - Tighten icon foreground crop to remove excess black border Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -57,6 +57,27 @@ class RemoteBrowserViewModel @Inject constructor(
|
||||
return true
|
||||
}
|
||||
|
||||
fun navigateToBreadcrumb(path: String) {
|
||||
val stack = _state.value.pathStack
|
||||
val idx = stack.lastIndexOf(path)
|
||||
val newStack = if (idx >= 0) stack.take(idx + 1) else listOf(path)
|
||||
loadJob?.cancel()
|
||||
_state.update { it.copy(currentPath = path, pathStack = newStack, isLoading = true, entries = emptyList(), error = null) }
|
||||
loadJob = loadPath(_state.value.accountId, path)
|
||||
}
|
||||
|
||||
fun createFolder(name: String) {
|
||||
val s = _state.value
|
||||
val newPath = if (s.currentPath.trimEnd('/') == "") "/$name" else "${s.currentPath.trimEnd('/')}/$name"
|
||||
viewModelScope.launch {
|
||||
val account = accountRepository.getAccount(s.accountId) ?: return@launch
|
||||
val provider = runCatching { providerFactory.create(account) }.getOrElse { return@launch }
|
||||
provider.createDirectory(newPath)
|
||||
.onSuccess { retry() }
|
||||
.onFailure { e -> _state.update { it.copy(error = "Could not create folder: ${e.message}") } }
|
||||
}
|
||||
}
|
||||
|
||||
fun retry() {
|
||||
val s = _state.value
|
||||
if (s.accountId == -1L) return
|
||||
|
||||
Reference in New Issue
Block a user