Incoming Call Only Launcher is a minimalist, open-source Android launcher designed for seniors and vulnerable users. It transforms an Android device into a receive-only phone, allowing incoming calls exclusively from trusted contacts while completely disabling outgoing calls and all non-essential system features.
Goal: Provide a calm, safe, and confusion-free experience while giving caregivers and family members full control over the device.
Designed for: Seniors • Care Facilities • Hospitals • Caregivers • People with Cognitive Impairment • Kiosk Devices
Or download the latest APK from GitHub Releases
- Purpose
- Key Features
- Requirements
- Installation
- Initial Setup
- Admin Access
- Technical Stack
- Screenshots
- Privacy & Data
- Contributing
- License
- Legal Notice
Incoming Call Only Launcher locks the user into a single-purpose interface focused on safety and clarity.
The user can:
- View the current date and time with a large, high-contrast display
- Receive incoming calls only from a curated list of trusted contacts
Everything else is intentionally hidden or restricted:
- No outgoing calls
- No notifications
- No messaging apps
- No system settings or navigation
- No accidental interactions
This design minimizes confusion and prevents misuse.
Typical use cases include:
- Elderly users who should not place accidental or emergency calls
- People with Alzheimer’s disease or cognitive impairment
- Patients in care facilities or hospitals
- Children or vulnerable individuals using a dedicated device
- Situations where caregivers need full control over who can call the device
Incoming Call Only Launcher is intentionally limited by design.
✔ It is:
- A receive-only phone interface
- A safety-focused Android launcher
- A controlled environment for caregivers
✖ It is NOT:
- A standard phone app
- A dialer
- A messaging app
- A general-purpose launcher
-
Senior-Centric UI
Large digital clock, full date, and high-contrast theme. Redesigned call screens with extra-large text, vibrant action buttons, and a reassuring visual style. -
Intelligent Audio Routing
Incoming calls start on speakerphone by default, helping users with hearing or dexterity challenges. Switch between speaker and earpiece using large, clear buttons. -
Safe Call Handling
- Incoming calls ring only for contacts.
- Unknown callers are automatically silenced or rejected.
- 2-Tap Safety: Hang-up and Refuse actions require two taps to prevent accidental call termination.
-
Kiosk & Pinning Modes
- Screen Pinning: Easily lock the app to the screen from the Admin menu (no ADB required).
- Device Owner: For full lockdown (status bar disabled, navigation blocked), set as Device Owner via ADB.
-
Protected Admin Interface
A hidden admin screen allows caregivers to manage contacts and device behavior without risk of accidental access. -
Simple PIN Access
Admin access is protected by a PIN (default:1234) for quick and controlled caregiver access. -
Call History View a detailed log of incoming, missed, and rejected calls with duration and timestamps.
-
Local Backup & Restore Easily export your contacts list to a JSON file and restore it on another device or after a reset.
Incoming Call Only Launcher does not collect, store, or transmit any personal data.
- No analytics
- No tracking
- No cloud services
- No third-party integrations
All contacts, settings, and call history are stored locally on the device only.
- Language: Kotlin
- UI: Jetpack Compose (Material 3)
- Typography: Inter font family (SIL Open Font License)
- Architecture: MVVM + Hilt
- Storage: Room Database
- Security:
DevicePolicyManager(Device Owner / Kiosk mode)CallScreeningService(incoming call filtering)
See ATTRIBUTIONS.md for third-party licenses.
Clean, high-contrast UI designed for elderly and vulnerable users.
![]() Home screen |
![]() Incoming call |
![]() Ongoing call |
![]() Admin / PIN entry |
![]() Contacts management |
![]() Add contact |
![]() Unlock, Content & System |
![]() Audio, Display & Power |
![]() Display & Localization |
![]() Data Management & Support |
![]() Ringer disabled |
![]() Night mode |
![]() Dim mode |
- Android 6.0 (API level 23) or higher
- Minimum 50 MB free storage
- Active phone line with incoming call capability
- For Device Owner mode: USB debugging enabled and ADB access
The easiest way to install is via the official Play Store:
This ensures you always have the latest version with automatic updates.
You can download a ready-to-install APK from GitHub Releases:
Each release includes:
- A signed APK
- Release notes
Steps:
- Download the
.apkfile from the Releases page. - Copy it to the target Android device.
- Allow installation from unknown sources if prompted.
- Install the APK.
For developers who want to build from source code:
-
Clone this repository:
git clone https://github.com/lcarne/call-only-launcher.git cd call-only-launcher -
Open the project in Android Studio.
-
Build and install the APK on the target device:
./gradlew assembleDebug
Upon the first launch, an onboarding flow will guide you through:
- Requesting location access (used to display network quality)
- Setting the default phone app
- Setting the default launcher
- Enabling app lock for security
The Admin interface is intentionally hidden to prevent accidental access by the end user.
- On the home screen, tap the date/time area 15 times rapidly to open the Admin entry point.
- Enter the default PIN:
1234(can be changed in Admin Settings)
- Manage Contacts: Add, edit, or remove trusted contacts.
- View Call History: Check recent activity including blocked calls.
- Data Management:
- Export/Import Contacts: Backup your trusted list to a JSON file.
- Reset Data: Clear call history or factory reset app settings.
- Screen & Power: Configure behavior dependent on power state (Plugged In vs On Battery):
- Off: Standard Android timeout.
- Dim: Screen stays on with reduced brightness, showing only the clock.
- Awake: Screen stays on at normal brightness.
- Customization: Configure Night mode, Clock color, Ringer volume.
- System Control:
- Pin App: Activate Android Screen Pinning to lock the user in the app (no ADB required).
- Unpin / Unlock: Temporarily exit restricted mode.
- Set as Default Launcher: Re-prompt to set as home app if needed.
For full lockdown (disable status bar, navigation, system gestures), set the app as Device Owner.
This action is irreversible without ADB access.
- Remove Google accounts from the device (recommended)
- Enable USB debugging in Developer Options
adb shell dpm set-device-owner com.incomingcallonly.launcher/.receivers.IncomingCallOnlyAdminReceiverIf successful, the launcher will be pinned and the status bar/navigation will be disabled according to device policy.
If you cannot access the Admin unlock button, remove the Device Owner via ADB:
adb shell dpm remove-active-admin com.incomingcallonly.launcher/.receivers.IncomingCallOnlyAdminReceiver- The Admin receiver is
com.incomingcallonly.launcher.receivers.IncomingCallOnlyAdminReceiverand is declared in the manifest withBIND_DEVICE_ADMINpermission. - Kiosk behavior (lock task packages, disabling the status bar) is controlled via
DevicePolicyManagerinMainActivity.
Contributions and corrections are welcome. Please open issues or pull requests for feature requests, fixes, or documentation updates.
This project is licensed under the MIT License, see the LICENSE file.
This project references and includes links to the Google Play Store. The Google Play logo and branding are trademarks of Google LLC.
- We are not affiliated with Google LLC.
- The Google Play Store badge and logo are used under fair use for informational purposes only to direct users to our official app distribution channel.
- This app is distributed under the MIT License, and we comply with all Play Store policies and guidelines.
- Inter font family (SIL Open Font License)
- Material You
For a complete list of third-party licenses and attributions, please see ATTRIBUTIONS.md.
100% free, 100% open source, made with ❤️ for my grandmother












