# Changelog All notable changes to File Manager are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). `versionCode` and `versionName` are defined in `app/build.gradle.kts`. Each Play upload needs a **higher `versionCode`** than every previous upload. ## [Unreleased] ### Added - **M2 — storage layer.** The two storage backends behind one interface. `AllFilesSource` is `java.io.File` over every mounted volume (the "All files access" path); `SafSource` is the Storage Access Framework fallback, reading a persisted tree URI through `DocumentsContract` with `SafDocumentIds` doing the tree↔path mapping and `SafGrant` owning the folder picker and its persistence. `VolumeRepository` enumerates volumes via `StorageManager`/`StorageVolume` and reports free/total space through `StatFs`; `StorageAccess` and `StorageAccessPolicy` decide between the two backends. Both sources confine their blocking I/O to `Dispatchers.IO` and expose a `suspend` contract. 32 new JVM tests (76 total), including a Robolectric run of `SafSource` against a stand-in `DocumentsProvider`. - **M1 — pure-Kotlin core engine.** An Android-free `core/` package holding the logic every other layer builds on: `StoragePath` (normalised absolute paths that can never escape the root), `FileEntry` with extension-based `FileKind` classification and a `MimeTypes` lookup for "open with", natural-order `SortSpec` (directories always first, `file2` before `file10`), human-readable `FileSize`, `NameMatcher` (case-insensitive substring plus `*`/`?` globs), `NameAllocator` ("name (1)") and `TransferPlanner` (conflict policies and move-into-self detection). Covered by **44 JVM unit tests** across 10 classes. - **M0 — project scaffold.** Gradle 9.3.1 / AGP 9.1.0 build with a version catalog, `de.softwareapp_hb.filemanager` app module, a Compose Material 3 shell with the branded blue theme (dynamic colour on Android 12+), an adaptive launcher icon, and the storage-access permission set (all files access + SAF fallback). Debug APK builds, installs and runs on an AOSP Android 12 AVD.