Skip to content

BSkaiTech/Gallery-App

Repository files navigation

Gallery for Android

CI Crowdin IzzyOnDroid

A lightweight, modern media gallery application for Android built with Jetpack Compose and Material 3.

Features

πŸ“Έ Timeline Screen

  • View all photos and videos in a chronological timeline
  • Date-based grouping with sticky headers
  • Monthly header grouping for better navigation
  • Available from main screen and within albums

πŸ—‚οΈ Album Management

  • Browse all device albums
  • Pin favorite albums to the top
  • Sort albums by:
    • Date (Recent/Oldest)
    • Name (A-Z/Z-A)
  • View media within each album

⭐ Favorites

  • Quick access to all favorited media
  • Dedicated favorites screen
  • Batch favorite/unfavorite operations

πŸ—‘οΈ Trash/Recycle Bin

  • Manage deleted media
  • Restore or permanently delete items
  • Configurable trash can (can be disabled in settings)

✨ Multi-Select & Batch Operations

  • Long-press to enter multi-select mode
  • Batch operations:
    • Mark as favorite/unfavorite
    • Move to trash
    • Share multiple items
    • Delete permanently

πŸ–ΌοΈ Media Viewer

  • Swipe through media with HorizontalPager
  • Pinch-to-zoom and pan for images
  • Integrated video player:
    • Powered by ExoPlayer
    • Playback controls
    • Progress bar and seek
    • Play/pause toggle
  • Tap to toggle UI visibility
  • EXIF metadata display
  • Location map integration

βš™οΈ Settings

  • Configure album sort defaults
  • Enable/disable trash can
  • Glide cache configuration:
    • Disk cache size
    • Cached screen count
    • Maximum image size
  • Reset settings to defaults

Screenshots

Main Screen

Recycle Bin and Favorites

Media View and Multi Selection

Technical Details

Architecture

  • Clean Architecture with MVVM pattern
  • Domain Layer: Use cases, domain models, repository interfaces
  • Data Layer: Repository implementations, data sources, Room database
  • Presentation Layer: Jetpack Compose UI, ViewModels

Tech Stack

  • Language: Kotlin
  • UI Framework: Jetpack Compose
  • Design System: Material 3
  • Dependency Injection: Dagger Hilt
  • Database: Room (for pinned albums)
  • Image Loading: Glide with caching
  • Video Playback: Media3 ExoPlayer
  • Navigation: Accompanist Navigation Animation
  • Security: EncryptedSharedPreferences

Build Requirements

  • Min SDK: 30 (Android 11)
  • Target SDK: 33 (Android 13)
  • JDK: 17
  • Gradle: 8.0+

Build Variants

  • system: Uses system MediaStore API
  • compat: Uses compatibility layer for older devices

Getting Started

Prerequisites

  • Android Studio Hedgehog or later
  • JDK 17 or later
  • Android SDK (API 30+)

Installation

  1. Clone the repository:

    git clone https://github.com/IacobIonut01/Gallery.git
    cd Gallery
  2. Open in Android Studio

  3. Sync Gradle files

  4. Build and run:

    ./gradlew assembleDebug

Project Structure

app/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ common/          # Shared code for all variants
β”‚   β”‚   └── java/com/dot/gallery/
β”‚   β”‚       β”œβ”€β”€ core/                    # Core utilities and constants
β”‚   β”‚       β”œβ”€β”€ feature_node/            # Media feature module
β”‚   β”‚       β”‚   β”œβ”€β”€ data/                # Data layer
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ data_source/    # MediaStore queries, Room DAOs
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ repository/     # Repository implementations
β”‚   β”‚       β”‚   β”‚   └── data_types/      # Data transfer objects
β”‚   β”‚       β”‚   β”œβ”€β”€ domain/              # Domain layer
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ model/          # Domain models (Media, Album)
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ repository/     # Repository interfaces
β”‚   β”‚       β”‚   β”‚   └── use_case/        # Business logic use cases
β”‚   β”‚       β”‚   └── presentation/        # Presentation layer
β”‚   β”‚       β”‚       β”œβ”€β”€ albums/          # Albums screen
β”‚   β”‚       β”‚       β”œβ”€β”€ library/         # Favorites & Trash screens
β”‚   β”‚       β”‚       β”œβ”€β”€ mediaview/       # Media viewer screen
β”‚   β”‚       β”‚       β”œβ”€β”€ settings/        # Settings screen
β”‚   β”‚       β”‚       └── timeline/        # Timeline screen
β”‚   β”‚       β”œβ”€β”€ injection/               # Dependency injection modules
β”‚   β”‚       └── ui/                      # UI theme and components
β”‚   β”œβ”€β”€ system/          # System variant specific code
β”‚   └── compat/         # Compat variant specific code

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

Development Workflow

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Commit with conventional commits (git commit -m 'feat: add amazing feature')
  5. Push to your branch (git push origin feature/amazing-feature)
  6. Open a Pull Request

Translation

We use Crowdin for translations. Help us translate the app:

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Support the Project

Acknowledgments

Changelog

See CHANGELOG.md for a detailed list of changes.

About

Android Gallery App

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages