REGSTAR
← All projects
WhiteListChecker iconStable · v1.0.0

> android / mobile network diagnostics

WhiteListChecker

Diagnose mobile network accessibility and observable signs of whitelist-mode restrictions.

WhiteListChecker runs checks through an explicitly acquired cellular Network, even when Wi-Fi remains the phone's default connection. It combines HTTPS reachability with DNS diagnostics, stores results locally and monitors changes over time.

Android 8+KotlinJetpack ComposeRoomRU / ENMIT
WhiteListChecker statistics
WhiteListChecker home screen
WhiteListChecker DNS settings
PlatformAndroid 8+
Releasev1.0.0
Published25 Aug 2026
Data modelLocal-first
LicenseMIT

$ context

What the app measures

WhiteListChecker does not have access to an operator's internal filtering rules. It reports observable network behavior and deliberately avoids presenting the result as proof of a specific operator-side mechanism.

01 / problem

A failed request alone does not explain why a resource is unreachable.

The cause can be routing, DNS, TLS, temporary connectivity loss, a VPN or tunnel, device configuration, or network-side filtering. A single “works / does not work” check is not enough for a useful diagnosis.

02 / approach

Measure the direct cellular path using several independent signals.

The app acquires a separate cellular Network, runs network-bound HTTPS and DNS checks, keeps DNS as secondary diagnostics, then stores the resulting state locally for history, statistics and monitoring.

> capabilities

Core capabilities

The stable release focuses on direct cellular diagnostics without requiring a project-owned backend or account.

01
CELL

Explicit cellular routing

Uses ConnectivityManager.requestNetwork(...) to obtain TRANSPORT_CELLULAR without process-wide bindProcessToNetwork.

02
HTTPS

Network-bound site checks

Checks editable LOCAL and FOREIGN target groups through the acquired cellular Network with normal TLS certificate and hostname verification.

03
DNS

DNS diagnostics

Supports editable resolvers, UDP/53, TCP/53 fallback and cellular hostname resolution. DNS remains a supporting signal rather than the sole classifier.

04
DATA

History and statistics

Room stores check history, per-target results, statistics and whitelist timeline. Data can be exported to CSV, JSON or TXT.

05
MON

Background and active monitoring

Scheduled checks use WorkManager, while explicitly started continuous monitoring uses a foreground service.

06
NTF

Notifications

Supports local Android notifications and an optional personal Telegram flow through a user-owned Cloudflare Worker and Telegram bot.

07
UPD

Update discovery

Checks official GitHub Releases asynchronously, filters stable/prerelease versions and lets the user open the official release page.

08
ISSUE

Built-in feedback

Bug report and feature request actions open GitHub Issue Forms without embedding a GitHub PAT or OAuth write credential in the APK.

09
I18N

Russian and English UI

User-facing dialogs, notifications, accessibility descriptions and errors are localized through Android resources.

$ signal_pipeline

How classification works

Site reachability is the primary classification signal. DNS availability is secondary, so one unavailable public resolver does not automatically become a mobile DNS failure.

! Proxy and VPN transports are intentionally not part of the checker path: they can change the route being measured and make direct cellular diagnostics unreliable.

> interface

Application screens

These are current screenshots from the project's own repository.

Main screen
01Main
Statistics
02Statistics
Site check settings
03Site checks
DNS settings
04DNS
Background checks
05Background checks
Active monitoring
06Active monitoring
Local notifications
07Notifications

$ architecture

Runtime architecture

The app uses MVVM with domain use cases and a manual AppContainer composition root. Checker logic, persistence and classification stay outside Compose UI components.

UI

Jetpack Compose + Material 3, MainViewModel and AppUpdateViewModel.

Domain

WhitelistCheckUseCase, CheckAndNotifyUseCase, CheckForAppUpdateUseCase and WhitelistStateClassifier.

Network

CellularNetworkProvider, MobileSiteChecker, CellularDnsResolver and OkHttp with the cellular Network socket factory where required.

Persistence

Room schema 8 for history/statistics/timeline and DataStore Preferences for application, checker, notification and monitoring settings.

Background

WorkManager for periodic checks and ActiveMonitoringService for explicitly started foreground monitoring.

Optional integrations

Public GitHub Releases API for update discovery and a user-owned Cloudflare Worker for personal Telegram integration.

$ engineering

Engineering decisions

These constraints are part of the product design, not missing features.

Cellular isolation

Do not bind the whole process to mobile data

The checker obtains a dedicated cellular Network and creates DNS/HTTPS traffic through it. Process-wide bindProcessToNetwork is intentionally not used.

Classification

Do not treat DNS as the whole diagnosis

Site checks are the primary signal. DNS remains secondary so failures of public resolvers do not create misleading overall states.

Measurement integrity

No proxy or VPN transport inside the checker

A proxy or tunnel changes the path being measured. Supporting it as a checker transport would undermine the purpose of direct cellular diagnostics.

Local-first migration

Remove the old central service without destroying user history

Room schema 8 removes the obsolete pending_public_reports table through migration 7 → 8 while preserving history, statistics, targets and settings.

Background execution

Use the Android execution model appropriate to the user's intent

WorkManager handles scheduled periodic work. Foreground Service is reserved for active monitoring explicitly started by the user.

Update delivery

Discover updates without implementing silent self-update

The app checks public GitHub Releases, filters prereleases and opens the official release page. APK download and installation remain under user and Android control.

> technology

Technology stack

Kotlinapplication
JDK 17build
Jetpack Compose + Material 3UI
MVVM + use casesarchitecture
Coroutines + Flowasync state
Room schema 8history
DataStore Preferencessettings
WorkManagerbackground
Foreground Serviceactive monitoring
OkHttpHTTPS
ConnectivityManagercellular routing

> privacy

LOCAL-FIRST

No central service is required for core functionality.

Since v1.0.0, the old project-owned central/public service has been removed. Checks, history and statistics stay on the device.

  • Check history stays local
  • Statistics stay local
  • No mandatory account
  • No project-owned central backend for diagnostics
  • Update checks do not upload history or settings
  • Personal Telegram is optional and user-owned

> security

SECURITY BOUNDARIES

Diagnostics without weakening transport security.

HTTPS target checks keep normal TLS certificate and hostname verification. The APK does not contain a GitHub PAT/OAuth write token or Telegram BOT_TOKEN.

  • TLS certificate verification remains enabled
  • Hostname verification remains enabled
  • No GitHub PAT/OAuth secret in APK
  • No Telegram BOT_TOKEN in APK
  • Release keystore and credentials stay outside Git
  • Feedback opens public GitHub Issue Forms

> build target

Android baseline

minSdk26
compileSdk35
targetSdk35
versionCode26
versionName1.0.0
Release artifactAPK
LanguagesRU / EN

$ stable_release

WhiteListChecker v1.0.0

The first stable release was published on 25 August 2026. The official APK and checksum file are distributed through GitHub Releases.

APK SHA-25653EE6B90AA3D2FB5A928519E3F6B411DD4572E1C2EE45519797449C4F3EB3ED3
Version1.0.0
Published25 Aug 2026
APKWhiteListChecker-v1.0.0-release.apk
Size9,972,068 bytes
ChannelStable
UpdatesGitHub Releases

> project links

Development and documentation

GitHub remains the source of truth for code, releases, issues and technical documentation.