An open API service indexing awesome lists of open source software.

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

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.

![Android](https://img.shields.io/badge/Platform-Android-brightgreen?logo=android)
![Kotlin](https://img.shields.io/badge/Language-Kotlin-purple?logo=kotlin)
![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-blue?logo=jetpackcompose)
![MVI](https://img.shields.io/badge/Architecture-MVI-orange)
![MediaStore](https://img.shields.io/badge/Storage-MediaStore-yellow)
![Unit Tests](https://img.shields.io/badge/Tests-Unit%20Tests-blue)

## ๐Ÿ“ 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! ๐Ÿš€