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
- Host: GitHub
- URL: https://github.com/arslan555/galleryon
- Owner: arslan555
- Created: 2025-04-25T14:29:05.000Z (25 days ago)
- Default Branch: master
- Last Pushed: 2025-04-28T02:44:27.000Z (22 days ago)
- Last Synced: 2025-04-28T03:29:45.302Z (22 days 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 Taken4. **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
- โ *UseCasesAll 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! ๐