Locker is a secure, private media vault application built with Flutter for Android. It provides a safe space to hide and protect your sensitive photos, videos, and documents from prying eyes, with multiple layers of security including biometric authentication, optional AES-256 encryption, and an auto-kill feature that removes the app from the recent apps list when you leave.
- Media Vault: Securely hide images, videos, and documents from your device gallery
- Gallery Import: Import media directly from your device gallery with the option to delete originals
- Camera Integration: Capture photos and videos directly into the vault
- Document Support: Store and view PDFs, Office documents (Word, Excel, PowerPoint), and text files
- Custom Media Picker: Built-in media picker with album browsing and multi-select support
- Custom Document Picker: File browser for selecting documents from device storage
- Media Scanner: Automatic duplicate detection when importing files
- Backup & Restore: Create local backups of your vault and restore when needed
- Compression Options: Choose compression levels for media files to save storage space
- Albums: Create custom albums to organize your hidden files
- Tags: Add color-coded tags to files for easy categorization and filtering
- Favorites: Mark files as favorites for quick access
- Search: Find files by name, tags, type, date, or other criteria
- Sorting: Multiple sorting options including date, name, size, and type
- Image Viewer: Full-screen image viewing with pinch-to-zoom and slideshow mode
- Video Player: Built-in video player with playback controls, speed adjustment, and loop options
- Song Player: Built-in audio playback with external app handoff support
- Document Viewer: Native PDF rendering and Office document conversion for viewing
- File Export: Export files to Downloads folder or open with external applications
- Performance Overlay: Real-time display of FPS and performance metrics
- PIN Authentication: 6-digit PIN lock with secure storage
- Password Authentication: Traditional password protection option
- Biometric Authentication: Fingerprint and face recognition support
- Optional Encryption: AES-256-CBC/CTR encryption for stored files (off by default for performance)
- Auto-Kill: Automatically removes app from recent apps when leaving
- Decoy Mode: Set up a fake vault with a separate PIN to show if forced to unlock
- Secure Delete: Overwrite files before deletion to prevent recovery
- Change Security: Update PIN or password at any time with verification
- Dynamic Accent Colors: Choose from multiple accent colors (Blue, Purple, Pink, Red, Orange, Teal, Green, Gunmetal)
- Custom Theme: Personalize the app's look to match your style
- Performance Mode: Adjust frame rate and performance settings for optimal experience
- Glassmorphism: Modern unlock screen design with visual effects
Locker is part of the Moss ecosystem by Ultra Electronica, a suite of interconnected apps that share infrastructure and capabilities.
- Locker: Secure media vault for hiding photos, videos, and documents
- Flick Player: High-performance audiophile music player with UAC 2.0 support
Locker integrates with Flick Player through platform channels:
- Playback Handoff: Locker can hand off audio playback to Flick for advanced audio engine features (EQ, effects, UAC 2.0 DAC output)
- Shared Infrastructure: Last.fm scrobbling, adaptive theming, and library scanning are shared across Moss apps
When you want to play an audio file stored in Locker using Flick's advanced audio capabilities:
- Select the audio file in Locker
- Choose to open with Flick Player
- Flick handles playback with its high-performance engine
- Last.fm scrobbling continues uninterrupted
| Package | Purpose |
|---|---|
flutter_riverpod |
State management |
flutter_secure_storage |
Secure storage for credentials and metadata |
pointycastle |
AES-256 encryption |
photo_manager |
Media gallery access and import |
pdfrx |
Native PDF rendering |
syncfusion_flutter_pdf |
Office document conversion (Word/Excel/PowerPoint) |
flutter_image_compress |
Image compression |
video_compress |
Video compression |
archive |
ZIP/RAR/7Z archive support |
permission_handler |
Runtime permission management |
local_auth |
Biometric authentication (fingerprint/face) |
camera |
Camera integration for photo/video capture |
just_audio |
Audio playback with external handoff support |
in_app_update |
Google Play In-App Updates |
| Component | Purpose |
|---|---|
MainActivity.kt |
Auto-kill feature, performance settings, content URI handling |
AutoKillService |
Removes app from recent apps when backgrounded |
PermissionHandler |
Android runtime permission management |
locker/
├── lib/ # Flutter/Dart source
│ ├── main.dart # Application entry point
│ ├── models/ # Data models
│ │ ├── album.dart # Album and tag models
│ │ └── vaulted_file.dart # Vaulted file model
│ ├── providers/ # Riverpod state providers
│ │ ├── vault_providers.dart # Vault state management
│ │ ├── theme_provider.dart # Theme management
│ │ └── performance_provider.dart # Performance settings
│ ├── screens/ # UI screens
│ │ ├── unlock_screen.dart # Authentication unlock screen
│ │ ├── home_screen.dart # Main vault home screen
│ │ ├── gallery_vault_screen.dart # Gallery import screen
│ │ ├── media_viewer_screen.dart # Image/video viewer
│ │ ├── document_viewer_screen.dart # PDF/Office document viewer
│ │ ├── song_player_screen.dart # Audio player screen
│ │ └── settings/ # Settings screens
│ │ ├── vault_settings_screen.dart # Vault configuration
│ │ └── performance_settings_screen.dart # Performance tweaks
│ ├── services/ # Business logic services
│ │ ├── auth_service.dart # Authentication handling
│ │ ├── encryption_service.dart # AES-256 encryption/decryption
│ │ ├── vault_service.dart # Core vault operations
│ │ ├── backup_service.dart # Backup and restore
│ │ └── flick_integration_service.dart # Flick Player handoff
│ ├── themes/ # App theming
│ │ ├── app_colors.dart # Accent color definitions
│ │ └── app_theme.dart # Theme configuration
│ └── widgets/ # Reusable widgets
│ ├── pin_input_widget.dart # PIN entry widget
│ └── performance_overlay_widget.dart # FPS overlay
├── android/ # Android platform code
│ └── app/src/main/kotlin/com/ultraelectronica/locker/
│ └── MainActivity.kt # Auto-kill and performance
├── assets/ # Static assets
│ ├── banner_locker.png # App banner
│ └── ...
├── docs/ # Architecture documentation
│ ├── architecture_media.md # Media compression/encryption design
│ └── flick_integration.md # Flick Player integration guide
└── pubspec.yaml # Flutter dependencies
- Flutter SDK 3.4.4 or higher
- Dart SDK (included with Flutter)
- Android SDK with API level 34
- Java Development Kit (JDK) 17
- Android device with Android 6.0 (API 23) or higher
- Download the latest APK from the Releases page
- Enable "Install from unknown sources" in your device settings
- Install the APK
- Launch and set up your authentication method
# Run in debug mode
flutter run
# Run on a specific device
flutter run -d <device-id># Debug build
flutter build apk --debug
# Release build
flutter build apk --release- Clone the repository:
git clone https://github.com/heimin22/Locker.git cd Locker - Install dependencies:
flutter pub get
- Generate launcher icons (optional):
flutter pub run flutter_launcher_icons
- Build using the commands above
Locker is designed exclusively for Android, using Flutter for UI and Kotlin for native features:
- Auto-Kill: Uses Android's activity lifecycle to remove the app from recent tasks when backgrounded
- Biometrics: Leverages Android's BiometricPrompt API for fingerprint/face authentication
- Media Access: Uses
photo_managerto access device gallery media (requires storage permissions) - Camera: Integrates with Android's Camera API for photo/video capture
| Permission | Purpose |
|---|---|
| READ_EXTERNAL_STORAGE | Access files on device (Android 12 and below) |
| WRITE_EXTERNAL_STORAGE | Write files to device (Android 12 and below) |
| READ_MEDIA_IMAGES | Access images (Android 13+) |
| READ_MEDIA_VIDEO | Access videos (Android 13+) |
| MANAGE_EXTERNAL_STORAGE | Full file access for hiding/unhiding (Android 11+) |
| CAMERA | Capture photos and videos |
| RECORD_AUDIO | Record audio with video |
| USE_BIOMETRIC | Biometric authentication |
Locker follows a service-based architecture with clear separation of concerns:
- Services Layer: Business logic for authentication, encryption, file operations, and media handling
- Providers Layer: Riverpod providers for reactive state management across UI components
- Screens: Feature-specific UI screens for authentication, vault management, settings, and media viewing
- Native Backend: Kotlin code for Android-specific features like auto-kill, permissions, and camera access
All sensitive data (PIN, passwords, encryption keys) is stored via flutter_secure_storage in Android's Keystore system.
Additional documentation available:
- Architecture Diagram - Detailed system architecture design covering compression, encryption, and file operations
- Flick Integration Guide - Contract and implementation notes for making Flick a first-class Locker playback companion
This project is licensed under the MIT License - see the LICENSE file for details.
Locker is purely open-source and free. There are no premium features, ads, or paid components.
- @heimin22 (Project creator)
Contributions are welcome. Please ensure all changes pass linting and testing before submitting pull requests.
- Follow the Dart style guide
- Run
flutter analyzebefore submitting - Ensure all existing tests pass
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name
- Make your changes and commit:
git commit -m "Add your feature description" - Push to your fork:
git push origin feature/your-feature-name
- Open a Pull Request
