Compose Call Guard is a lightweight, privacy-focused Android call blocking application built with modern Android architecture.
Unlike traditional blockers that rely on cloud databases, this app uses Regular Expressions (Regex) to give users granular, offline control over who can reach them. It features a stunning Material You interface that adapts to your device's wallpaper.
- Regex Power: Filter calls using powerful Regular Expressions (e.g.,
^1\d{2}.*blocks specific prefixes). - Dual-Layer Filtering:
- Whitelist (Priority): Numbers matching these rules are always allowed.
- Blacklist: Numbers matching these rules are silently rejected.
- Privacy First: Runs 100% offline using Android's
CallScreeningService. No contacts uploaded, no internet permission required. - Material You Design: Built entirely with Jetpack Compose and Material 3, supporting Dynamic Colors.
- History Log: Keep track of blocked calls with timestamps and matched rules.
| Block History | Settings & Rules | Add Regex Rule |
|---|---|---|
![]() |
![]() |
![]() |
- Language: Kotlin
- UI Toolkit: Jetpack Compose (Material Design 3)
- Architecture: MVVM (Model-View-ViewModel)
- Database: Room (SQLite abstraction)
- Storage: Jetpack DataStore (Preferences)
- System API:
CallScreeningService(Android 10+) - Concurrency: Kotlin Coroutines & Flow
- Android Studio Iguana or newer.
- JDK 17+.
- Android Device/Emulator running API Level 29 (Android 10) or higher.
- Clone the repository:
git clone [https://github.com/AndrewWangDev/Compose-Call-Guard.git](https://github.com/AndrewWangDev/Compose-Call-Guard.git)
- Open the project in Android Studio.
- Sync Gradle and Build.
- Important: After installation, go to
Settings -> Apps -> Default Apps -> Caller ID & Spam Appand select Compose Call Guard.
The app utilizes the CallScreeningService API. When an incoming call arrives:
- The system wakes up the service.
- The app checks the Master Switch in DataStore (Synchronously).
- It validates the number against Whitelist Regexes from Room Database.
- If not whitelisted, it checks against Blacklist Regexes.
- If matched, the call is rejected without notification, and the event is logged asynchronously.
Contributions are welcome! Please fork the repository and submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
Developed by Andrew Wang


