Initial commit: Foto Dup Finder 1.0.1
An Android duplicate-photo finder. Pure-Kotlin core (SHA-256 + dHash hashing, exact and perceptual union-find grouping, three sensitivity presets) with MediaStore access, a persistent SQLite hash index and a tiered ScanEngine behind a Jetpack Compose UI. No INTERNET permission, no ads, no analytics, no account. Ships versionCode 2 / versionName 1.0.1, carrying the scan-stall hardening (BoundedCall breaker) and verified against a 5,363-photo device library. 80 JVM unit tests, lint clean. Release paperwork is in docs/ (Play checklist, store listing, edge-case testing), the upload-ready Play graphics and screenshots in store-assets/, and the generators for those assets in tools/.
This commit is contained in:
+67
@@ -0,0 +1,67 @@
|
||||
# Privacy Policy — Foto Dup Finder
|
||||
|
||||
_Last updated: 2026-10-13_
|
||||
|
||||
## Summary
|
||||
|
||||
Foto Dup Finder finds and removes duplicate photos **entirely on your device**.
|
||||
The app does **not** collect, transmit, sell or share any of your data. It has no
|
||||
network access at all.
|
||||
|
||||
## What the app accesses
|
||||
|
||||
| Data | Why | Where it goes |
|
||||
|---|---|---|
|
||||
| Your photos (images) | To compare them and detect duplicates | Never leaves your device |
|
||||
| Photo metadata (file name, size, folder, dimensions, date) | To group and display results | Never leaves your device |
|
||||
| A local cache of file hashes | To make repeat scans fast | Stored only in this app's private storage |
|
||||
|
||||
## 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** read photos other than the images you grant access to.
|
||||
|
||||
## Permissions and what they mean
|
||||
|
||||
| Permission | Purpose |
|
||||
|---|---|
|
||||
| Read photos (`READ_MEDIA_IMAGES` / `READ_EXTERNAL_STORAGE`) | Required to scan your photo library. You can deny this and the app simply will not scan. On Android 14+ you may grant access to *selected photos only*; the app then scans only those. |
|
||||
| `READ_MEDIA_VISUAL_USER_SELECTED` | Supports Android 14's partial photo access. |
|
||||
| `WRITE_EXTERNAL_STORAGE` (Android 10 only) | Used solely to delete photos you explicitly select on that older Android version. |
|
||||
|
||||
## Deleting photos
|
||||
|
||||
On Android 11 and newer, deletions are performed through the operating system's
|
||||
own confirmation dialog (`MediaStore.createDeleteRequest` / `createTrashRequest`).
|
||||
The app can never delete anything without your explicit confirmation, and it never
|
||||
requests the broad `MANAGE_EXTERNAL_STORAGE` permission.
|
||||
|
||||
On Android 10, deletions use the standard media API and still only affect the files
|
||||
you selected.
|
||||
|
||||
## Data retention and deletion
|
||||
|
||||
The app stores a small local database of file hashes in its private app storage so
|
||||
that repeat scans are fast. This database contains no image content and never leaves
|
||||
your device. Uninstalling the app, or clearing its storage in Android Settings,
|
||||
removes it completely.
|
||||
|
||||
## 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: **support@example.com** _(replace with your real
|
||||
support address before publishing)_.
|
||||
Reference in New Issue
Block a user