Summary
Highlights
Critical fix release for the file/storage tools: android_list_files now actually filters by the path you pass on built-in locations, and the camera roll — previously unreachable — is exposed through a new Camera (DCIM) location, along with a new Recordings location for voice recordings.
list_filespath filtering fixed — on built-in locations thepathparameter was effectively ignored (any single-folder path returned the same root listing), making folder navigation impossible (PR #157).- Camera roll reachable — new
builtin:dcim("Camera (DCIM)") location exposes camera photos and videos;builtin:picturesnow also includes videos stored underPictures/(PR #157). - Voice recordings reachable — new
builtin:recordingslocation covers theRecordings/directory, whichbuiltin:music(scoped toMusic/) could not see (PR #158).
🐛 Fixes
Both issues were introduced by an earlier reorganization of the storage layer and went unnoticed until reported against v1.11.0:
android_list_filesused a broken directory filter on built-in locations (PR #157, #154) — the reorganization reused a file-path helper (which drops the last segment to get a file's parent directory) for directory listings, sopath="Camera",path="Screenshots", etc. all returned the identical root listing, mislabeled as the requested folder. The filter now keeps every segment and escapes SQLLIKEwildcards (%,_,\), so folder names containing those characters can't distort results.- Camera roll (
DCIM/Camera) was structurally invisible (PR #157, #155) — the reorganized built-in locations were each backed by a single MediaStore collection scoped to one top-level directory, soDCIM/content had no location at all and camera videos underPictures/were filtered out. Built-in locations are now backed by all the collections whose content can live in their directory.
✨ Improvements
- New
builtin:dcim— "Camera (DCIM)" (PR #157) — lists, reads and serves camera photos and videos; withREAD_MEDIA_IMAGES/READ_MEDIA_VIDEOgranted it shows the full camera roll. - New
builtin:recordings— "Recordings" (PR #158, #156) — lists, reads and (when write is enabled) accepts audio files in theRecordings/directory (Android 12+ standard directory for voice recordings). - Per-type access shown in location names (PR #157) — built-in location names now reflect the actual grant state per media type: "All files", "Only owned files", or an explicit partial state like "Pictures - All images, owned videos". The settings grant button requests all missing
READ_MEDIA_*permissions of a location in one tap. - Uniform MIME validation on writes (PR #157, #158) — writing, file-URI creation and URL downloads through built-in locations validate the file type against what the location accepts before any insert or network I/O, and reject mismatches with a clear error listing the accepted types (e.g. no text files into
builtin:pictures, no video intobuiltin:recordings).
What's Changed
- Plan 61: Fix list_files path filtering and make the camera roll reachable (DCIM) by @danielealbano in #157
- Plan 62: Add builtin:recordings storage location by @danielealbano in #158
Full Changelog: v1.11.0...v1.11.1
Requirements
- Android 13 or newer (API 33+) is required. On older Android versions the install fails with "There was a problem parsing the package." This includes emulators running older Android images — for example BlueStacks 5, whose device profiles top out at Android 11, cannot run this app.
- Privacy Mode's model-backed categories (names, addresses, national IDs) require a one-time ~154 MB model download; the other categories work without it.