4706e2669c
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/.
68 lines
2.7 KiB
Markdown
68 lines
2.7 KiB
Markdown
# 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)_.
|