Skip to content

keyvisions/CallScreener

Repository files navigation

Android Call Screening App

Smart call filtering with blacklist, whitelist, and regex rules.

Privacy-First Design: This app does NOT collect, transmit, or share any data. Everything stays on your device.

Privacy Guarantees

  • Zero Internet connections - The app has no network access permission
  • Zero tracking - No analytics, telemetry, or profiling
  • Zero cloud backups - Data is never synchronized
  • Zero ads - Completely free and ad-free
  • 100% Open Source - Fully verifiable code

Read the complete Privacy Policy


Description

This project implements an Android application using the official Call Screening API to detect incoming calls and decide whether to allow, silence, or reject them based on customizable rules.

The filtering engine supports:

  • Blacklist (specific numbers to block)
  • Whitelist (always allowed numbers)
  • Regex-based rules for advanced pattern matching
  • Contacts-based exceptions (e.g., always allow numbers saved in the address book)

The app is built with a modular, scalable architecture:

  • CallScreeningService for call interception
  • Rules Engine for decision logic
  • Room database for local storage
  • Jetpack Compose for a clean and minimal UI

Designed to be minimal, elegant, privacy-focused, and extensible.

Build Instructions

Prerequisites

  • Android SDK (API 29+)
  • Gradle 9.2+
  • Java 17+

Build the Project

  1. Build the APK:

    ./gradlew assembleDebug
  2. Build release APK:

    ./gradlew assembleRelease
  3. Install on device:

    ./gradlew installDebug
  4. Run tests:

    ./gradlew test

Project Structure

app/
├── src/main/
│   ├── java/com/keyvisions/callscreening/
│   │   ├── data/              # Room database entities and DAOs
│   │   ├── engine/            # Rules evaluation engine
│   │   ├── service/           # CallScreeningService implementation
│   │   └── ui/                # Jetpack Compose UI
│   │       ├── screens/       # UI screens (Rules, Logs, Settings)
│   │       ├── theme/         # Material3 theme
│   │       └── viewmodel/     # ViewModels for state management
│   ├── res/                   # Resources (layouts, strings, etc.)
│   └── AndroidManifest.xml    # App manifest with permissions
└── build.gradle.kts           # App-level Gradle configuration

Features

Call Screening

  • Automatically screens incoming calls using custom rules
  • Supports multiple rule types: Blacklist, Whitelist, and Regex
  • Actions: Allow, Silence, or Reject calls
  • Contact integration: Optionally allow all saved contacts

Rules Management

  • Add/edit/delete screening rules
  • Enable/disable individual rules
  • Pattern matching for phone numbers
  • Regular expressions for advanced filtering

Call Logs

  • Track all screened calls
  • View statistics (allowed, silenced, blocked)
  • See which rule matched each call
  • Clear call history

Settings

  • Toggle call screening on/off
  • Configure default action for unmatched calls
  • Enable/disable contact whitelist
  • System integration settings

Required Permissions

The app requires the following permissions:

  • READ_PHONE_STATE - Detect incoming calls
  • READ_CALL_LOG - Access call history
  • READ_CONTACTS - Check if caller is in contacts
  • ANSWER_PHONE_CALLS - Control call actions

Setup as Default Call Screener

  1. Open the app
  2. Go to Settings
  3. Tap "Set as Default Call Screener"
  4. Select this app as the default Phone app or Call screening app

Architecture

  • MVVM Pattern: Separation of UI and business logic
  • Room Database: Local data persistence
  • Kotlin Coroutines: Asynchronous operations
  • Jetpack Compose: Modern declarative UI
  • Material3: Latest Material Design components

License

See LICENSE file for details.

About

Android App (open source, free, no ads) that filters incoming calls

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages