Skip to content

wwwc0m/ShotSort

Repository files navigation

ShotSort

ShotSort is a lightweight Android app for organizing screenshots and other shared images into categories.

Core Workflow

  1. Share one or more images to ShotSort from Gallery or another app
  2. Pick an existing category or create a new one
  3. Import the shared images into app-private storage
  4. Save local metadata in Room
  5. Open ShotSort and browse categories from the home navigation screen
  6. Enter a category to view its image grid
  7. Tap an image to open the full-screen viewer, swipe between images, zoom, and manage categories

Current Features

  • Category-first home screen
  • Custom categories shown first, with All and Uncategorized fixed 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 Uncategorized after assigning any custom category
  • Drawer-style category navigation inside category pages
  • About dialog and category management inside the app

Current Status

This repository contains:

  • requirement.md: product and MVP requirements
  • architecture.md: architecture and data flow
  • A working Android app built with Compose, Room, Navigation, and Coroutines

Project Structure

ShotSort
|-- app
|-- architecture.md
|-- requirement.md
|-- build.gradle.kts
`-- settings.gradle.kts

Inside app/src/main/java/com/example/shotsort:

  • core/ui/theme: app theme
  • data/local: Room entities, DAO, database
  • data/repository: repository and screen-facing models
  • data/resolver: image import, cleanup, and Uri readability checks
  • feature/home: category navigation home screen
  • feature/category: category grid screen and drawer navigation
  • feature/share: share-import flow
  • feature/detail: full-screen image viewer and category assignment
  • navigation: nav graph and routes

Implemented Rules

  • 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 All and Uncategorized cannot 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 Uncategorized only 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

How To Open

  1. Open the repository in Android Studio.
  2. Let Android Studio sync the Gradle project.
  3. Run the app configuration on a real Android device.

Current Scope

  • No backend
  • No cloud sync
  • No OCR
  • No automatic screenshot recognition beyond normal image import

Next Recommended Steps

  1. Add repository and UI tests for multi-category behavior and detail paging.
  2. Polish the full-screen transition and zoom animation further.
  3. Improve the visual style of the category drawer and full-screen overlays.
  4. Add release signing and a formal release build flow.
  5. Consider optional search, sort, and batch actions in a later version.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages