@stream-io/react-native-callingx 0.1.1-beta.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +45 -357
- package/android/src/main/java/io/getstream/rn/callingx/CallService.kt +16 -3
- package/android/src/main/java/io/getstream/rn/callingx/notifications/CallNotificationManager.kt +9 -15
- package/android/src/main/java/io/getstream/rn/callingx/notifications/NotificationIntentFactory.kt +18 -6
- package/android/src/main/java/io/getstream/rn/callingx/notifications/NotificationReceiverActivity.kt +41 -18
- package/android/src/main/java/io/getstream/rn/callingx/notifications/NotificationReceiverService.kt +24 -0
- package/android/src/main/java/io/getstream/rn/callingx/repo/TelecomCallRepository.kt +7 -0
- package/dist/module/CallingxModule.js +9 -3
- package/dist/module/CallingxModule.js.map +1 -1
- package/dist/module/utils/constants.js +5 -2
- package/dist/module/utils/constants.js.map +1 -1
- package/dist/typescript/src/CallingxModule.d.ts.map +1 -1
- package/dist/typescript/src/types.d.ts +10 -5
- package/dist/typescript/src/types.d.ts.map +1 -1
- package/dist/typescript/src/utils/constants.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/CallingxModule.ts +11 -3
- package/src/types.ts +10 -5
- package/src/utils/constants.ts +2 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
|
+
|
|
5
|
+
## [0.2.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/react-native-callingx-0.1.1...@stream-io/react-native-callingx-0.2.0) (2026-05-08)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- ongoing calls adjustments ([#2209](https://github.com/GetStream/stream-video-js/issues/2209)) ([16e2331](https://github.com/GetStream/stream-video-js/commit/16e23319bb352d5b28a6a67c5fa97dbdf757ba1a))
|
|
10
|
+
|
|
11
|
+
## [0.1.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/react-native-callingx-0.1.0...@stream-io/react-native-callingx-0.1.1) (2026-04-09)
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
- callingx docs update ([#2195](https://github.com/GetStream/stream-video-js/issues/2195)) ([7a6b632](https://github.com/GetStream/stream-video-js/commit/7a6b632270ec1187236a0e4e5c5396a98a20fd16))
|
|
16
|
+
|
|
17
|
+
## 0.1.0 (2026-04-09)
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
- callkit/telecom integration ([#2028](https://github.com/GetStream/stream-video-js/issues/2028)) ([d579acd](https://github.com/GetStream/stream-video-js/commit/d579acd1975fb4945e40452b27e372694c737628))
|
package/README.md
CHANGED
|
@@ -1,395 +1,83 @@
|
|
|
1
|
-
# react-native-callingx
|
|
1
|
+
# @stream-io/react-native-callingx
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
React Native native-calling bridge for:
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- iOS CallKit
|
|
6
|
+
- Android Telecom/ConnectionService
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
- 📲 **Outgoing call registration** — Register outgoing calls with the system
|
|
9
|
-
- 🎛️ **Call controls** — Mute, hold, end calls with native system integration
|
|
10
|
-
- 🔔 **Custom notifications** — Configurable Android notification channels
|
|
11
|
-
- ⚡ **Turbo Module** — Built with the New Architecture for optimal performance
|
|
12
|
-
- 📱 **Background support** — Handle calls when the app is backgrounded or killed
|
|
13
|
-
|
|
14
|
-
## Requirements
|
|
15
|
-
|
|
16
|
-
- React Native 0.73+ (New Architecture / Turbo Modules)
|
|
17
|
-
- iOS 13.0+
|
|
18
|
-
- Android API 26+ (Android 8.0 Oreo)
|
|
19
|
-
|
|
20
|
-
## Installation
|
|
8
|
+
## Install
|
|
21
9
|
|
|
22
10
|
```sh
|
|
23
|
-
npm install @stream-io/react-native-callingx
|
|
24
|
-
# or
|
|
25
11
|
yarn add @stream-io/react-native-callingx
|
|
26
12
|
```
|
|
27
13
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
1. Add the required background modes to your `Info.plist`:
|
|
31
|
-
|
|
32
|
-
```xml
|
|
33
|
-
<key>UIBackgroundModes</key>
|
|
34
|
-
<array>
|
|
35
|
-
<string>voip</string>
|
|
36
|
-
<string>audio</string>
|
|
37
|
-
</array>
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
2. Run pod install:
|
|
14
|
+
Then run iOS pods:
|
|
41
15
|
|
|
42
16
|
```sh
|
|
43
17
|
cd ios && pod install
|
|
44
18
|
```
|
|
45
19
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
```objc
|
|
49
|
-
#import <Callingx/CallingxPublic.h>
|
|
50
|
-
|
|
51
|
-
- (void)pushRegistry:(PKPushRegistry *)registry
|
|
52
|
-
didReceiveIncomingPushWithPayload:(PKPushPayload *)payload
|
|
53
|
-
forType:(PKPushType)type
|
|
54
|
-
withCompletionHandler:(void (^)(void))completion {
|
|
55
|
-
|
|
56
|
-
// Extract call information from payload
|
|
57
|
-
NSString *callId = payload.dictionaryPayload[@"call_id"];
|
|
58
|
-
NSString *callerName = payload.dictionaryPayload[@"caller_name"];
|
|
59
|
-
NSString *handle = payload.dictionaryPayload[@"handle"];
|
|
60
|
-
BOOL hasVideo = [payload.dictionaryPayload[@"has_video"] boolValue];
|
|
61
|
-
|
|
62
|
-
[Callingx reportNewIncomingCall:callId
|
|
63
|
-
handle:handle
|
|
64
|
-
handleType:@"generic"
|
|
65
|
-
hasVideo:hasVideo
|
|
66
|
-
localizedCallerName:callerName
|
|
67
|
-
supportsHolding:YES
|
|
68
|
-
supportsDTMF:NO
|
|
69
|
-
supportsGrouping:NO
|
|
70
|
-
supportsUngrouping:NO
|
|
71
|
-
payload:payload.dictionaryPayload
|
|
72
|
-
withCompletionHandler:completion];
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Android Setup
|
|
20
|
+
## Quick start
|
|
77
21
|
|
|
78
|
-
|
|
22
|
+
```ts
|
|
23
|
+
import { CallingxModule } from '@stream-io/react-native-callingx';
|
|
79
24
|
|
|
80
|
-
### Setup
|
|
81
|
-
|
|
82
|
-
Initialize the module with platform-specific configuration:
|
|
83
|
-
|
|
84
|
-
```typescript
|
|
85
|
-
import { CallingxModule } from 'react-native-callingx';
|
|
86
|
-
|
|
87
|
-
// Setup must be called before any other method
|
|
88
25
|
CallingxModule.setup({
|
|
89
26
|
ios: {
|
|
90
|
-
appName: 'My App',
|
|
91
27
|
supportsVideo: true,
|
|
92
|
-
|
|
93
|
-
maximumCallGroups: 1,
|
|
94
|
-
handleType: 'generic', // 'generic' | 'number' | 'phone' | 'email'
|
|
28
|
+
callsHistory: false,
|
|
95
29
|
},
|
|
96
30
|
android: {
|
|
97
31
|
incomingChannel: {
|
|
98
|
-
id: '
|
|
99
|
-
name: 'Incoming
|
|
100
|
-
sound: 'ringtone', // optional custom sound
|
|
101
|
-
vibration: true,
|
|
32
|
+
id: 'incoming_calls_channel',
|
|
33
|
+
name: 'Incoming calls',
|
|
102
34
|
},
|
|
103
|
-
outgoingChannel: {
|
|
104
|
-
id: 'ongoing_calls',
|
|
105
|
-
name: 'Ongoing Calls',
|
|
106
|
-
},
|
|
107
|
-
// Optional: transform display text
|
|
108
|
-
titleTransformer: (name) => `Call from ${name}`,
|
|
109
|
-
subtitleTransformer: (phoneNumber) => phoneNumber,
|
|
110
35
|
},
|
|
111
36
|
});
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Request Permissions
|
|
115
37
|
|
|
116
|
-
Before displaying calls, request the required permissions:
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
const permissions = await CallingxModule.requestPermissions();
|
|
120
|
-
console.log('Audio permission:', permissions.recordAudio);
|
|
121
|
-
console.log('Notification permission:', permissions.postNotifications);
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### Display Incoming Call
|
|
125
|
-
|
|
126
|
-
Show the native incoming call UI:
|
|
127
|
-
|
|
128
|
-
```typescript
|
|
129
38
|
await CallingxModule.displayIncomingCall(
|
|
130
|
-
'
|
|
131
|
-
'+
|
|
132
|
-
'John Doe', // caller name
|
|
133
|
-
true, // has video
|
|
134
|
-
);
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Start Outgoing Call
|
|
138
|
-
|
|
139
|
-
Register an outgoing call with the system:
|
|
140
|
-
|
|
141
|
-
```typescript
|
|
142
|
-
await CallingxModule.startCall(
|
|
143
|
-
'unique-call-id',
|
|
144
|
-
'+1234567890',
|
|
39
|
+
'call-id',
|
|
40
|
+
'+123456789',
|
|
145
41
|
'John Doe',
|
|
146
|
-
|
|
42
|
+
true,
|
|
147
43
|
);
|
|
148
44
|
```
|
|
149
45
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
Answer an incoming call programmatically:
|
|
153
|
-
|
|
154
|
-
```typescript
|
|
155
|
-
await CallingxModule.answerIncomingCall('unique-call-id');
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Activate Call
|
|
159
|
-
|
|
160
|
-
Mark a call as active (connected):
|
|
161
|
-
|
|
162
|
-
```typescript
|
|
163
|
-
await CallingxModule.setCurrentCallActive('unique-call-id');
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### End Call
|
|
167
|
-
|
|
168
|
-
End a call with a specific reason:
|
|
169
|
-
|
|
170
|
-
```typescript
|
|
171
|
-
import type { EndCallReason } from 'react-native-callingx';
|
|
172
|
-
|
|
173
|
-
// Available reasons:
|
|
174
|
-
// 'local' | 'remote' | 'rejected' | 'busy' | 'answeredElsewhere' |
|
|
175
|
-
// 'missed' | 'error' | 'canceled' | 'restricted' | 'unknown'
|
|
176
|
-
await CallingxModule.endCallWithReason('unique-call-id', 'remote');
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Mute/Unmute
|
|
180
|
-
|
|
181
|
-
Toggle call mute state:
|
|
182
|
-
|
|
183
|
-
```typescript
|
|
184
|
-
await CallingxModule.setMutedCall('unique-call-id', true); // mute
|
|
185
|
-
await CallingxModule.setMutedCall('unique-call-id', false); // unmute
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### Hold/Unhold
|
|
189
|
-
|
|
190
|
-
Toggle call hold state:
|
|
191
|
-
|
|
192
|
-
```typescript
|
|
193
|
-
await CallingxModule.setOnHoldCall('unique-call-id', true); // hold
|
|
194
|
-
await CallingxModule.setOnHoldCall('unique-call-id', false); // unhold
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### Update Display
|
|
198
|
-
|
|
199
|
-
Update the caller information during a call:
|
|
200
|
-
|
|
201
|
-
```typescript
|
|
202
|
-
await CallingxModule.updateDisplay(
|
|
203
|
-
'unique-call-id',
|
|
204
|
-
'+1234567890',
|
|
205
|
-
'Updated Name',
|
|
206
|
-
);
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
### Event Listeners
|
|
210
|
-
|
|
211
|
-
Subscribe to call events:
|
|
212
|
-
|
|
213
|
-
```typescript
|
|
214
|
-
import { CallingxModule } from 'react-native-callingx';
|
|
215
|
-
import type { EventName } from 'react-native-callingx';
|
|
216
|
-
|
|
217
|
-
// Answer event - user answered from system UI
|
|
218
|
-
const answerSubscription = CallingxModule.addEventListener(
|
|
219
|
-
'answerCall',
|
|
220
|
-
(params) => {
|
|
221
|
-
console.log('Call answered:', params.callId);
|
|
222
|
-
},
|
|
223
|
-
);
|
|
224
|
-
|
|
225
|
-
// End event - call ended
|
|
226
|
-
const endSubscription = CallingxModule.addEventListener('endCall', (params) => {
|
|
227
|
-
console.log('Call ended:', params.callId, 'Cause:', params.cause);
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
// Hold toggle event
|
|
231
|
-
const holdSubscription = CallingxModule.addEventListener(
|
|
232
|
-
'didToggleHoldCallAction',
|
|
233
|
-
(params) => {
|
|
234
|
-
console.log('Hold toggled:', params.callId, 'On hold:', params.hold);
|
|
235
|
-
},
|
|
236
|
-
);
|
|
237
|
-
|
|
238
|
-
// Mute toggle event
|
|
239
|
-
const muteSubscription = CallingxModule.addEventListener(
|
|
240
|
-
'didPerformSetMutedCallAction',
|
|
241
|
-
(params) => {
|
|
242
|
-
console.log('Mute toggled:', params.callId, 'Muted:', params.muted);
|
|
243
|
-
},
|
|
244
|
-
);
|
|
245
|
-
|
|
246
|
-
// Start call action (outgoing call initiated from system)
|
|
247
|
-
const startSubscription = CallingxModule.addEventListener(
|
|
248
|
-
'didReceiveStartCallAction',
|
|
249
|
-
(params) => {
|
|
250
|
-
console.log('Start call action:', params.callId);
|
|
251
|
-
},
|
|
252
|
-
);
|
|
253
|
-
|
|
254
|
-
// Clean up when done
|
|
255
|
-
answerSubscription.remove();
|
|
256
|
-
endSubscription.remove();
|
|
257
|
-
// ... remove other subscriptions
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### Handle Initial Events
|
|
261
|
-
|
|
262
|
-
When the app is launched from a killed state by a call action, retrieve queued events:
|
|
263
|
-
|
|
264
|
-
```typescript
|
|
265
|
-
// Get events that occurred before the module was initialized
|
|
266
|
-
const initialEvents = CallingxModule.getInitialEvents();
|
|
267
|
-
initialEvents.forEach((event) => {
|
|
268
|
-
console.log('Initial event:', event.eventName, event.params);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
// Clear initial events after processing
|
|
272
|
-
await CallingxModule.clearInitialEvents();
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Background Tasks (Android)
|
|
276
|
-
|
|
277
|
-
Run background tasks for call-related operations:
|
|
278
|
-
|
|
279
|
-
```typescript
|
|
280
|
-
// Start a managed background task
|
|
281
|
-
await CallingxModule.startBackgroundTask(async (taskData, stopTask) => {
|
|
282
|
-
try {
|
|
283
|
-
// Perform background work (e.g., connect to call server)
|
|
284
|
-
await connectToCallServer();
|
|
285
|
-
} finally {
|
|
286
|
-
stopTask(); // Always call when done
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
|
|
290
|
-
// Or stop manually
|
|
291
|
-
await CallingxModule.stopBackgroundTask();
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
## API Reference
|
|
295
|
-
|
|
296
|
-
### CallingxModule
|
|
297
|
-
|
|
298
|
-
| Method | Description |
|
|
299
|
-
| ---------------------------------------------------------------- | ---------------------------------------------------- |
|
|
300
|
-
| `setup(options)` | Initialize the module with platform-specific options |
|
|
301
|
-
| `requestPermissions()` | Request required permissions (audio, notifications) |
|
|
302
|
-
| `checkPermissions()` | Check current permission status |
|
|
303
|
-
| `displayIncomingCall(callId, phoneNumber, callerName, hasVideo)` | Display incoming call UI |
|
|
304
|
-
| `answerIncomingCall(callId)` | Answer an incoming call |
|
|
305
|
-
| `startCall(callId, phoneNumber, callerName, hasVideo)` | Register an outgoing call |
|
|
306
|
-
| `setCurrentCallActive(callId)` | Mark call as active/connected |
|
|
307
|
-
| `updateDisplay(callId, phoneNumber, callerName)` | Update caller display info |
|
|
308
|
-
| `endCallWithReason(callId, reason)` | End call with specified reason |
|
|
309
|
-
| `setMutedCall(callId, isMuted)` | Toggle call mute state |
|
|
310
|
-
| `setOnHoldCall(callId, isOnHold)` | Toggle call hold state |
|
|
311
|
-
| `addEventListener(eventName, callback)` | Subscribe to call events |
|
|
312
|
-
| `getInitialEvents()` | Get queued events from app launch |
|
|
313
|
-
| `clearInitialEvents()` | Clear queued initial events |
|
|
314
|
-
| `startBackgroundTask(taskProvider)` | Start Android background task |
|
|
315
|
-
| `stopBackgroundTask()` | Stop Android background task |
|
|
316
|
-
| `log(message, level)` | Log message to native console |
|
|
317
|
-
|
|
318
|
-
### Events
|
|
319
|
-
|
|
320
|
-
| Event | Parameters | Description |
|
|
321
|
-
| ------------------------------ | ------------------- | --------------------------------- |
|
|
322
|
-
| `answerCall` | `{ callId }` | User answered call from system UI |
|
|
323
|
-
| `endCall` | `{ callId, cause }` | Call ended |
|
|
324
|
-
| `didToggleHoldCallAction` | `{ callId, hold }` | Hold state changed |
|
|
325
|
-
| `didPerformSetMutedCallAction` | `{ callId, muted }` | Mute state changed |
|
|
326
|
-
| `didReceiveStartCallAction` | `{ callId }` | Outgoing call action received |
|
|
327
|
-
|
|
328
|
-
### Types
|
|
329
|
-
|
|
330
|
-
```typescript
|
|
331
|
-
type EndCallReason =
|
|
332
|
-
| 'local' // Call ended by the local user (e.g., hanging up)
|
|
333
|
-
| 'remote' // Call ended by the remote party, or outgoing not answered
|
|
334
|
-
| 'rejected' // Call was rejected/declined
|
|
335
|
-
| 'busy' // Remote party was busy
|
|
336
|
-
| 'answeredElsewhere' // Answered on another device
|
|
337
|
-
| 'missed' // No response to an incoming call
|
|
338
|
-
| 'error' // Call failed due to an error (e.g., network issue)
|
|
339
|
-
| 'canceled' // Call canceled before the remote party could answer
|
|
340
|
-
| 'restricted' // Call restricted (e.g., airplane mode)
|
|
341
|
-
| 'unknown'; // Unknown or unspecified disconnect reason
|
|
342
|
-
|
|
343
|
-
type CallingExpiOSOptions = {
|
|
344
|
-
appName: string;
|
|
345
|
-
supportsVideo?: boolean;
|
|
346
|
-
maximumCallsPerCallGroup?: number;
|
|
347
|
-
maximumCallGroups?: number;
|
|
348
|
-
handleType?: 'generic' | 'number' | 'phone' | 'email';
|
|
349
|
-
};
|
|
350
|
-
|
|
351
|
-
type CallingExpAndroidOptions = {
|
|
352
|
-
incomingChannel?: {
|
|
353
|
-
id: string;
|
|
354
|
-
name: string;
|
|
355
|
-
sound?: string;
|
|
356
|
-
vibration?: boolean;
|
|
357
|
-
};
|
|
358
|
-
outgoingChannel?: {
|
|
359
|
-
id: string;
|
|
360
|
-
name: string;
|
|
361
|
-
sound?: string;
|
|
362
|
-
vibration?: boolean;
|
|
363
|
-
};
|
|
364
|
-
};
|
|
365
|
-
|
|
366
|
-
type PermissionsResult = {
|
|
367
|
-
recordAudio: boolean;
|
|
368
|
-
postNotifications: boolean;
|
|
369
|
-
};
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
## Troubleshooting
|
|
373
|
-
|
|
374
|
-
### iOS
|
|
375
|
-
|
|
376
|
-
- **Incoming call not showing**: Ensure `voip` background mode is enabled and VoIP push certificate is configured
|
|
377
|
-
- **CallKit errors**: Check that `appName` is set in setup options
|
|
378
|
-
- **Audio issues**: The module automatically configures the audio session, but ensure no conflicts with other audio libraries
|
|
46
|
+
## Main APIs
|
|
379
47
|
|
|
380
|
-
|
|
48
|
+
- `setup(options)` - required before any call action.
|
|
49
|
+
- `displayIncomingCall(callId, phoneNumber, callerName, hasVideo)`.
|
|
50
|
+
- `startCall(callId, phoneNumber, callerName, hasVideo)`.
|
|
51
|
+
- `setCurrentCallActive(callId)`.
|
|
52
|
+
- `updateDisplay(callId, phoneNumber, callerName, incoming)`.
|
|
53
|
+
- `endCallWithReason(callId, reason)`.
|
|
54
|
+
- `setMutedCall(callId, isMuted)`.
|
|
55
|
+
- `setOnHoldCall(callId, isOnHold)`.
|
|
56
|
+
- `addEventListener(eventName, callback)`.
|
|
57
|
+
- `getInitialEvents()` and `getInitialVoipEvents()`.
|
|
58
|
+
- `registerBackgroundTask(taskProvider)` / `startBackgroundTask()` / `stopBackgroundTask()` (Android).
|
|
381
59
|
|
|
382
|
-
|
|
383
|
-
- **Call not answered on tap**: Ensure `handleCallingIntent` is called in both `onCreate` and `onNewIntent` in your MainActivity
|
|
60
|
+
## Event names
|
|
384
61
|
|
|
385
|
-
|
|
62
|
+
Call events:
|
|
386
63
|
|
|
387
|
-
|
|
64
|
+
- `answerCall`
|
|
65
|
+
- `endCall`
|
|
66
|
+
- `didDisplayIncomingCall`
|
|
67
|
+
- `didToggleHoldCallAction`
|
|
68
|
+
- `didPerformSetMutedCallAction`
|
|
69
|
+
- `didChangeAudioRoute`
|
|
70
|
+
- `didReceiveStartCallAction`
|
|
71
|
+
- `didActivateAudioSession`
|
|
72
|
+
- `didDeactivateAudioSession`
|
|
388
73
|
|
|
389
|
-
|
|
74
|
+
VoIP events:
|
|
390
75
|
|
|
391
|
-
|
|
76
|
+
- `voipNotificationsRegistered`
|
|
77
|
+
- `voipNotificationReceived`
|
|
392
78
|
|
|
393
|
-
|
|
79
|
+
## Notes
|
|
394
80
|
|
|
395
|
-
|
|
81
|
+
- Import from `@stream-io/react-native-callingx`.
|
|
82
|
+
- iOS-only helpers: `registerVoipToken`, `fulfillAnswerCallAction`, `fulfillEndCallAction`.
|
|
83
|
+
- Android helpers: `canPostNotifications`, `isOngoingCallsEnabled`.
|
|
@@ -24,6 +24,7 @@ import io.getstream.rn.callingx.notifications.NotificationsConfig
|
|
|
24
24
|
import io.getstream.rn.callingx.repo.CallRepository
|
|
25
25
|
import io.getstream.rn.callingx.repo.CallRepositoryFactory
|
|
26
26
|
import io.getstream.rn.callingx.utils.SettingsStore
|
|
27
|
+
import kotlinx.coroutines.CancellationException
|
|
27
28
|
import kotlinx.coroutines.CoroutineScope
|
|
28
29
|
import kotlinx.coroutines.SupervisorJob
|
|
29
30
|
import kotlinx.coroutines.cancel
|
|
@@ -48,6 +49,8 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
48
49
|
companion object {
|
|
49
50
|
private const val TAG = "[Callingx] CallService"
|
|
50
51
|
|
|
52
|
+
internal const val DEFAULT_DISPLAY_NAME = "Unknown Caller"
|
|
53
|
+
|
|
51
54
|
internal const val EXTRA_CALL_ID = "extra_call_id"
|
|
52
55
|
internal const val EXTRA_NAME = "extra_name"
|
|
53
56
|
internal const val EXTRA_URI = "extra_uri"
|
|
@@ -104,8 +107,12 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
104
107
|
)
|
|
105
108
|
return
|
|
106
109
|
}
|
|
110
|
+
|
|
111
|
+
val createdById = data["created_by_id"]
|
|
112
|
+
val createdName = data["created_by_display_name"].orEmpty()
|
|
113
|
+
val displayName = data["call_display_name"].orEmpty()
|
|
114
|
+
val callDisplayName = displayName.ifEmpty { createdName.ifEmpty { DEFAULT_DISPLAY_NAME } }
|
|
107
115
|
|
|
108
|
-
val callName = data["created_by_display_name"].orEmpty()
|
|
109
116
|
val isVideo = data["video"] == "true"
|
|
110
117
|
|
|
111
118
|
CallRegistrationStore.trackCallRegistration(callCid, null)
|
|
@@ -114,8 +121,8 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
114
121
|
Intent(context, CallService::class.java).apply {
|
|
115
122
|
action = ACTION_INCOMING_CALL
|
|
116
123
|
putExtra(EXTRA_CALL_ID, callCid)
|
|
117
|
-
putExtra(EXTRA_URI,
|
|
118
|
-
putExtra(EXTRA_NAME,
|
|
124
|
+
putExtra(EXTRA_URI, createdById?.toUri() ?: callDisplayName.toUri())
|
|
125
|
+
putExtra(EXTRA_NAME, callDisplayName)
|
|
119
126
|
putExtra(EXTRA_IS_VIDEO, isVideo)
|
|
120
127
|
}
|
|
121
128
|
|
|
@@ -497,6 +504,12 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
497
504
|
callInfo.isVideo,
|
|
498
505
|
callInfo.displayOptions,
|
|
499
506
|
)
|
|
507
|
+
} catch (e: CancellationException) {
|
|
508
|
+
// Swallow cancellation: nothing runs after this catch, and nobody awaits this launch.
|
|
509
|
+
debugLog(
|
|
510
|
+
TAG,
|
|
511
|
+
"[service] registerCall: Registration canceled for ${callInfo.callId} during teardown"
|
|
512
|
+
)
|
|
500
513
|
} catch (e: Exception) {
|
|
501
514
|
Log.e(TAG, "[service] registerCall: Error registering call: ${e.message}")
|
|
502
515
|
|
package/android/src/main/java/io/getstream/rn/callingx/notifications/CallNotificationManager.kt
CHANGED
|
@@ -317,25 +317,19 @@ class CallNotificationManager(
|
|
|
317
317
|
if (call.isIncoming() && !call.isActive && optimisticState == OptimisticState.NONE) {
|
|
318
318
|
return NotificationCompat.CallStyle.forIncomingCall(
|
|
319
319
|
caller,
|
|
320
|
-
NotificationIntentFactory.
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
getDisconnectCauseString(DisconnectCause(DisconnectCause.REJECTED))
|
|
328
|
-
)
|
|
329
|
-
putExtra(
|
|
330
|
-
CallingxModuleImpl.EXTRA_SOURCE,
|
|
331
|
-
CallRepository.EventSource.SYS.name.lowercase()
|
|
332
|
-
)
|
|
333
|
-
},
|
|
320
|
+
NotificationIntentFactory.getPendingNotificationIntent(
|
|
321
|
+
context,
|
|
322
|
+
CallingxModuleImpl.CALL_END_ACTION,
|
|
323
|
+
call.id,
|
|
324
|
+
CallRepository.EventSource.SYS.name.lowercase(),
|
|
325
|
+
false
|
|
326
|
+
),
|
|
334
327
|
NotificationIntentFactory.getPendingNotificationIntent(
|
|
335
328
|
context,
|
|
336
329
|
CallingxModuleImpl.CALL_ANSWERED_ACTION,
|
|
337
330
|
call.id,
|
|
338
|
-
CallRepository.EventSource.SYS.name.lowercase()
|
|
331
|
+
CallRepository.EventSource.SYS.name.lowercase(),
|
|
332
|
+
true
|
|
339
333
|
)
|
|
340
334
|
)
|
|
341
335
|
}
|
package/android/src/main/java/io/getstream/rn/callingx/notifications/NotificationIntentFactory.kt
CHANGED
|
@@ -22,10 +22,11 @@ object NotificationIntentFactory {
|
|
|
22
22
|
context: Context,
|
|
23
23
|
action: String,
|
|
24
24
|
callId: String,
|
|
25
|
-
source: String
|
|
25
|
+
source: String,
|
|
26
|
+
includeLaunchActivity: Boolean
|
|
26
27
|
): PendingIntent {
|
|
27
28
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
|
28
|
-
getReceiverActivityIntent(context, action, callId, source)
|
|
29
|
+
getReceiverActivityIntent(context, action, callId, source, includeLaunchActivity)
|
|
29
30
|
} else {
|
|
30
31
|
getPendingServiceIntent(context, action, callId, source)
|
|
31
32
|
}
|
|
@@ -47,7 +48,7 @@ object NotificationIntentFactory {
|
|
|
47
48
|
)
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
fun getReceiverActivityIntent(context: Context, action: String, callId: String, source: String): PendingIntent {
|
|
51
|
+
fun getReceiverActivityIntent(context: Context, action: String, callId: String, source: String, includeLaunchActivity: Boolean): PendingIntent {
|
|
51
52
|
val receiverIntent =
|
|
52
53
|
Intent(context, NotificationReceiverActivity::class.java).apply {
|
|
53
54
|
this.action = action
|
|
@@ -57,14 +58,25 @@ object NotificationIntentFactory {
|
|
|
57
58
|
|
|
58
59
|
val launchActivity = context.packageManager.getLaunchIntentForPackage(context.packageName)
|
|
59
60
|
val launchActivityIntent =
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
launchActivity?.let { base ->
|
|
62
|
+
Intent(base).apply {
|
|
63
|
+
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// intents are started in order and build a synthetic back stack
|
|
68
|
+
// the last intent is the one on top, so the launch activity should come first
|
|
69
|
+
val intents =
|
|
70
|
+
if (includeLaunchActivity && launchActivityIntent != null) {
|
|
71
|
+
arrayOf(launchActivityIntent, receiverIntent)
|
|
72
|
+
} else {
|
|
73
|
+
arrayOf(receiverIntent)
|
|
62
74
|
}
|
|
63
75
|
|
|
64
76
|
return PendingIntent.getActivities(
|
|
65
77
|
context,
|
|
66
78
|
requestCodeFor(callId, REQUEST_CODE_RECEIVER_ACTIVITY),
|
|
67
|
-
|
|
79
|
+
intents,
|
|
68
80
|
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
|
|
69
81
|
)
|
|
70
82
|
}
|
package/android/src/main/java/io/getstream/rn/callingx/notifications/NotificationReceiverActivity.kt
CHANGED
|
@@ -3,8 +3,10 @@ package io.getstream.rn.callingx.notifications
|
|
|
3
3
|
import android.app.Activity
|
|
4
4
|
import android.content.Intent
|
|
5
5
|
import android.os.Bundle
|
|
6
|
+
import android.telecom.DisconnectCause
|
|
6
7
|
import io.getstream.rn.callingx.CallingxModuleImpl
|
|
7
8
|
import io.getstream.rn.callingx.debugLog
|
|
9
|
+
import io.getstream.rn.callingx.getDisconnectCauseString
|
|
8
10
|
|
|
9
11
|
// For Android 12+
|
|
10
12
|
class NotificationReceiverActivity : Activity() {
|
|
@@ -21,33 +23,54 @@ class NotificationReceiverActivity : Activity() {
|
|
|
21
23
|
finish()
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
//re-send intent from notification to the turbo module
|
|
25
26
|
private fun handleIntent(intent: Intent?) {
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
val nonNullIntent = intent ?: return
|
|
28
|
+
val action = nonNullIntent.action ?: return
|
|
29
|
+
|
|
30
|
+
when (action) {
|
|
31
|
+
CallingxModuleImpl.CALL_ANSWERED_ACTION -> onCallAnswered(nonNullIntent)
|
|
32
|
+
CallingxModuleImpl.CALL_END_ACTION -> onCallEnded(nonNullIntent)
|
|
28
33
|
}
|
|
34
|
+
}
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (callId != null) {
|
|
36
|
-
Intent(CallingxModuleImpl.CALL_OPTIMISTIC_ACCEPT_ACTION)
|
|
37
|
-
.apply {
|
|
38
|
-
setPackage(packageName)
|
|
39
|
-
putExtra(CallingxModuleImpl.EXTRA_CALL_ID, callId)
|
|
40
|
-
}
|
|
41
|
-
.also { sendBroadcast(it) }
|
|
42
|
-
}
|
|
36
|
+
private fun onCallAnswered(intent: Intent) {
|
|
37
|
+
debugLog("[Callingx] NotificationReceiverActivity", "[receiver] answered call action")
|
|
38
|
+
val callId = intent.getStringExtra(CallingxModuleImpl.EXTRA_CALL_ID)
|
|
39
|
+
val source = intent.getStringExtra(CallingxModuleImpl.EXTRA_SOURCE)
|
|
43
40
|
|
|
44
|
-
|
|
41
|
+
if (callId != null) {
|
|
42
|
+
Intent(CallingxModuleImpl.CALL_OPTIMISTIC_ACCEPT_ACTION)
|
|
45
43
|
.apply {
|
|
46
44
|
setPackage(packageName)
|
|
47
45
|
putExtra(CallingxModuleImpl.EXTRA_CALL_ID, callId)
|
|
48
|
-
putExtra(CallingxModuleImpl.EXTRA_SOURCE, source)
|
|
49
46
|
}
|
|
50
47
|
.also { sendBroadcast(it) }
|
|
51
48
|
}
|
|
49
|
+
|
|
50
|
+
Intent(CallingxModuleImpl.CALL_ANSWERED_ACTION)
|
|
51
|
+
.apply {
|
|
52
|
+
setPackage(packageName)
|
|
53
|
+
putExtra(CallingxModuleImpl.EXTRA_CALL_ID, callId)
|
|
54
|
+
putExtra(CallingxModuleImpl.EXTRA_SOURCE, source)
|
|
55
|
+
}
|
|
56
|
+
.also { sendBroadcast(it) }
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private fun onCallEnded(intent: Intent) {
|
|
60
|
+
debugLog("[Callingx] NotificationReceiverActivity", "[receiver] rejected call action")
|
|
61
|
+
val callId = intent.getStringExtra(CallingxModuleImpl.EXTRA_CALL_ID)
|
|
62
|
+
val source = intent.getStringExtra(CallingxModuleImpl.EXTRA_SOURCE)
|
|
63
|
+
|
|
64
|
+
Intent(CallingxModuleImpl.CALL_END_ACTION)
|
|
65
|
+
.apply {
|
|
66
|
+
setPackage(packageName)
|
|
67
|
+
putExtra(CallingxModuleImpl.EXTRA_CALL_ID, callId)
|
|
68
|
+
putExtra(CallingxModuleImpl.EXTRA_SOURCE, source)
|
|
69
|
+
putExtra(
|
|
70
|
+
CallingxModuleImpl.EXTRA_DISCONNECT_CAUSE,
|
|
71
|
+
getDisconnectCauseString(DisconnectCause(DisconnectCause.REJECTED))
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
.also { sendBroadcast(it) }
|
|
52
75
|
}
|
|
53
76
|
}
|
package/android/src/main/java/io/getstream/rn/callingx/notifications/NotificationReceiverService.kt
CHANGED
|
@@ -3,8 +3,10 @@ package io.getstream.rn.callingx.notifications
|
|
|
3
3
|
import android.app.Service
|
|
4
4
|
import android.content.Intent
|
|
5
5
|
import android.os.IBinder
|
|
6
|
+
import android.telecom.DisconnectCause
|
|
6
7
|
import android.util.Log
|
|
7
8
|
import io.getstream.rn.callingx.CallingxModuleImpl
|
|
9
|
+
import io.getstream.rn.callingx.getDisconnectCauseString
|
|
8
10
|
|
|
9
11
|
class NotificationReceiverService : Service() {
|
|
10
12
|
|
|
@@ -23,6 +25,7 @@ class NotificationReceiverService : Service() {
|
|
|
23
25
|
|
|
24
26
|
when (action) {
|
|
25
27
|
CallingxModuleImpl.CALL_ANSWERED_ACTION -> onCallAnswered(intent)
|
|
28
|
+
CallingxModuleImpl.CALL_END_ACTION -> onCallEnded(intent)
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
stopSelf(startId)
|
|
@@ -60,4 +63,25 @@ class NotificationReceiverService : Service() {
|
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
}
|
|
66
|
+
|
|
67
|
+
/** Mirrors [NotificationReceiverActivity] on API levels below 33 where the service receives notification actions. */
|
|
68
|
+
private fun onCallEnded(intent: Intent) {
|
|
69
|
+
val callId = intent.getStringExtra(CallingxModuleImpl.EXTRA_CALL_ID)
|
|
70
|
+
val source = intent.getStringExtra(CallingxModuleImpl.EXTRA_SOURCE)
|
|
71
|
+
try {
|
|
72
|
+
Intent(CallingxModuleImpl.CALL_END_ACTION)
|
|
73
|
+
.apply {
|
|
74
|
+
setPackage(packageName)
|
|
75
|
+
putExtra(CallingxModuleImpl.EXTRA_CALL_ID, callId)
|
|
76
|
+
putExtra(CallingxModuleImpl.EXTRA_SOURCE, source)
|
|
77
|
+
putExtra(
|
|
78
|
+
CallingxModuleImpl.EXTRA_DISCONNECT_CAUSE,
|
|
79
|
+
getDisconnectCauseString(DisconnectCause(DisconnectCause.REJECTED))
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
.also { sendBroadcast(it) }
|
|
83
|
+
} catch (e: Exception) {
|
|
84
|
+
Log.e(TAG, "Error sending call end intent", e)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
63
87
|
}
|
|
@@ -14,6 +14,7 @@ import androidx.core.telecom.CallsManager
|
|
|
14
14
|
import io.getstream.rn.callingx.debugLog
|
|
15
15
|
import io.getstream.rn.callingx.model.Call
|
|
16
16
|
import io.getstream.rn.callingx.model.CallAction
|
|
17
|
+
import kotlinx.coroutines.CancellationException
|
|
17
18
|
import kotlinx.coroutines.Job
|
|
18
19
|
import kotlinx.coroutines.cancel
|
|
19
20
|
import kotlinx.coroutines.channels.Channel
|
|
@@ -213,6 +214,12 @@ class TelecomCallRepository(context: Context) : CallRepository(context) {
|
|
|
213
214
|
TAG,
|
|
214
215
|
"[repository] registerCall: Call $callId scope ended normally"
|
|
215
216
|
)
|
|
217
|
+
} catch (e: CancellationException) {
|
|
218
|
+
debugLog(
|
|
219
|
+
TAG,
|
|
220
|
+
"[repository] registerCall: Registration canceled for $callId during teardown"
|
|
221
|
+
)
|
|
222
|
+
throw e
|
|
216
223
|
} catch (e: Exception) {
|
|
217
224
|
Log.e(TAG, "[repository] registerCall: Error registering call $callId", e)
|
|
218
225
|
throw e
|
|
@@ -8,7 +8,10 @@ import { androidEndCallReasonMap, defaultAndroidOptions, defaultiOSOptions, iosE
|
|
|
8
8
|
import { isVoipEvent } from "./utils/utils.js";
|
|
9
9
|
class CallingxModule {
|
|
10
10
|
_isSetup = false;
|
|
11
|
-
_isOngoingCallsEnabled =
|
|
11
|
+
_isOngoingCallsEnabled = {
|
|
12
|
+
android: false,
|
|
13
|
+
ios: false
|
|
14
|
+
};
|
|
12
15
|
_isHeadlessTaskRegistered = false;
|
|
13
16
|
titleTransformer = memberName => memberName;
|
|
14
17
|
eventManager = new EventManager();
|
|
@@ -20,7 +23,7 @@ class CallingxModule {
|
|
|
20
23
|
return NativeCallingModule.canPostNotifications();
|
|
21
24
|
}
|
|
22
25
|
get isOngoingCallsEnabled() {
|
|
23
|
-
return this._isOngoingCallsEnabled;
|
|
26
|
+
return Platform.OS === 'ios' ? this._isOngoingCallsEnabled.ios : this._isOngoingCallsEnabled.android;
|
|
24
27
|
}
|
|
25
28
|
get isSetup() {
|
|
26
29
|
return this._isSetup;
|
|
@@ -29,7 +32,10 @@ class CallingxModule {
|
|
|
29
32
|
if (this._isSetup) {
|
|
30
33
|
return;
|
|
31
34
|
}
|
|
32
|
-
this._isOngoingCallsEnabled =
|
|
35
|
+
this._isOngoingCallsEnabled = {
|
|
36
|
+
android: options.android?.enableOngoingCalls ?? false,
|
|
37
|
+
ios: options.ios?.enableOngoingCalls ?? false
|
|
38
|
+
};
|
|
33
39
|
this.setShouldRejectCallWhenBusy(options.shouldRejectCallWhenBusy ?? false);
|
|
34
40
|
if (Platform.OS === 'ios') {
|
|
35
41
|
NativeCallingModule.setupiOS({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","NativeCallingModule","HEADLESS_TASK_NAME","registerHeadlessTask","setHeadlessTask","EventManager","androidEndCallReasonMap","defaultAndroidOptions","defaultiOSOptions","iosEndCallReasonMap","isVoipEvent","CallingxModule","_isSetup","_isOngoingCallsEnabled","_isHeadlessTaskRegistered","titleTransformer","memberName","eventManager","voipEventManager","canPostNotifications","OS","isOngoingCallsEnabled","isSetup","setup","options","enableOngoingCalls","setShouldRejectCallWhenBusy","shouldRejectCallWhenBusy","setupiOS","
|
|
1
|
+
{"version":3,"names":["Platform","NativeCallingModule","HEADLESS_TASK_NAME","registerHeadlessTask","setHeadlessTask","EventManager","androidEndCallReasonMap","defaultAndroidOptions","defaultiOSOptions","iosEndCallReasonMap","isVoipEvent","CallingxModule","_isSetup","_isOngoingCallsEnabled","android","ios","_isHeadlessTaskRegistered","titleTransformer","memberName","eventManager","voipEventManager","canPostNotifications","OS","isOngoingCallsEnabled","isSetup","setup","options","enableOngoingCalls","setShouldRejectCallWhenBusy","shouldRejectCallWhenBusy","setupiOS","incomingChannel","ongoingChannel","notificationTexts","notificationsConfig","id","Error","setupAndroid","shouldReject","getInitialEvents","getInitialVoipEvents","setCurrentCallActive","callId","displayIncomingCall","phoneNumber","callerName","hasVideo","displayOptions","displayTitle","answerIncomingCall","startCall","updateDisplay","incoming","endCallWithReason","reason","reasons","endCall","isCallTracked","hasRegisteredCall","setMutedCall","isMuted","setOnHoldCall","isOnHold","registerBackgroundTask","taskProvider","stopTask","stopBackgroundTask","taskData","registerBackgroundTaskAvailable","startBackgroundTask","fulfillAnswerCallAction","didFail","fulfillEndCallAction","registerVoipToken","stopService","addEventListener","eventName","callback","manager","addListener","remove","removeListener","log","message","level","module"],"sourceRoot":"../../src","sources":["CallingxModule.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,7 +8,9 @@ export const defaultiOSOptions = {
|
|
|
8
8
|
sound: '',
|
|
9
9
|
imageName: '',
|
|
10
10
|
callsHistory: false,
|
|
11
|
-
displayCallTimeout: 60000
|
|
11
|
+
displayCallTimeout: 60000,
|
|
12
|
+
// 1 minute
|
|
13
|
+
enableOngoingCalls: false
|
|
12
14
|
};
|
|
13
15
|
export const defaultAndroidOptions = {
|
|
14
16
|
incomingChannel: {
|
|
@@ -20,7 +22,8 @@ export const defaultAndroidOptions = {
|
|
|
20
22
|
ongoingChannel: {
|
|
21
23
|
id: 'stream_ongoing_calls_channel',
|
|
22
24
|
name: 'Ongoing calls'
|
|
23
|
-
}
|
|
25
|
+
},
|
|
26
|
+
enableOngoingCalls: false
|
|
24
27
|
};
|
|
25
28
|
|
|
26
29
|
// iOS: maps to CXCallEndedReason raw values.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defaultiOSOptions","supportsVideo","maximumCallsPerCallGroup","maximumCallGroups","handleType","sound","imageName","callsHistory","displayCallTimeout","defaultAndroidOptions","incomingChannel","id","name","vibration","ongoingChannel","iosEndCallReasonMap","local","remote","rejected","busy","answeredElsewhere","missed","error","canceled","restricted","unknown","androidEndCallReasonMap"],"sourceRoot":"../../../src","sources":["utils/constants.ts"],"mappings":";;AAOA,OAAO,MAAMA,iBAA+C,GAAG;EAC7DC,aAAa,EAAE,IAAI;EACnBC,wBAAwB,EAAE,CAAC;EAC3BC,iBAAiB,EAAE,CAAC;EACpBC,UAAU,EAAE,SAAS;EACrBC,KAAK,EAAE,EAAE;EACTC,SAAS,EAAE,EAAE;EACbC,YAAY,EAAE,KAAK;EACnBC,kBAAkB,EAAE,KAAK,
|
|
1
|
+
{"version":3,"names":["defaultiOSOptions","supportsVideo","maximumCallsPerCallGroup","maximumCallGroups","handleType","sound","imageName","callsHistory","displayCallTimeout","enableOngoingCalls","defaultAndroidOptions","incomingChannel","id","name","vibration","ongoingChannel","iosEndCallReasonMap","local","remote","rejected","busy","answeredElsewhere","missed","error","canceled","restricted","unknown","androidEndCallReasonMap"],"sourceRoot":"../../../src","sources":["utils/constants.ts"],"mappings":";;AAOA,OAAO,MAAMA,iBAA+C,GAAG;EAC7DC,aAAa,EAAE,IAAI;EACnBC,wBAAwB,EAAE,CAAC;EAC3BC,iBAAiB,EAAE,CAAC;EACpBC,UAAU,EAAE,SAAS;EACrBC,KAAK,EAAE,EAAE;EACTC,SAAS,EAAE,EAAE;EACbC,YAAY,EAAE,KAAK;EACnBC,kBAAkB,EAAE,KAAK;EAAE;EAC3BC,kBAAkB,EAAE;AACtB,CAAC;AAED,OAAO,MAAMC,qBAGZ,GAAG;EACFC,eAAe,EAAE;IACfC,EAAE,EAAE,+BAA+B;IACnCC,IAAI,EAAE,gBAAgB;IACtBR,KAAK,EAAE,EAAE;IACTS,SAAS,EAAE;EACb,CAAC;EACDC,cAAc,EAAE;IACdH,EAAE,EAAE,8BAA8B;IAClCC,IAAI,EAAE;EACR,CAAC;EACDJ,kBAAkB,EAAE;AACtB,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMO,mBAAkD,GAAG;EAChEC,KAAK,EAAE,CAAC,CAAC;EAAE;EACXC,MAAM,EAAE,CAAC;EAAE;EACXC,QAAQ,EAAE,CAAC;EAAE;EACbC,IAAI,EAAE,CAAC;EAAE;EACTC,iBAAiB,EAAE,CAAC;EAAE;EACtBC,MAAM,EAAE,CAAC;EAAE;EACXC,KAAK,EAAE,CAAC;EAAE;EACVC,QAAQ,EAAE,CAAC;EAAE;EACbC,UAAU,EAAE,CAAC;EAAE;EACfC,OAAO,EAAE,CAAC,CAAE;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,uBAAsD,GAAG;EACpEV,KAAK,EAAE,CAAC;EAAE;EACVC,MAAM,EAAE,CAAC;EAAE;EACXC,QAAQ,EAAE,CAAC;EAAE;EACbC,IAAI,EAAE,CAAC;EAAE;EACTC,iBAAiB,EAAE,CAAC;EAAE;EACtBC,MAAM,EAAE,CAAC;EAAE;EACXC,KAAK,EAAE,CAAC;EAAE;EACVC,QAAQ,EAAE,CAAC;EAAE;EACbC,UAAU,EAAE,CAAC;EAAE;EACfC,OAAO,EAAE,CAAC,CAAE;AACd,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallingxModule.d.ts","sourceRoot":"","sources":["../../../src/CallingxModule.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AASjB,cAAM,cAAe,YAAW,eAAe;IAC7C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"CallingxModule.d.ts","sourceRoot":"","sources":["../../../src/CallingxModule.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AASjB,cAAM,cAAe,YAAW,eAAe;IAC7C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,sBAAsB,CAG5B;IACF,OAAO,CAAC,yBAAyB,CAAS;IAE1C,OAAO,CAAC,gBAAgB,CACa;IAErC,OAAO,CAAC,YAAY,CACC;IACrB,OAAO,CAAC,gBAAgB,CACH;IAErB,IAAI,oBAAoB,IAAI,OAAO,CAMlC;IAED,IAAI,qBAAqB,IAAI,OAAO,CAInC;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAqDvC,2BAA2B,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;IAIxD,gBAAgB,IAAI,SAAS,EAAE;IAI/B,oBAAoB,IAAI,aAAa,EAAE;IAKvC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,mBAAmB,CACjB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC;IAahB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,SAAS,CACP,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC;IAahB,aAAa,CACX,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC;IAYhB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC,iBAAiB,IAAI,OAAO;IAI5B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/D,sBAAsB,CAAC,YAAY,EAAE,aAAa,GAAG,IAAI;IAYnD,mBAAmB,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBtE,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAI/D,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAI5D,iBAAiB,IAAI,IAAI;IAIzB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,gBAAgB,CAAC,CAAC,SAAS,SAAS,GAAG,aAAa,EAClD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,aAAa,CACrB,CAAC,SAAS,SAAS,GACf,WAAW,CAAC,CAAC,CAAC,GACd,CAAC,SAAS,aAAa,GACrB,eAAe,CAAC,CAAC,CAAC,GAClB,KAAK,CACZ,GACA;QAAE,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IAgBzB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;CAGvE;AAED,QAAA,MAAM,MAAM,gBAAuB,CAAC;AACpC,eAAe,MAAM,CAAC"}
|
|
@@ -145,6 +145,11 @@ export type InternalIOSOptions = {
|
|
|
145
145
|
* @default 60000 (1 minute)
|
|
146
146
|
*/
|
|
147
147
|
displayCallTimeout?: number;
|
|
148
|
+
/**
|
|
149
|
+
* Whether to enable ongoing calls.
|
|
150
|
+
* @default false
|
|
151
|
+
*/
|
|
152
|
+
enableOngoingCalls?: boolean;
|
|
148
153
|
};
|
|
149
154
|
type iOSOptions = Omit<InternalIOSOptions, 'maximumCallsPerCallGroup' | 'maximumCallGroups' | 'handleType'>;
|
|
150
155
|
export type InternalAndroidOptions = {
|
|
@@ -182,6 +187,11 @@ export type InternalAndroidOptions = {
|
|
|
182
187
|
*/
|
|
183
188
|
rejecting?: string;
|
|
184
189
|
};
|
|
190
|
+
/**
|
|
191
|
+
* Whether to enable ongoing calls.
|
|
192
|
+
* @default false
|
|
193
|
+
*/
|
|
194
|
+
enableOngoingCalls?: boolean;
|
|
185
195
|
};
|
|
186
196
|
type AndroidOptions = InternalAndroidOptions & NotificationTransformers;
|
|
187
197
|
export type NotificationTransformers = {
|
|
@@ -190,11 +200,6 @@ export type NotificationTransformers = {
|
|
|
190
200
|
export type CallingExpOptions = {
|
|
191
201
|
ios?: iOSOptions;
|
|
192
202
|
android?: AndroidOptions;
|
|
193
|
-
/**
|
|
194
|
-
* Whether to enable ongoing calls.
|
|
195
|
-
* @default false
|
|
196
|
-
*/
|
|
197
|
-
enableOngoingCalls?: boolean;
|
|
198
203
|
/**
|
|
199
204
|
* Whether to reject calls when the user is busy.
|
|
200
205
|
* @default false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,kBAAkB,CAU1D,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,IAAI,CACtC,YAAY,CAAC,sBAAsB,CAAC,EACpC,mBAAmB,CAapB,CAAC;AAKF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAW7D,CAAC;AAeF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAWjE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/react-native-callingx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "CallKit and Telecom API capabilities for React Native",
|
|
5
5
|
"main": "./dist/module/index.js",
|
|
6
6
|
"module": "./dist/module/index.js",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@react-native-community/cli": "20.0.1",
|
|
63
63
|
"@react-native/babel-preset": "^0.81.5",
|
|
64
|
-
"@stream-io/react-native-webrtc": "137.
|
|
64
|
+
"@stream-io/react-native-webrtc": "137.2.0",
|
|
65
65
|
"@types/react": "^19.1.0",
|
|
66
66
|
"del-cli": "^6.0.0",
|
|
67
67
|
"react": "19.1.0",
|
package/src/CallingxModule.ts
CHANGED
|
@@ -30,7 +30,10 @@ import { isVoipEvent } from './utils/utils';
|
|
|
30
30
|
|
|
31
31
|
class CallingxModule implements ICallingxModule {
|
|
32
32
|
private _isSetup = false;
|
|
33
|
-
private _isOngoingCallsEnabled =
|
|
33
|
+
private _isOngoingCallsEnabled = {
|
|
34
|
+
android: false,
|
|
35
|
+
ios: false,
|
|
36
|
+
};
|
|
34
37
|
private _isHeadlessTaskRegistered = false;
|
|
35
38
|
|
|
36
39
|
private titleTransformer: (memberName: string, incoming: boolean) => string =
|
|
@@ -50,7 +53,9 @@ class CallingxModule implements ICallingxModule {
|
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
get isOngoingCallsEnabled(): boolean {
|
|
53
|
-
return
|
|
56
|
+
return Platform.OS === 'ios'
|
|
57
|
+
? this._isOngoingCallsEnabled.ios
|
|
58
|
+
: this._isOngoingCallsEnabled.android;
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
get isSetup(): boolean {
|
|
@@ -62,7 +67,10 @@ class CallingxModule implements ICallingxModule {
|
|
|
62
67
|
return;
|
|
63
68
|
}
|
|
64
69
|
|
|
65
|
-
this._isOngoingCallsEnabled =
|
|
70
|
+
this._isOngoingCallsEnabled = {
|
|
71
|
+
android: options.android?.enableOngoingCalls ?? false,
|
|
72
|
+
ios: options.ios?.enableOngoingCalls ?? false,
|
|
73
|
+
};
|
|
66
74
|
this.setShouldRejectCallWhenBusy(options.shouldRejectCallWhenBusy ?? false);
|
|
67
75
|
|
|
68
76
|
if (Platform.OS === 'ios') {
|
package/src/types.ts
CHANGED
|
@@ -189,6 +189,11 @@ export type InternalIOSOptions = {
|
|
|
189
189
|
* @default 60000 (1 minute)
|
|
190
190
|
*/
|
|
191
191
|
displayCallTimeout?: number;
|
|
192
|
+
/**
|
|
193
|
+
* Whether to enable ongoing calls.
|
|
194
|
+
* @default false
|
|
195
|
+
*/
|
|
196
|
+
enableOngoingCalls?: boolean;
|
|
192
197
|
};
|
|
193
198
|
type iOSOptions = Omit<
|
|
194
199
|
InternalIOSOptions,
|
|
@@ -230,6 +235,11 @@ export type InternalAndroidOptions = {
|
|
|
230
235
|
*/
|
|
231
236
|
rejecting?: string;
|
|
232
237
|
};
|
|
238
|
+
/**
|
|
239
|
+
* Whether to enable ongoing calls.
|
|
240
|
+
* @default false
|
|
241
|
+
*/
|
|
242
|
+
enableOngoingCalls?: boolean;
|
|
233
243
|
};
|
|
234
244
|
type AndroidOptions = InternalAndroidOptions & NotificationTransformers;
|
|
235
245
|
|
|
@@ -240,11 +250,6 @@ export type NotificationTransformers = {
|
|
|
240
250
|
export type CallingExpOptions = {
|
|
241
251
|
ios?: iOSOptions;
|
|
242
252
|
android?: AndroidOptions;
|
|
243
|
-
/**
|
|
244
|
-
* Whether to enable ongoing calls.
|
|
245
|
-
* @default false
|
|
246
|
-
*/
|
|
247
|
-
enableOngoingCalls?: boolean;
|
|
248
253
|
/**
|
|
249
254
|
* Whether to reject calls when the user is busy.
|
|
250
255
|
* @default false
|
package/src/utils/constants.ts
CHANGED
|
@@ -14,6 +14,7 @@ export const defaultiOSOptions: Required<InternalIOSOptions> = {
|
|
|
14
14
|
imageName: '',
|
|
15
15
|
callsHistory: false,
|
|
16
16
|
displayCallTimeout: 60000, // 1 minute
|
|
17
|
+
enableOngoingCalls: false,
|
|
17
18
|
};
|
|
18
19
|
|
|
19
20
|
export const defaultAndroidOptions: Omit<
|
|
@@ -30,6 +31,7 @@ export const defaultAndroidOptions: Omit<
|
|
|
30
31
|
id: 'stream_ongoing_calls_channel',
|
|
31
32
|
name: 'Ongoing calls',
|
|
32
33
|
},
|
|
34
|
+
enableOngoingCalls: false,
|
|
33
35
|
};
|
|
34
36
|
|
|
35
37
|
// iOS: maps to CXCallEndedReason raw values.
|