Android-приложение на Kotlin + Jetpack Compose. Камера делает фото в одну из двух папок:
- Temp/ — файлы автоматически удаляются через 24ч (
WorkManager). - Keep/ — хранятся навсегда.
Плюс наблюдение за скриншотами: при каждом новом скриншоте приходит уведомление с кнопками «Оставить» / «Через 24ч».
| Слой | Библиотека |
|---|---|
| Язык | Kotlin 2.0.20 |
| UI | Jetpack Compose (BOM 2024.09.02) + Material3 |
| Навигация | Navigation-Compose 2.8.0 |
| Камера | CameraX 1.3.4 |
| Фоновая очистка | WorkManager 2.9.1 |
| Изображения | Coil 2.7.0 |
| Permissions | Accompanist 0.34.0 |
| Мин. Android | API 29 (Android 10) |
| Target | API 34 (Android 14) |
Требуется: Android Studio Koala (2024.1.1) или новее + JDK 17.
- Распакуйте архив.
- File → Open → выберите папку
FadeSnap. - Studio напишет "Gradle wrapper is missing" — согласитесь сгенерировать
(или выполните в терминале проекта:
gradle wrapper --gradle-version 8.7). После этого появятся файлыgradlew,gradlew.bat,gradle/wrapper/gradle-wrapper.jar. - Sync Project with Gradle Files (первая синхронизация качает ~500 МБ зависимостей — это нормально).
- Подключите телефон в режиме отладки → Run ▶.
app/src/main/
├── AndroidManifest.xml permissions, FileProvider, service
├── java/com/fadesnap/app/
│ ├── FadeSnapApp.kt Application — schedule cleanup worker
│ ├── MainActivity.kt Navigation graph
│ ├── storage/PhotoStorage.kt Temp/ + Keep/ dirs, move, share URI
│ ├── work/
│ │ ├── CleanupWorker.kt deletes Temp/ files older than 24h
│ │ └── CleanupScheduler.kt enqueues the PeriodicWork
│ ├── screenshot/
│ │ ├── ScreenshotWatcherService.kt foreground MediaStore observer
│ │ └── ScreenshotActionReceiver.kt handles Keep/Fade notif buttons
│ └── ui/
│ ├── theme/ (Color.kt, Theme.kt)
│ └── screens/
│ ├── CameraScreen.kt live preview + shutter + toggle
│ ├── GalleryScreen.kt Temp/Keep tabs + actions sheet
│ ├── EditorScreen.kt rotate + save
│ └── SettingsScreen.kt screenshot-watcher toggle
└── res/
├── drawable/ ic_launcher_background.xml, ic_launcher_foreground.xml
├── mipmap-anydpi-v26/ ic_launcher.xml, ic_launcher_round.xml
├── values/ strings.xml, colors.xml, themes.xml
└── xml/ file_paths.xml
Для стабильной работы службы наблюдения за скриншотами пользователю нужно РУЧНО включить:
- Настройки → Приложения → FadeSnap → Автозапуск
- Экономия батареи → Нет ограничений для FadeSnap
Программно эти настройки включить нельзя — производитель запретил.
В SettingsScreen.kt висит соответствующая подсказка.
- Редактор: кроп, фильтры, рисование поверх (сейчас только поворот).
- DataStore для постоянного флага «наблюдать за скриншотами».
- Локализация —
strings.xmlуже готов кvalues-en/,values-de/. - Обработка
RecoverableSecurityExceptionпри удалении чужих файлов на Android 11+ (сейчас тихий fallback).