A lightweight, modern media gallery application for Android built with Jetpack Compose and Material 3.
- 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
- 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
- Quick access to all favorited media
- Dedicated favorites screen
- Batch favorite/unfavorite operations
- Manage deleted media
- Restore or permanently delete items
- Configurable trash can (can be disabled in settings)
- Long-press to enter multi-select mode
- Batch operations:
- Mark as favorite/unfavorite
- Move to trash
- Share multiple items
- Delete permanently
- 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
- Configure album sort defaults
- Enable/disable trash can
- Glide cache configuration:
- Disk cache size
- Cached screen count
- Maximum image size
- Reset settings to defaults
- 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
- 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
- Min SDK: 30 (Android 11)
- Target SDK: 33 (Android 13)
- JDK: 17
- Gradle: 8.0+
- system: Uses system MediaStore API
- compat: Uses compatibility layer for older devices
- Android Studio Hedgehog or later
- JDK 17 or later
- Android SDK (API 30+)
-
Clone the repository:
git clone https://github.com/IacobIonut01/Gallery.git cd Gallery -
Open in Android Studio
-
Sync Gradle files
-
Build and run:
./gradlew assembleDebug
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
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Commit with conventional commits (
git commit -m 'feat: add amazing feature') - Push to your branch (
git push origin feature/amazing-feature) - Open a Pull Request
We use Crowdin for translations. Help us translate the app:
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Built with Jetpack Compose
- Uses Material 3 design system
- Powered by ExoPlayer for video playback
- Image loading with Glide
See CHANGELOG.md for a detailed list of changes.



