Next-Generation Privacy Indicator for Android
Empowering users with real-time transparency. Know exactly when your device's most sensitive hardware is being accessed, right when it happens.
Features β’ Screenshots β’ Architecture β’ Installation
While modern operating systems (like Android 12+) have started including basic privacy indicators, millions of older devices are left completely unprotected and blind to background spying.
PrivaDoT solves this by bridging the gap:
- Universal Protection: Brings modern iOS 14+ / Android 12+ style privacy indicators to all Android devices (down to Android 7.0), ensuring everyone has the right to privacy, regardless of their phone model.
- Beyond the Basics: Even on newer devices, native indicators lack historical tracking and customization. PrivaDoT provides an aggressive, always-on, zero-telemetry solution with an immutable audit log, giving you absolute control over your privacy.
Important
PrivaDoT is a 100% Offline Application. The internet permission (android.permission.INTERNET) is strictly omitted. It is physically impossible for this app to transmit your data anywhere.
- π¦ Offline Sandbox: All access history logs are stored securely via encrypted local SQLite (
Room). - π Zero Telemetry: No crashlytics, no analytics, no third-party tracking SDKs.
- π Open Source: Every single line of code is completely auditable by the community.
By using PrivaDoT, you agree to the following terms and our unwavering privacy guarantees:
PrivaDoT does NOT collect, transmit, upload, or share any personal data, device identifiers, location data, or usage statistics. The application operates entirely offline and is physically restricted from accessing the internet (the android.permission.INTERNET permission is completely omitted from the AndroidManifest).
All hardware access logs (camera, microphone, location history) are stored exclusively within a private local SQLite database (Room) on your physical device. This data never leaves your phone and can be completely wiped at your command.
This software is provided under the MIT License as a 100% open-source project. You are encouraged to audit the source code to verify our zero-telemetry claims. There are no hidden third-party tracking SDKs, no crash analytics, and no backdoors.
PrivaDoT is designed to enhance your awareness of background hardware usage. However, it is provided "AS IS" without warranties of any kind. InvisusNova and the contributors are not liable for any bypassed detections (e.g., highly sophisticated malware or OEM-level rootkits) or any damages arising from the use of this software.
- Real-Time Indicators: Instant visual feedback when hardware is active.
- π’
Camera- Active capture detection - π
Microphone- Audio recording detection - π΅
Location- GPS / Network location polling
- π’
- Hardware-Level Call Detection: Employs advanced
AudioManagerevent-driven polling to instantly detect microphone usage even during native cellular phone calls, bypassing OEM dialer stealth techniques. - Immutable Audit Log: Detailed history of which app accessed what, down to the exact millisecond.
- Dynamic Positioning: Freely move indicators via X/Y axis sliders to prevent UI overlap.
- Auto-Boot Protection (
BootReceiver): Automatically starts background protection the moment you restart your phone. - Anti-Kill Engine (
KeepAliveService): Aggressively fights OEM battery optimizations to ensure the service is never silently killed in the background.
graph TD
A[Third-Party App] -->|Requests Hardware| B(Android OS)
B -->|Grants Access| C{Hardware Sensors}
B -->|Fires Accessibility Event| D[PrivaDoTService]
D -->|Renders Overlay| E((Indicator Dot))
D -->|Writes to DB| F[(Room Database)]
G[PrivaDoT UI] -->|Reads| F
G -->|Updates| H[DataStore Prefs]
H -->|Modifies State| D
app/src/main/java/com/invisusnova/privadot/
βββ data/ # Local Storage Layer
β βββ AppDatabase.kt # Room Database Configuration
β βββ HistoryDao.kt # Data Access Object for logs
β βββ HistoryEntity.kt # SQLite Table schema for access events
β βββ SettingsManager.kt # Jetpack DataStore for user preferences
βββ service/ # Core Background Engine
β βββ BootReceiver.kt # Auto-starts protection on device reboot
β βββ KeepAliveService.kt # Foreground service to prevent OS battery kills
β βββ OverlayManager.kt # SYSTEM_ALERT_WINDOW logic for drawing dots
β βββ PrivaDoTService.kt # Core AccessibilityService implementation
β βββ SensorUsageDetector.kt # Algorithms to detect Camera/Mic/Location
βββ theme/ # Jetpack Compose Material 3 UI Tokens
βββ MainActivity.kt # Primary Dashboard & Navigation Host
βββ HistoryScreen.kt # UI for viewing the immutable audit log
βββ SettingsScreen.kt # UI for customizing indicator X/Y positions & colors
PrivaDoT is built using modern Android development standards:
- 100% Kotlin: Leveraging Coroutines and Flow for asynchronous operations.
- Jetpack Compose: Fully declarative, responsive UI with Material Design 3.
- Architecture: MVVM (Model-View-ViewModel) with strict separation of concerns.
- Persistence: Room Database for logs, Jetpack DataStore for asynchronous user preferences.
- Android Studio Ladybug (or newer)
- JDK 17
- Android SDK 36
# Clone the repository
$ git clone https://github.com/InvisusNova/PrivaDoT.git
# Navigate to directory
$ cd PrivaDoT
# Build the debug variant
$ ./gradlew assembleDebugThe output APK will be located at: app/build/outputs/apk/debug/app-debug.apk
π View Required Permissions (Expand)
| Permission | Purpose |
|---|---|
SYSTEM_ALERT_WINDOW |
Required to draw the indicator overlay seamlessly on top of other running apps (OverlayManager). |
BIND_ACCESSIBILITY_SERVICE |
Core engine. Allows PrivaDoTService to listen for passive hardware access events triggered by the OS. |
ACCESS_FINE_LOCATION |
Required only to detect when other apps are requesting location data. PrivaDoT itself does not use your location. |
QUERY_ALL_PACKAGES |
Allows the app to resolve package names (e.g., com.whatsapp) into human-readable app names and fetch their icons for the history log. |
POST_NOTIFICATIONS |
Ensures KeepAliveService remains alive via a foreground notification. |
RECEIVE_BOOT_COMPLETED |
Allows BootReceiver to restart the app after the phone restarts. |
Note
Despite requiring ACCESS_FINE_LOCATION, PrivaDoT only detects when other apps request your location. It never accesses your actual GPS coordinates.
If you find this project valuable, consider leaving a β



