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: 19 days 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

| Launcher Screen | Album Screen (Grid) | Album Screen (List) | Media List Screen | Media Detail Screen |
|:---------------:|:---------------------------------------------------------------------:|:---------------------------------------------------------------------:|:---------------------------------------------------------------:|:----------------------------------------------------------------------:|
| | | | | |

### ๐ŸŒ™ Dark Mode

| Launcher Screen | Album Screen (Grid) | Album Screen (List) | Media List Screen | Media Detail 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. |

## ๐Ÿš€ 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.

## ๐Ÿ‘จโ€๐Ÿ’ป Author

**Mirza Arslan**

๐Ÿ“ง [email protected]

๐Ÿ”— [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! ๐Ÿš€