Files
file-manager/PRIVACY.md
T
SoftwareApp bb1187881b Make the Android 13+ pass, and fix what it found
The phone runs Android 12, so the questions that matter most for a release were exactly the ones it could not answer. Installed an API 35 AVD (sdkmanager was already present and dl.google.com reachable) rather than waiting for a public test track to report back. It found two user-visible defects, neither of which any test could have caught.

On Android 13+ the app asked for no runtime permission at all, so the progress notification was dead. StorageAccessPolicy.missingPermissions returned an empty list from API 33 on the reasoning that "all files access" is a special permission and browsing therefore needs no runtime grant — true as far as browsing goes, but the early return also dropped POST_NOTIFICATIONS, and nothing else in the app requested it. startForeground still ran, so nothing crashed and all 203 tests passed, while dumpsys showed granted=false and importance=NONE. Settings could not fix that either, because Android will not let a user grant a permission the app has never asked for. The notification grant is now requested alongside the storage grant, which is the only moment Android accepts it.

The four READ_MEDIA_* declarations were in the same position, and the manifest comment claiming they back thumbnails and viewers on Android 13+ was wrong. Coil loads both from a real filesystem path — the code comments already say "all-files mode only" — and the one MediaStore use is a best-effort delete request that "all files access" already covers. They were never requested, so they were never granted, so nothing could have depended on them. Removed, which also settles the checklist rule that declaring an unused permission is itself a policy violation.

The selection bar drew its last three actions off the screen on a phone. With one archive selected it holds ten icon buttons, ~480 dp at the 48 dp minimum touch size against the 411 dp a phone has, and BottomAppBar is a plain Row that does not scroll. Compose laid the surplus out past the right edge: measured on a 1080 px screen the row ran Copy(167) to Compress(923-980, itself squeezed to 57 px) and stopped, so Extract here, Select all and Clear selection were unreachable, while the same selection in a 2400 px landscape window showed all ten. The logic was never wrong — ArchiveFormats.isExtractable had judged the .zip correctly — the app just looked like it could not extract. The action row now scrolls, verified by swiping it in portrait and seeing all ten appear.

Verified on the AVD rather than only built: the notification dialog now appears and importance goes NONE -> DEFAULT, a real 220 MB copy posts notification 1001 on channel file-operations with ONGOING_EVENT|FOREGROUND_SERVICE and tears it down plus stops the service when done, edge-to-edge is correct under API 35s enforcement, predictive back returns from a folder and keeps the activity resumed, and Compress to ZIP produced an archive the host unzip read back with the right relative paths and contents. 204 JVM tests, lint clean, release artefacts re-measured.
2026-10-15 11:39:48 +02:00

5.3 KiB

Privacy Policy — File Manager

Last updated: 2026-10-15

Summary

File Manager lets you browse and manage the files on your own device, entirely offline. The app does not collect, transmit, sell or share any of your data. It has no network access at all: it declares no INTERNET permission and contains no analytics, no advertising and no crash-reporting SDK. It is sold once through Google Play; the purchase is handled entirely by Google Play, never by the app (see Purchases).

What the app accesses

Data Why Where it goes
Your files and folders To show them and to carry out the actions you ask for (open, copy, move, rename, delete, compress, extract) Never leaves your device
File metadata (name, size, folder, modified date) To sort, search, measure storage usage and show details Never leaves your device
The folder you grant (only in the fallback mode) To browse a folder you picked yourself, when "All files access" is declined A permission reference is stored by Android on this device

What the app does NOT do

  • It does not have the INTERNET permission, so it cannot send data anywhere.
  • It does not collect analytics, crash reports, advertising identifiers or location data.
  • It does not contain advertising SDKs or third-party trackers.
  • It does not create accounts and does not ask for your name, email or phone number.
  • It does not upload, back up or sync your files.

Permissions and what they mean

Permission Purpose
MANAGE_EXTERNAL_STORAGE ("All files access") Required for the app's core purpose: browsing and managing files anywhere on the device. Google Play only allows this permission for apps whose core purpose needs it — file managers are one of the accepted cases — and the app must be granted it by you in Android Settings. If you decline, the app still works, but only in a folder you pick.
READ_EXTERNAL_STORAGE (Android 12 and below) Read access on older Android versions, where this single grant is what carries file and media reads. From Android 13 that role is taken over by "All files access" above, so the app declares no READ_MEDIA_* permission at all: it reads through the filesystem (thumbnails and viewers load from a real path) and never queries the media store.
WRITE_EXTERNAL_STORAGE (Android 10 only) Used only to write files you ask for on that older Android version.
Notifications (POST_NOTIFICATIONS, Android 13+) Optional. Shows progress while a long copy, move, delete or extraction is running. Denying it changes nothing except that the progress bar is not shown. The app asks for it once, together with the file-access request — Android will not let you grant it in Settings to an app that has never asked.
Foreground service (FOREGROUND_SERVICE, FOREGROUND_SERVICE_DATA_SYNC) Keeps a long file operation running while the app is in the background, so a move is not cut in half.

Deleting files

Files are deleted only when you ask, and deleting asks for confirmation first. Where Android provides its own delete dialog for media files, the app hands the request to the system and Android performs that deletion.

For everything else the app moves the item into a hidden .plainfiles-trash folder on the same volume instead of erasing it, and keeps it there for 24 hours so a mistake can be undone. Those items are still on your device and still count against your free space until they expire; the app removes them by itself after that. The Trash screen, in the app's menu, lists what is still there and puts it back where it came from. The app never touches anything you did not select.

Data retention and deletion

The app stores a small amount of data in its own private storage:

  • your view preferences (list or grid, sort order);
  • any folder permission you granted through the system picker;
  • a small index of what is currently in the trash — file names, the folder each item came from, its size and when it was deleted — so that a deletion can be put back even after the app has been restarted.

None of it leaves your device. Uninstalling the app, or clearing its storage in Android Settings, removes all of it. One thing worth knowing: clearing the app's storage forgets what is in the trash, but the trashed files themselves stay on your volume until they expire, or until you move them back by hand.

The app does not keep a second copy of your files. The trash holds the originals by moving them, so nothing is duplicated and no extra space is used beyond the items themselves.

Purchases

The app is sold once through Google Play. There is no subscription and there is nothing to buy inside the app.

Google Play processes the payment and holds the payment details. The app contains no payment code and never receives them, because it has no network access of any kind (see above). Refunds, order problems and any question about a charge are handled by Google Play, and the developer can be reached at the address below.

Children

The app is a general-purpose utility and is not directed at children. It collects no personal data from anyone.

Changes

If this policy changes, the updated version will be published at this address with a new "last updated" date.

Contact

Questions about this policy: softwareapp.hb@gmail.com.