ShotSort is a lightweight Android app for organizing screenshots and other shared images into categories.
- Share one or more images to ShotSort from Gallery or another app
- Pick an existing category or create a new one
- Import the shared images into app-private storage
- Save local metadata in Room
- Open ShotSort and browse categories from the home navigation screen
- Enter a category to view its image grid
- Tap an image to open the full-screen viewer, swipe between images, zoom, and manage categories
- Category-first home screen
- Custom categories shown first, with
AllandUncategorizedfixed at the bottom - Multi-image import through Android share sheet
- App-private image storage after import
- Local bilingual UI with Chinese and English support
- Full-screen image viewer
- Swipe between images within the current category
- Two-finger zoom in the full-screen viewer
- Multi-category assignment for a single image
- Automatic removal from
Uncategorizedafter assigning any custom category - Drawer-style category navigation inside category pages
- About dialog and category management inside the app
This repository contains:
requirement.md: product and MVP requirementsarchitecture.md: architecture and data flow- A working Android app built with Compose, Room, Navigation, and Coroutines
ShotSort
|-- app
|-- architecture.md
|-- requirement.md
|-- build.gradle.kts
`-- settings.gradle.kts
Inside app/src/main/java/com/example/shotsort:
core/ui/theme: app themedata/local: Room entities, DAO, databasedata/repository: repository and screen-facing modelsdata/resolver: image import, cleanup, and Uri readability checksfeature/home: category navigation home screenfeature/category: category grid screen and drawer navigationfeature/share: share-import flowfeature/detail: full-screen image viewer and category assignmentnavigation: nav graph and routes
- Default category is stored internally as
Uncategorized - The default category label is localized in the UI
- Category names are trimmed
- Category names are unique case-insensitively
- Category names are capped at 20 characters
- Reserved names such as
AllandUncategorizedcannot be used for custom categories - Importing a record copies the image into app-private storage
- Deleting a record deletes the app-managed copy only
- Deleting the original source image does not affect imported records
- One image can belong to multiple categories
- An image stays in
Uncategorizedonly when it has no custom category - Category detail pages show images only in a 4-column grid
- Image metadata and category controls are shown in the full-screen viewer instead of the grid
- Open the repository in Android Studio.
- Let Android Studio sync the Gradle project.
- Run the
appconfiguration on a real Android device.
- No backend
- No cloud sync
- No OCR
- No automatic screenshot recognition beyond normal image import
- Add repository and UI tests for multi-category behavior and detail paging.
- Polish the full-screen transition and zoom animation further.
- Improve the visual style of the category drawer and full-screen overlays.
- Add release signing and a formal release build flow.
- Consider optional search, sort, and batch actions in a later version.