You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudreve/android/README.md

2.6 KiB

Cloudreve Android

Native Android client for Cloudreve. Kotlin + Jetpack Compose, Material 3.

Status: Phase E — v0.1 implemented. Sign in, browse, download, upload, rename, mkdir, delete, thumbnails, share-link creation. See ../ROADMAP.md for the remaining scope.

Build

cd android
ANDROID_HOME=$HOME/Android/Sdk ./gradlew :app:assembleDebug
# APK: app/build/outputs/apk/debug/app-debug.apk

CI runs assembleDebug on every PR.

What's implemented

  • api/v4 auth: password login → access/refresh tokens, single-flight refresh on 401, server-side revocation on sign-out
  • File browser: folder navigation, cursor pagination, pull-refresh, mkdir / rename / delete / download (cache + FileProvider open)
  • Uploads: SAF document picker or share-sheet target, WorkManager background worker with progress notification, chunked through the upload-session flow (local + presigned remote policies)
  • Thumbnails via /file/thumb (Coil, lazily resolved per row)
  • Share-link creation (PUT /share), link copied to clipboard
  • Full-text search (GET /file/search): query bar in the files screen, offset pagination, result rows show parent path + content snippet; folder hits navigate into place
  • Camera auto-upload: periodic WorkManager sync of new MediaStore photos/videos to a configurable remote folder, Wi-Fi-only constraint, media-permission gated toggle, synced/failed ID dedup, manual "sync now" — settings dialog in the files top bar
  • Offline favorites: "Keep offline" in a file's menu downloads to filesDir/offline/ and registers the entry (DataStore JSON); star icon in the top bar opens the offline list — open via FileProvider, re-download to refresh, remove to delete
  • DocumentsProvider: the whole tree appears in the system Files app / SAF pickers — browse, open (cached download), thumbnails, rename, delete, and search all proxy to api/v4
  • Task notifications: periodic GET /workflow poll posts a notification when a task completes/fails/cancels — toggle in the settings dialog, runtime POST_NOTIFICATIONS permission gated
  • OAuth sign-in: "Sign in with browser" opens the server's consent page with PKCE; the /callback/desktop page deep-links the code back through cloudreve://mount, exchanged at /session/oauth/token
  • Local sync folder: pick a device folder (SAF, persisted permission) and a remote folder — periodic WorkManager worker mirrors new/changed files upstream, subdirectory structure preserved, unchanged files skipped via mtime/size signatures, Wi-Fi-only option

Planned next

  • Quick-share tile
  • No iOS. Ever.