






Myoozik: Play & Share Music
Comprehensive Android Music Player & Radio Streaming App
Project Overview
Myoozik is a comprehensive Android music player application that provided users with a unified platform for both local music playback and online radio streaming. Built during my second year of BSc Computer Science, the app reached 1000+ active users on the Google Play Store before being suspended due to maintenance challenges during academic commitments and the evolution of the Flutter framework from version 1.0.
The application combined a sleek, customizable interface with powerful audio management capabilities, offering advanced features like metadata editing, playlist management, and multi-language support. Developed as a solo project, Myoozik demonstrated the ability to build production-ready mobile applications with sophisticated features including native Android integration, database design, and real-time audio playback.
Main Purpose: Create a feature-rich music player that unifies local library management, advanced metadata editing, and online radio streaming in a single, beautiful application.
Problem Addressed:
- Fragmented music experience requiring multiple apps for local playback and streaming
- Limited metadata editing capabilities in existing players
- Complex interfaces that prioritized features over user experience
- Lack of multi-language support for African markets
- Poor playlist management in free music players
Status: Suspended (2020) - Transitioned to more serious projects after reaching 1000+ users. The app was built on Flutter 1.0 which had significant breaking changes in later versions, making maintenance difficult during academic studies with no financial incentive.
Technology Stack
Mobile Framework
- Flutter 1.0 - Cross-platform mobile framework (Android deployment)
- Dart
>=2.12.0 <3.0.0- Programming language with null safety - Native Android Integration - Custom platform channels for audio playback
Backend & Data Layer
- SQLite (sqflite ^2.2.0+3) - Local database for music metadata, playlists, favorites, play history
- Shared Preferences (shared_preferences ^2.0.15) - User settings and app state persistence
- Path Provider (path_provider ^2.0.11) - File system access for local storage
Architecture & State Management
- BLoC Pattern - Custom implementation with 7 dedicated blocs:
songBloc- Songs managementalbumBloc- Albums organizationartistBloc- Artists browsinggenreBloc- Genre filteringplaylistBloc- Playlist managementradioBloc- Radio streamingsingleArtistBloc- Artist detail views
Native Audio Integration
- Flutter Method Channel - Custom platform channel (
com.mawiraike.myoozik.app) - Native Android Service (
AppPlayer) - Background audio playback - Media Session API - Lockscreen controls and hardware button integration
- Foreground Service - Persistent music playback
Key Libraries
Audio & Media:
- Custom native Android service for background playback
- Media button receiver integration
- Lockscreen controls
UI/UX:
cached_network_image(^3.2.2) - Optimized image loading and cachingflutter_typeahead(^4.1.1) - Search autocompleteflutter_time_picker_spinner(^2.0.0) - Music timer/sleep timer
Internationalization:
flutter_localizations- Multi-language supportintl(^0.17.0) - Internationalization and formatting- Supported languages: English, French, German
Additional Features:
share_plus(^6.3.0) - Music sharingurl_launcher(^6.1.6) - External link handlinglaunch_review(^3.0.1) - In-app review promptsimage_downloader(^0.31.0) - Album artwork downloadingpermission_handler(^10.2.0) - Runtime permissionshtml(^0.15.1) - HTML parsing for radio datapackage_info(^2.0.2) - App version information
Design System
- Custom Fonts:
- PT Sans (Regular, Bold)
- Product Sans (Regular, Bold, Italic, Bold Italic)
- Google Sans (Regular)
- Material Design with custom dark theme
- Glassmorphism effects with backdrop filters
- Dynamic Color Extraction from album artwork for adaptive theming
Build Configuration
- Flutter SDK
>=2.12.0 <3.0.0with null safety - Version: 4.0.0+12000 (build 12000)
- Android SDK with native Kotlin/Java integration
- Package Name: com.mawiraike.myoozik
Key Features
1. Local Music Library Management
Automatic Music Indexing:
- Automatic scanning and indexing of device music files
- Metadata extraction (title, artist, album, genre, year, track number)
- Recently played tracks with play count tracking
- Favorite/liked songs management
- Album artwork extraction and caching
Advanced Organization:
- Browse by albums with album artwork
- Browse by artists with dedicated artist pages
- Filter by music genre with genre-specific views
- All songs list with multiple sorting options
- Recently played history with frequency tracking
2. Music Playback Engine
Native Audio Integration:
- Custom platform channel bridge to native Android media player
- Background playback with foreground service
- Lockscreen media controls integration
- Hardware button support (headphone controls)
- System media session API integration
Playback Features:
- Play/pause, next/previous track controls
- Seek/scrub functionality with position tracking
- Repeat modes: single track, all tracks, shuffle
- Playback queue management
- Dynamic album artwork color extraction for adaptive UI theming
- Gapless playback for continuous listening
3. Online Radio Streaming
Radio Features:
- Stream online radio stations
- Radio genre categorization and filtering
- Radio station search with autocomplete
- Radio history tracking
- Scheduled radio playback with notifications
- Radio metadata display (station info, current playing)
Radio Organization:
- Genre-based browsing
- Favorite radio stations
- Recently played radio history
- Search functionality for finding stations
4. Advanced Metadata Editing
In-App ID3 Tag Editor:
- Edit title, artist, album, genre, year
- Track number and CD number editing
- Persistent edited metadata storage in SQLite
- Batch tag editing capabilities for multiple files
- Cover art editing and replacement
Smart Metadata Management:
- Automatic metadata detection and extraction
- Conflict resolution for duplicate metadata
- Metadata persistence across app restarts
- Non-destructive editing (original files preserved)
5. Playlist Management
Custom Playlists:
- Create user-defined playlists
- Add/remove songs from playlists
- Edit playlist details and tags
- Playlist tag editing system
- Return playlist functionality for context-based music selection
- Playlist artwork management
Smart Organization:
- Multiple playlist support
- Drag-and-drop reordering
- Quick add to playlist from any view
- Playlist duplication and merging
6. Playback Queue Management
Queue Features:
- View current playback queue
- Reorder queue items with drag-and-drop
- Clear queue functionality
- Add songs to queue from any view
- Queue persistence across app restarts
- Visual queue position indicator
7. Search & Discovery
Global Search:
- Search across songs, albums, artists, genres
- Type-ahead suggestions with autocomplete
- Filtered search results by category
- Recent searches history
- Search result previews
Smart Suggestions:
- Recently played suggestions
- Favorite songs quick access
- Genre-based recommendations
- Artist-based discovery
8. Settings & Customization
Look & Feel Settings:
- Theme customization (Light/Dark modes)
- Background selection and customization
- Color scheme preferences
- UI density options
Music Playback Settings:
- Audio preferences and equalizer access
- Playback behavior customization
- Gapless playback toggle
- Crossfade settings
Radio Settings:
- Radio-specific configurations
- Streaming quality preferences
- Notification preferences
Language Selection:
- English, French, German support
- Automatic language detection
- In-app language switcher
Additional Settings:
- Full-screen mode toggle
- Permission management
- Storage preferences
- Cache management
9. Music Timer / Sleep Timer
Timer Features:
- Set timer to stop playback after specified duration
- Time picker spinner interface
- Notification when timer is active
- Cancel timer functionality
- Timer presets for common durations
10. Social Features
Sharing:
- Share music tracks with other apps
- Share playlists
- Share currently playing song
Community:
- In-app review prompts
- Bug reporting via email
- About app information
- Version tracking and update notifications
11. Additional Features
System Integration:
- System equalizer integration
- Media controls in notification shade
- Widget support (planned)
- Audio focus management
Performance:
- Album artwork caching and downloading
- Efficient memory management
- Background resource optimization
- Low battery mode optimization
User Experience:
- Empty state handling across all views
- Loading states and progress indicators
- Error handling with user-friendly messages
- Smooth animations and transitions
- Haptic feedback on key actions
Project Structure
myoozik/
├── android/ # Android native code
│ ├── app/
│ │ └── src/main/
│ │ ├── kotlin/ # Native audio player service (AppPlayer)
│ │ ├── res/ # App icons, drawables, notification icons
│ │ │ ├── mipmap-*/ # App icons (multiple densities)
│ │ │ └── drawable/ # Notification icons
│ │ └── AndroidManifest.xml
│
├── ios/ # iOS configuration (cross-platform ready)
├── web/ # Web platform assets
│
├── lib/ # Main Flutter/Dart codebase
│ ├── blocs/ # BLoC state management (7 blocs)
│ │ ├── albumBloc.dart
│ │ ├── artistBloc.dart
│ │ ├── genreBloc.dart
│ │ ├── playlistBloc.dart
│ │ ├── radioBloc.dart
│ │ ├── singleArtistBloc.dart
│ │ └── songBloc.dart
│ │
│ ├── functions/ # Core business logic
│ │ ├── eight08/ # Database and data models
│ │ │ ├── audioTrack.dart
│ │ │ └── databaseClient.dart
│ │ ├── play.dart # Playback management
│ │ └── utilities.dart
│ │
│ ├── platform/ # Platform channel integration
│ │ └── appChannel.dart # Bridge to native Android audio
│ │
│ ├── services/ # App services
│ │ ├── connectionStatusSingleton.dart
│ │ ├── keys.dart
│ │ ├── menu.dart
│ │ ├── networkSong.dart
│ │ └── theme.dart
│ │
│ ├── shared/ # Reusable UI components
│ │ ├── animations.dart
│ │ ├── appBuilder.dart
│ │ ├── background.dart
│ │ ├── bottomAppBar.dart
│ │ ├── buttons.dart
│ │ ├── customAppBar.dart
│ │ ├── dialogs.dart
│ │ ├── gridTile.dart
│ │ ├── simpleTile.dart
│ │ ├── translations.dart
│ │ └── [other shared widgets]
│ │
│ ├── views/ # Screen components (25 views)
│ │ ├── homePage.dart
│ │ ├── player.dart
│ │ ├── albums.dart / album.dart
│ │ ├── artists.dart / artist.dart
│ │ ├── genres.dart / genre.dart
│ │ ├── playlists.dart / playlist.dart / userPlaylist.dart
│ │ ├── tracks.dart
│ │ ├── radio.dart
│ │ ├── queue.dart
│ │ ├── search.dart
│ │ ├── settings.dart
│ │ ├── lookAndFeelSettings.dart
│ │ ├── musicPlayBackSettings.dart
│ │ ├── radioSettings.dart
│ │ ├── musicTimer.dart
│ │ ├── singleTagEdit.dart
│ │ ├── playlistTagsEdit.dart
│ │ ├── aboutApp.dart
│ │ └── [other views]
│ │
│ └── main.dart # App entry point
│
├── assets/
│ └── images/
│ ├── logo.png # App logo
│ └── artwork_default.png # Default album artwork
│
├── locale/ # Internationalization files
│ ├── i18n_en.json # English
│ ├── i18n_fr.json # French
│ └── i18n_de.json # German
│
├── fonts/ # Custom font files
└── pubspec.yaml # Project dependenciesKey Directories Explained
lib/blocs/: State management using BLoC pattern, each bloc manages a specific domainlib/functions/eight08/: Core data layer with SQLite database client and AudioTrack modellib/platform/: Platform-specific integrations via method channelslib/services/: App-wide services (theming, network status, menu configurations)lib/shared/: Reusable UI components and widgetslib/views/: 25 screen components representing different app pagesandroid/app/src/main/kotlin/: Native Android code for background audio service
Technical Implementation Highlights
Custom Platform Channel Architecture
Engineered a sophisticated bridge between Flutter and native Android using Method Channels, enabling seamless communication between Dart and Kotlin/Java code:
Channel Implementation:
- Custom platform channel identifier:
com.mawiraike.myoozik.app - Bi-directional communication for play/pause/skip/seek commands
- Callback system for playback state updates
- Native audio session management for system integration
Native Audio Service:
- Custom
AppPlayerservice in Kotlin for background playback - Foreground service ensuring playback persists during navigation
- Media session integration for lockscreen controls
- Hardware button event handling (headphone controls)
- Audio focus management for proper interaction with other apps
Database Architecture
Designed a comprehensive SQLite database schema managing multiple interconnected tables:
Database Tables:
- Songs Library: Complete music metadata with file paths
- Favorite Tracks: User favorites with timestamps
- Recently Played: Play history with play count tracking
- User Playlists: Custom playlist definitions
- Playlist Tracks: Many-to-many relationship between playlists and songs
- Edited Metadata: Persistent storage for user-edited ID3 tags
- Radio History: Radio station play history
- Radio Favorites: Saved radio stations
Performance Optimizations:
- Indexed columns for fast queries (artist, album, genre)
- Efficient JOIN operations for playlist retrieval
- Cached queries for frequently accessed data
- Background database operations preventing UI blocking
BLoC State Management Architecture
Implemented the BLoC (Business Logic Component) pattern with 7 specialized blocs providing reactive state management:
Architecture Benefits:
- Clear separation between business logic and UI
- Reactive streams for automatic UI updates
- Centralized state management preventing prop drilling
- Testable business logic independent of Flutter widgets
Bloc Responsibilities:
songBloc: Song data fetching, filtering, and statealbumBloc: Album organization and artwork managementplaylistBloc: Playlist CRUD operations and track managementradioBloc: Radio streaming state and station management- Each bloc uses
ValueNotifiersfor reactive state updates
Multi-Language Internationalization System
Built a comprehensive internationalization system supporting English, French, and German:
Implementation:
- JSON-based translation files (
i18n_*.json) flutter_localizationsintegration for date/number formatting- Browser language detection for automatic language selection
- In-app language switcher with persistent user preference
- Context-aware translations with plural support
- RTL (Right-to-Left) layout ready for future Arabic support
Translation Coverage:
- UI labels, buttons, and navigation elements
- Error messages and user notifications
- Settings screens and help text
- Metadata field labels
Dynamic UI Theming System
Developed an advanced theming system with dynamic color extraction:
Color Extraction:
- Album artwork analysis to extract dominant colors
- Dynamic theme generation based on currently playing song
- Smooth color transitions between tracks
- Glassmorphism effects with backdrop blur
- Custom Material Design implementation
Theme Features:
- Light and dark mode support
- User-customizable color schemes
- Background selection options
- UI density preferences
- Consistent design language across 25+ screens
My Role & Contributions
As the sole developer of Myoozik during my second year of BSc Computer Science, I was responsible for every aspect of the application:
1. Architecture & System Design
- Designed and implemented BLoC architecture pattern for state management
- Created custom platform channel bridge between Flutter and native Android
- Designed SQLite database schema for music metadata, playlists, and history
- Implemented modular component structure with reusable widgets
2. Native Android Development
- Built custom native Android service (
AppPlayer) for background audio - Implemented foreground service for persistent music playback
- Integrated Media Session API for lockscreen controls
- Created method channel communication protocol
3. Core Feature Implementation
Audio Playback Engine:
- Comprehensive playback system with play/pause/seek/skip
- Playlist queue management with shuffle and repeat modes
- Position tracking and duration monitoring with real-time UI updates
- Dynamic color extraction from album artwork
Data Management:
- SQLite database with multiple tables (songs, favorites, playlists, radio history)
- Database synchronization for device music library changes
- Metadata persistence and retrieval systems
- Efficient caching strategies
Music Organization:
- Browsing interfaces for albums, artists, genres, playlists
- Search functionality with autocomplete
- ID3 tag/metadata editor for in-app editing
- Album artwork caching system
Online Radio Integration:
- Radio streaming capabilities
- Radio station categorization and search
- Radio history and favorites system
- Scheduled playback with notifications
4. UI/UX Development
- Designed and implemented 25+ screen components
- Custom animations and transitions
- Material Design with custom dark theme
- Responsive layouts and adaptive components
- Custom app bar, bottom navigation, floating action buttons
- Glassmorphism effects with backdrop filters
5. State Management
- Reactive state management using ValueNotifiers
- BLoC pattern across 7 different domain blocs
- Event-driven communication between components
- App lifecycle state management and persistence
6. Internationalization
- Multi-language support (English, French, German)
- Translation system with locale switching
- Locale-specific formatting for dates and numbers
7. Permissions & System Integration
- Runtime permissions handling for storage access
- System equalizer integration
- Share functionality for music files
- App settings and preferences management
8. Quality & User Experience
- Empty state handling across all views
- Error handling and exception management
- Loading states and progress indicators
- In-app review prompts and bug reporting
9. Performance Optimization
- Image caching for album artwork
- Efficient database queries with proper indexing
- Optimized list rendering with builder patterns
- Memory management with proper resource disposal
10. Deployment & Maintenance
- Google Play Store deployment and app listing
- Version management and update releases
- User feedback integration and bug fixes
- App analytics and crash reporting
Skills Demonstrated
Mobile Development
- Flutter Framework: Building production-ready cross-platform apps
- Dart Language: Advanced Dart programming with null safety
- Native Integration: Custom platform channels bridging Flutter and Android
- Android Development: Native Kotlin/Java for audio service implementation
System Architecture
- BLoC Pattern: Advanced state management architecture
- Database Design: SQLite schema design and optimization
- Service Architecture: Background services and foreground tasks
- Component Architecture: Modular, reusable component design
Advanced Features
- Platform Channels: Bi-directional communication between Flutter and native code
- Background Services: Foreground services for persistent audio playback
- Media Integration: System media controls and hardware button integration
- Internationalization: Multi-language support with locale management
UI/UX Design
- Material Design: Custom Material Design implementation
- Dynamic Theming: Color extraction and adaptive theming
- Animations: Smooth transitions and micro-interactions
- Responsive Design: Adaptive layouts for various screen sizes
Data Management
- SQLite: Complex database operations and optimization
- State Persistence: Shared preferences and state management
- Caching: Image caching and data caching strategies
- File System: Local storage and file management
Production Deployment
- Google Play Store: App publishing and distribution
- User Acquisition: Reached 1000+ active users organically
- App Maintenance: Version management and user support
- Analytics: User behavior tracking and crash reporting
Historical Significance
First Serious Project
Myoozik was my first serious software project, marking the beginning of my journey as a software developer. The project provided foundational experience in:
- Full-stack mobile development (Flutter + Native Android)
- Production deployment and user management
- Architecture design for maintainable codebases
- Real-world problem-solving and debugging
- User feedback integration and iteration
1000+ Users Achievement
Reaching 1000+ organic users on the Google Play Store as a second-year computer science student validated:
- Product value proposition and user need
- Technical execution and stability
- UI/UX design decisions
- Marketing and app store optimization (ASO)
Learning Foundation
The lessons learned from Myoozik directly influenced my later projects:
- Importance of choosing stable, well-supported frameworks
- Technical debt management and maintenance planning
- Balancing feature development with code quality
- Understanding user needs versus technical preferences
- Deployment strategies and versioning
Why Suspended
The project was suspended in 2020 for several key reasons:
Technical Challenges
- Flutter Framework Evolution: Built on Flutter 1.0, which had significant breaking changes in later versions (especially around dynamic classes)
- Migration Complexity: Updating to Flutter 2.0+ would have required substantial refactoring
- Maintenance Burden: Difficult to maintain during academic commitments
Strategic Decisions
- No Financial Incentive: Free app with no monetization strategy
- Academic Priorities: Focus on computer science curriculum and learning
- Skill Evolution: Transitioned to more advanced projects and modern frameworks
- Better Opportunities: Moved to serious commercial projects with real business value
Lessons Learned
The suspension taught valuable lessons about:
- Framework selection and long-term maintainability
- Importance of sustainable development practices
- Balancing passion projects with academic/career priorities
- When to sunset projects versus continuous maintenance
Key Takeaways
Myoozik represents a significant milestone in my development journey, demonstrating early proficiency in production mobile app development while providing critical lessons for future projects:
Technical Achievements
- Successfully integrated Flutter with native Android for complex audio features
- Implemented sophisticated state management using BLoC pattern
- Built comprehensive database architecture for music management
- Reached 1000+ users with stable, production-ready application
Product Learnings
- User acquisition and retention strategies
- Importance of feature prioritization
- Balancing complexity with maintainability
- Framework selection for long-term viability
Professional Growth
- Solo Development: Managed entire development lifecycle independently
- Production Deployment: Real-world app distribution and user support
- Technical Decision-Making: Architecture and technology choices
- Quality Focus: Maintained code quality despite aggressive feature development
Myoozik was instrumental in establishing my foundation as a software developer, providing invaluable experience with mobile development, native integration, database design, and production deployment. While suspended due to academic priorities and framework evolution, the project successfully validated my ability to build production-ready applications that serve real users at scale.