Files
file-manager/docs/ROADMAP.md
T

3.6 KiB
Raw Blame History

Roadmap

File Manager is built against a fixed milestone plan (M0–M10). This file is the single source of truth for what is done and what remains.

Legend: ✅ done · 🚧 in progress · ⏳ not started · 💡 candidate (proposed, not scheduled)

Milestones

# Milestone Status Evidence / notes
M0 Toolchain & scaffold ✅ Gradle 9.3.1 + AGP 9.1.0 wrapper, version catalog, app module, Compose theme, debug APK builds, installs and runs on the phone AVD: package de.softwareapp_hb.filemanager.debug, versionCode 1, minSdk 26/targetSdk 36, no INTERNET permission, lintDebug clean (one expected UnusedResources for the not-yet-used notification icon)
M1 Pure-Kotlin core + JVM tests ✅ core/ is Android-free: StoragePath (normalised absolute paths that cannot escape the root), FileEntry + FileKind classification, MimeTypes, NaturalOrder + SortSpec (directories first; file2 before file10), FileSize, NameMatcher (substring + */? glob), NameAllocator ("name (1)") and TransferPlanner (conflict policies, move-into-self). 44 JVM tests across 10 classes, all green
M2 Storage layer ⏳ StorageSource interface with AllFilesSource (MANAGE_EXTERNAL_STORAGE) and SafSource (persisted tree URIs); VolumeRepository (StorageManager/StorageVolume, StatFs); permission + all-files-access state machine
M3 Operations engine + service ⏳ create/rename/copy/move/delete, recursive copy with progress + cancellation, conflict resolution, trash via MediaStore, foreground service + progress notification
M4 Compose UI ⏳ browser list/grid, breadcrumb + up navigation, sort/filter sheet, multi-select action bar, details sheet, permission prompts, theme
M5 Analysis, archives, viewers ⏳ disk-usage analysis, large-file finder, ZIP/TAR/GZ via Commons Compress, image viewer, text editor
M6 Release config & Play readiness ⏳ R8/minify, optional signing, .aab; PLAY_RELEASE_CHECKLIST (incl. the Permissions Declaration Form), PRIVACY.md, README
M7 On-device validation & hardening ⏳ AVD + real-device checks, per-operation error boundaries, edge-case fixtures
M8 Localisation groundwork ⏳ every user-visible string in res/values/strings.xml with real <plurals>; text/ mapping
M9 Monetisation ⏳ one-time paid — price set only in the Play Console before the first upload; no Billing code and no BILLING permission
M10 Store assets ⏳ icon/feature-graphic generators, per-form-factor screenshots, STORE_LISTING; display name confirmed

Key decisions

Decision Choice Rationale
Language / UI Kotlin + Jetpack Compose Mirrors the sibling app's proven, installed toolchain; no NDK
Storage access MANAGE_EXTERNAL_STORAGE first, SAF fallback Google Play explicitly permits "All files access" for file managers; SAF keeps the app usable if the user declines
Connectivity Local-first (no INTERNET in v1) Preserves the "nothing leaves the device" claim and keeps the Data Safety form trivial
Monetisation One-time paid, price in Console No Billing code; free → paid is impossible after the first upload, so the price must be set beforehand

Deliberately deferred (post-1.0)

  • Dual-pane view; cloud storage (Drive/OneDrive/Dropbox/…); network clients (SMB/FTP/SFTP/WebDAV); FTP/Web server.
  • App manager (QUERY_ALL_PACKAGES), APK installation (REQUEST_INSTALL_PACKAGES).
  • RAR/7z archives; root explorer; encryption vault; themes/icon packs.