https://github.com/arslan555/galleryon
GalleryOn is a modern Android gallery application built using Kotlin, Jetpack Compose, and a clean MVVM architecture. It offers a fast, beautiful, and customizable way to explore your device's images and videos, supporting both light and dark modes, multiple view layouts (Grid/List) & media details
https://github.com/arslan555/galleryon
android android-gallery clean-architecture-android coroutines-flow dark-mode-theme jetpack-compose jetpack-compose-navigation kotlin material3 mediastore mvi-architecture unit-testing
Last synced: about 1 month ago
JSON representation
GalleryOn is a modern Android gallery application built using Kotlin, Jetpack Compose, and a clean MVVM architecture. It offers a fast, beautiful, and customizable way to explore your device's images and videos, supporting both light and dark modes, multiple view layouts (Grid/List) & media details
- Host: GitHub
- URL: https://github.com/arslan555/galleryon
- Owner: arslan555
- Created: 2025-04-25T14:29:05.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-04-28T02:44:27.000Z (about 1 year ago)
- Last Synced: 2025-04-28T03:29:45.302Z (about 1 year ago)
- Topics: android, android-gallery, clean-architecture-android, coroutines-flow, dark-mode-theme, jetpack-compose, jetpack-compose-navigation, kotlin, material3, mediastore, mvi-architecture, unit-testing
- Language: Kotlin
- Homepage:
- Size: 24.8 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# โก GalleryOn App
GalleryOn is a native Android application built in **Kotlin**, designed to showcase a clean, scalable, and modern approach to building a media gallery. The app uses best practices like modular clean architecture, Jetpack Compose for UI, and robust testing strategies.






## ๐ App Overview
1. **Albums View**
* Displays albums grouped by folders.
* Supports switching between **Grid View** and **List View**.
* Each album shows preview and media count.
2. **Media Listing**
* After selecting an album, displays media items (images/videos) within it.
* Supports basic viewing of media metadata like name, size, and date.
3. **Media Details**
* Displays basic metadata of media items:
* ๐ผ๏ธ Media
* ๐ Name
* ๐ Size
* ๐๏ธ Date Taken
4. **Permission Handling**
* Requests appropriate storage permissions at runtime based on Android version.
## ๐ธ Screenshots
### โ๏ธ Light Mode
| Album Screen (Grid) | Album Screen (List) | Media List Screen | Media Detail Screen | Cleanup Duplicate Screen | Cleanup Large-Media Screen | Cleanup Old-Media Screen |
|:---------------------------------------------------------------------:|:---------------------------------------------------------------------:|:---------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|
|
|
|
|
|
|
|
|
### ๐ Dark Mode
| Album Screen (Grid) | Album Screen (List) | Media List Screen | Media Detail Screen | Cleanup Duplicate Screen | Cleanup Large-Media Screen | Cleanup Old-Media Screen |
|:-----------------------------------------------------------------------:|:-----------------------------------------------------------------------:|:-----------------------------------------------------------------:|:------------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|:----------------------------------------------------------------------:|
|
|
|
|
|
|
|
|
## ๐ง Architecture
๐งฑ **Clean MVI + Modularized Architecture**
Maintains strict separation of concerns between layers.
### ๐ Module Structure
| Module | Description |
|-------------------------|----------------------------------------------------------|
| `app/` | Application entry point and DI setup. |
| `core/` | Common utilities like permissions management. |
| `domain/` | Business models and use cases (pure Kotlin). |
| `data/` | Repository implementations, media management. |
| `feature/albums/` | Albums screen, view models, UI components. |
| `feature/media/` | Media listing screen, view models, UI components. |
| `feature/smart-cleaner/`| Identify large files, duplicates, and low-quality media for cleanup. |
## ๐ Libraries & Tech Stack
### ๐งฐ Core Technologies
- **Kotlin** โ Modern Android language.
- **Jetpack Compose** โ Declarative UI toolkit.
- **Coroutines & Flow** โ Async & reactive data streams.
- **Navigation (Compose)** โ Type-safe screen navigation.
- **Hilt** โ Dependency Injection framework.
### ๐งช Testing Libraries
- **JUnit4** โ Unit testing framework.
- **MockK** โ Mocks/stubs for testing.
- **Turbine** โ Test Kotlin Flow emissions.
## ๐งช Testing Strategy
### ๐งท Unit Tests
- โ
*ViewModel
- โ
*Repository
- โ
*UseCases
All tests utilize `MockK`, `Turbine`, and `Compose Test APIs`.
```bash
./gradlew clean test
```
## ๐ก Thought Process
* Adopted a **Clean MVI** architecture to ensure clear separation of concerns and scalable code structure.
* Used **Jetpack Compose** for modern, declarative, and efficient UI development.
* Applied **Dagger-Hilt** for lightweight and easy-to-manage dependency injection.
* Focused heavily on **testability**, **modularization**, and **best Kotlin practices** for long-term maintainability.
# ๐ GalleryOn โ Phase 2 Feature Backlog
| Priority | Feature | Module | Description | Status | Target Milestone |
|----------|-----------------------------|---------------------|-----------------------------------------------------------------------------|---------|------------------|
| โญ High | Smart Cleaner | `feature-cleaner` | Identify large files, duplicates, and low-quality media for cleanup. | โ
Done | v2.0.0 |
| โญ High | Album Management | `feature-albums` | Create albums. | โ
Done | v2.0.0 |
| โญ High | Search Functionality | `feature-search` | Global search by name, date, tags, or file type. | ๐ Todo | v2.1.0 |
| โญ High | Tagging System | `feature-tagging` | Let users assign tags and filter media accordingly. | ๐ Todo | v2.1.0 |
| โญ High | Vault Mode (Private Albums) | `feature-vault` | Add biometric-secured private albums. | ๐ Todo | v2.2.0 |
| โญ High | Cloud Backup Integration | `feature-cloud` | Optional Google Drive/Dropbox backup for media. | ๐งช Idea | v2.3.0 |
| โญ Medium| Sort & Filter Controls | `feature-media` | Filter media by size, type, date; sort by date, name, or size. | ๐ Todo | v2.3.0 |
| โญ Medium| AI Categorization | `feature-ai` | Use ML Kit to categorize photos (e.g., people, travel, food). | ๐งช Idea | v2.4.0 |
| โญ Medium| Media Editor Options | `feature-edit` | Crop, rotate, compress, or trim media within app. | ๐งช Idea | v2.5.0 |
| โญ Medium| Crash Reporting | `core-analytics` | Firebase Crashlytics integration for error monitoring. | ๐ Todo | v2.0.0 |
| โญ Low | Favorites View | `feature-favorites` | Mark favorite media and access them quickly. | ๐ Todo | v2.2.0 |
| โญ Low | Custom Themes | `feature-theme` | Offer user-selectable themes (light/dark/custom accent colors). | ๐ Todo | v2.6.0 |
| โญ Low | Sharing Suggestions | `feature-share` | Show nearby friends/devices to share media easily. | ๐งช Idea | v2.6.0 |
## ๐จโ๐ป Author
**Mirza Arslan**
๐ง mirzaarslan450@gmail.com
๐ [LinkedIn](https://www.linkedin.com/in/mirza-arslan/)
## ๐งญ Final Thoughts
**GalleryOn** showcases a modern Android media application built with a focus on clean architecture, performance, and best development practices.
The project emphasizes modularity, test coverage, scalability, and a smooth user experience.
Feel free to explore it, and suggestions for improvements are always welcome! ๐