A modern, feature-rich Android application for real-time network speed monitoring and data usage tracking
Features β’ Screenshots β’ Architecture β’ Installation β’ Contributing β’ License
NetSpeed Indicator is a powerful Android application that provides real-time network speed monitoring and comprehensive data usage tracking. Built with modern Android development practices, it offers a beautiful Material Design 3 UI with support for both light and dark themes, dynamic colors, and a seamless user experience.
- π― Real-time Speed Monitoring - Track download and upload speeds with live updates
- π Data Usage Analytics - Monitor daily and monthly data consumption
- π Material Design 3 - Beautiful UI with dynamic theming and dark mode
- ποΈ Clean Architecture - Maintainable, testable, and scalable codebase
- π Battery Optimized - Efficient background service with minimal battery impact
- π Modern Tech Stack - Jetpack Compose, Kotlin Coroutines, Hilt, Room
- Live download and upload speed tracking
- Total speed calculation and display
- Persistent notification with speed information
- Visual speed indicators with animations
- Historical peak speed tracking
- Daily data usage monitoring (WiFi and Mobile separately)
- Monthly usage statistics and trends
- Automatic data categorization (Download/Upload)
- Usage history with detailed breakdowns
- Reset at midnight for accurate daily tracking
- Material Design 3 implementation
- Dynamic color support (Material You)
- Light and dark theme support
- Smooth animations and transitions
- Intuitive navigation and layout
- Custom font family (Outfit)
- Theme customization (Light/Dark/System)
- Dynamic color toggle
- Lock screen notification control
- Upload speed display toggle
- Battery optimization settings
- Auto-start permission management
- Persistent foreground notification
- Real-time speed updates in notification
- Data usage summary
- Signal strength indicator
- Customizable notification visibility
- Reliable foreground service
- Automatic restart after device reboot
- WorkManager health checks
- Crash-resistant implementation
- Graceful error handling
NetSpeed Indicator follows Clean Architecture principles with MVVM pattern, ensuring a maintainable, testable, and scalable codebase.
βββββββββββββββββββββββββββββββββββββββββββ
β Presentation Layer β
β (UI, ViewModels, Navigation) β
β β’ Jetpack Compose β
β β’ Material Design 3 β
β β’ Type-safe Navigation β
ββββββββββββββββ¬βββββββββββββββββββββββββββ
β
ββββββββββββββββΌβββββββββββββββββββββββββββ
β Domain Layer β
β (Business Logic, Use Cases) β
β β’ Pure Kotlin β
β β’ Framework Independent β
β β’ Repository Interfaces β
ββββββββββββββββ¬βββββββββββββββββββββββββββ
β
ββββββββββββββββΌβββββββββββββββββββββββββββ
β Data Layer β
β (Repositories, Data Sources) β
β β’ Room Database β
β β’ DataStore Preferences β
β β’ Android APIs (TrafficStats, etc.) β
βββββββββββββββββββββββββββββββββββββββββββ
app/src/main/java/com/englesoft/netspeedindicator/
βββ presentation/ # UI Layer (MVVM)
β βββ app/ # Application-level components
β βββ screen/ # Feature screens
β β βββ main/
β β β βββ home/ # Dashboard screen
β β β βββ history/ # Usage history
β β β βββ settings/ # App settings
β β βββ onboarding/ # Onboarding flow
β βββ component/ # Reusable UI components
β βββ navigation/ # Navigation setup
β βββ theme/ # UI theming
β
βββ domain/ # Business Logic Layer
β βββ model/ # Domain entities
β βββ repository/ # Repository contracts
β βββ usecase/ # Business operations
β
βββ data/ # Data Layer
β βββ datasource/ # Data sources
β βββ local/ # Local storage (Room)
β βββ mapper/ # Data transformation
β βββ manager/ # State managers
β βββ preferences/ # SharedPreferences
β βββ repository/ # Repository implementations
β
βββ core/ # Cross-cutting concerns
βββ di/ # Dependency Injection
βββ service/ # Android services
βββ receiver/ # Broadcast receivers
βββ util/ # Utilities
- β Separation of Concerns - Each layer has a single responsibility
- β Testability - Easy to unit test each layer independently
- β Maintainability - Changes in one layer don't affect others
- β Scalability - Easy to add new features
- β Independence - UI, database, and frameworks are independent
- Model - Domain entities and business logic
- View - Jetpack Compose UI components
- ViewModel - State management and UI logic
Consistent error handling across all layers:
sealed class Result<out T> {
data class Success<T>(val data: T) : Result<T>()
data class Error(val message: String, val code: Int? = null) : Result<Nothing>()
data object Loading : Result<Nothing>()
}- Language: Kotlin 100%
- UI Framework: Jetpack Compose
- Architecture: Clean Architecture + MVVM
- Dependency Injection: Hilt
- Async Programming: Kotlin Coroutines & Flow
- Compose: Declarative UI framework
- ViewModel: Lifecycle-aware state management
- Room: Local database
- DataStore: Preferences storage
- Navigation: Type-safe navigation
- WorkManager: Background task scheduling
- Material Design 3: Modern design system
- Kotlin Serialization: JSON serialization
- TrafficStats API: Network speed monitoring
- NetworkStatsManager: Detailed usage statistics
- Gradle KTS: Kotlin DSL build scripts
- Version Catalogs: Centralized dependency management
- KSP: Kotlin Symbol Processing
- Min SDK: 28 (Android 9.0)
- Target SDK: 36 (Android 15)
- Android Studio Ladybug or later
- JDK 11 or later
- Android SDK 28 or later
- Gradle 8.0 or later
-
Clone the repository
git clone https://github.com/ronyaburaihan/NetSpeedIndicator.git cd NetSpeedIndicator -
Open in Android Studio
- Open Android Studio
- Select "Open an Existing Project"
- Navigate to the cloned directory
- Wait for Gradle sync to complete
-
Build the project
./gradlew build
-
Run on device/emulator
./gradlew installDebug
The app requires the following permissions:
- INTERNET - Network access
- ACCESS_NETWORK_STATE - Network state monitoring
- ACCESS_WIFI_STATE - WiFi state monitoring
- FOREGROUND_SERVICE - Background monitoring
- POST_NOTIFICATIONS - Notification display (Android 13+)
- PACKAGE_USAGE_STATS - Detailed usage statistics (requires manual grant)
- RECEIVE_BOOT_COMPLETED - Auto-start after reboot
- REQUEST_IGNORE_BATTERY_OPTIMIZATIONS - Reliable background operation
- Grant necessary permissions when prompted
- Enable "Usage Access" permission in settings
- Optionally disable battery optimization for reliable monitoring
- The service starts automatically and begins monitoring
- View real-time download and upload speeds
- Monitor today's total data usage
- See breakdown by WiFi and Mobile data
- Track download and upload separately
- View daily usage for current month
- Switch between current month, last month, and last 3 months
- See detailed breakdown for each day
- Monthly summary with total usage
- Customize app theme (Light/Dark/System)
- Enable/disable dynamic colors
- Control lock screen notification visibility
- Toggle upload speed display
- Manage battery optimization
- Configure auto-start permission
- Tap the power button in the top-right corner
- Confirm to stop monitoring and close the app
- Service stops gracefully and saves all data
- Debug: Development build with logging
- Release: Production build with ProGuard
// In SettingsScreen
viewModel.setAppTheme(theme)
// 0 = System, 1 = Light, 2 = Dark// In SpeedMonitorService.kt
private const val SAVE_INTERVAL_MS = 60_000L // 1 minute
private const val OPERATION_TIMEOUT_MS = 5_000L // 5 seconds// In ServiceHelper.kt
val workRequest = PeriodicWorkRequestBuilder<ServiceRestartWorker>(
15, // Minutes
TimeUnit.MINUTES
).build()./gradlew test./gradlew connectedAndroidTest- Unit tests for ViewModels
- Unit tests for Use Cases
- Unit tests for Repositories
- Integration tests for database operations
- Efficient Data Collection: Minimal CPU usage
- Smart Caching: Reduces database queries
- Lazy Loading: Loads data on demand
- Coroutine Optimization: Non-blocking operations
- Memory Management: No memory leaks
- Minimal Battery Drain: ~1-2% per day
- Optimized Notifications: Updates only when needed
- Smart Scheduling: WorkManager for health checks
- Doze Mode Compatible: Survives battery optimization
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Follow the coding standards
- Use Kotlin coding conventions
- Follow Clean Architecture principles
- Write meaningful commit messages
- Add comments for complex logic
- Write tests
- Add unit tests for new features
- Ensure existing tests pass
- Commit your changes
git commit -m 'Add amazing feature' - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
- Follow Kotlin Coding Conventions
- Use meaningful variable and function names
- Keep functions small and focused
- Add KDoc comments for public APIs
- Maintain Clean Architecture separation
- Use the issue tracker to report bugs
- Provide detailed reproduction steps
- Include device information and Android version
- Attach logs if applicable
Currently, there are no known critical issues. For minor issues and feature requests, please check the Issues page.
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2026@ronyaburaihan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Abu Raihan Rony
- GitHub: @ronyaburaihan
- LinkedIn: Abu Raihan Rony
- Email: ronyaburaihan@gmail.com
If you find this project helpful, please consider:
- β Starring the repository
- π Reporting bugs
- π‘ Suggesting new features
- π Contributing code
- β Buying me a coffee
- Android Team - For excellent Jetpack libraries
- Material Design Team - For beautiful design guidelines
- Kotlin Team - For the amazing programming language
- Open Source Community - For inspiration and support
- Contributors - For making this project better
- π Issue Tracker
- π§ Email: ronyaburaihan@gmail.com
- β Star this repository to get notifications
- π Watch for new releases
- π Follow for updates
Made with β€οΈ using Clean Architecture and Jetpack Compose
If you like this project, please give it a β!


