Trying to overlay a Dialog on top of the system InCallUI. This never works reliably due to SYSTEM_ALERT_WINDOW restrictions and the fact that the system InCallUI has the highest priority ( TYPE_APPLICATION_OVERLAY is lower than TYPE_PHONE ).
If you’ve ever built a VoIP or carrier-grade calling app for Android, you’ve likely cursed the black box known as InCallUI . It’s the system-level interface that pops up when you receive or make a phone call—the screen with the accept, decline, speakerphone, and keypad buttons. incallui
adb shell am force-stop com.android.dialer adb shell am start -a android.intent.action.ANSWER If the phone still rings but you can't see the UI, you've replicated a core Telecom bug. With Android 14, Google doubled down on "cross-device calling" (Call Streaming). This introduces a new layer: RemoteInCallService . Trying to overlay a Dialog on top of the system InCallUI
The InCallUI activity requires an absurdly fast start-up time. Telecom starts a "warm-up" process pre-emptively. If your InCallActivity takes longer than ~200ms to inflate its layout or bind to InCallService , the system times out. The call connects, but the UI never appears. It’s the system-level interface that pops up when
Use adb shell dumpsys telecom and look for InCallController . If you see mIsBound = false while a call is active, your UI has crashed silently. Customizing InCallUI (The Right Way) Let’s say you're building a VoIP app (like WhatsApp or Signal). You don't want to replace the system dialer. You want your own call screen inside your app.
Now, your Android tablet can show an InCallUI for a call active on your phone. This is implemented via a new InCallService extension that proxies touch events (mute, speaker) back to the phone over Bluetooth LE.