capacitor-community / capacitor-community/proposals

Android VoIP Call Screen

Open
#239 0 comments 0 reactions 0 assignees View on GitHub
plugin proposal
Dominant language
No language data
Stars
79
Forks
2
PR merge metrics
No merged PRs in 30d

Description

## Plugin Request

**Name**: Android VoIP Call Screen
**Package**: `@capacitor-community/android-voip-call-screen`

---

### Platform(s)

- Android 10+
- Optional future support for iOS (CallKit integration)

---

### Existing Solutions

Existing related plugins:

- `@capacitor-community/callkit` – iOS CallKit integration only
- `cordova-plugin-callkit` – iOS focused
- `cordova-plugin-android-voip` – Limited maintenance
- Native Android Telecom API – Requires manual native implementation

Limitations of current solutions:

- No modern maintained plugin dedicated to Android native VoIP call UI
- No unified API to trigger system-level incoming call screen
- Hard to integrate with Firebase/Socket-based VoIP apps
- Lack of background service + foreground call notification abstraction

---

### Description

This plugin provides a native Android system-level VoIP call screen integration for Capacitor apps.

It allows web-based VoIP apps to:

- Trigger native Android incoming call UI
- Show full-screen call interface
- Display caller name, avatar, and call type
- Accept / Reject / End call actions from native UI
- Run as a foreground service during active calls
- Keep audio active in background
- Integrate with WebRTC / Socket.IO / SIP-based calling
- Maintain call state between app background and foreground

---

### Core Features

- 🔔 Show native incoming call screen
- 📱 Full-screen overlay during call
- 🎧 Foreground service for active calls
- 🔄 Handle Accept / Reject / End callbacks
- 🔒 Works when app is locked or minimized
- 📲 Supports multiple incoming calls queue
- 🔕 Auto-dismiss when call ends from backend
- 🧩 Event listeners for call actions
- ⚡ Lightweight API for JS control

---

### Example API (Proposed)

```ts
VoipCallScreen.showIncomingCall({
callerName: "John Doe",
callerAvatar: "https://example.com/avatar.jpg",
callId: "12345"
});

VoipCallScreen.endCall({ callId: "12345" });

VoipCallScreen.onCallAccepted((data) => {
console.log("Call accepted", data);
});

VoipCallScreen.onCallRejected((data) => {
console.log("Call rejected", data);
});

Contributor guide

Open the contributing guide

Research direction

No implementation files or tests are named. Start by reviewing the proposed API and Android 10+ native Telecom API requirements, then define the supported call states, background behavior, and callback flow; done should cover the requested native incoming-call, active-call, and end-call behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
android
Domain
audio-video-rtc, mobile
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.