@stream-io/react-native-callingx 0.1.0-beta.3 → 0.1.0-beta.5
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/README.md +0 -1
- package/android/src/main/java/io/getstream/rn/callingx/CallService.kt +60 -21
- package/android/src/main/java/io/getstream/rn/callingx/CallingxModule.kt +146 -57
- package/android/src/main/java/io/getstream/rn/callingx/HeadlessTaskManager.kt +3 -3
- package/android/src/main/java/io/getstream/rn/callingx/repo/TelecomCallRepository.kt +3 -0
- package/dist/module/CallingxModule.js +2 -2
- package/dist/module/CallingxModule.js.map +1 -1
- package/dist/typescript/src/CallingxModule.d.ts +1 -1
- package/dist/typescript/src/CallingxModule.d.ts.map +1 -1
- package/dist/typescript/src/spec/NativeCallingx.d.ts +1 -1
- package/dist/typescript/src/spec/NativeCallingx.d.ts.map +1 -1
- package/dist/typescript/src/types.d.ts +2 -2
- package/dist/typescript/src/types.d.ts.map +1 -1
- package/ios/Callingx.mm +20 -10
- package/ios/CallingxCall.swift +105 -0
- package/ios/CallingxImpl.swift +136 -70
- package/ios/CallingxPublic.h +2 -5
- package/ios/UUIDStorage.swift +71 -26
- package/package.json +3 -3
- package/src/CallingxModule.ts +2 -2
- package/src/spec/NativeCallingx.ts +1 -1
- package/src/types.ts +2 -2
package/README.md
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
package io.getstream.rn.callingx
|
|
2
2
|
|
|
3
|
+
import android.app.Notification
|
|
3
4
|
import android.app.Service
|
|
4
5
|
import android.content.Intent
|
|
5
6
|
import android.content.pm.ServiceInfo
|
|
@@ -19,6 +20,7 @@ import kotlinx.coroutines.CoroutineScope
|
|
|
19
20
|
import kotlinx.coroutines.SupervisorJob
|
|
20
21
|
import kotlinx.coroutines.cancel
|
|
21
22
|
import kotlinx.coroutines.launch
|
|
23
|
+
import java.util.concurrent.ConcurrentHashMap
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* This service handles the app call logic (show notification, record mic, display audio, etc..). It
|
|
@@ -57,6 +59,7 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
57
59
|
internal const val ACTION_START_BACKGROUND_TASK = "start_background_task"
|
|
58
60
|
internal const val ACTION_STOP_BACKGROUND_TASK = "stop_background_task"
|
|
59
61
|
internal const val ACTION_STOP_SERVICE = "stop_service"
|
|
62
|
+
internal const val ACTION_REGISTRATION_FAILED = "registration_failed"
|
|
60
63
|
}
|
|
61
64
|
|
|
62
65
|
inner class CallServiceBinder : Binder() {
|
|
@@ -69,6 +72,7 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
69
72
|
|
|
70
73
|
private val binder = CallServiceBinder()
|
|
71
74
|
private val scope: CoroutineScope = CoroutineScope(SupervisorJob())
|
|
75
|
+
private val trackedCallIds = ConcurrentHashMap.newKeySet<String>()
|
|
72
76
|
|
|
73
77
|
private var isInForeground = false
|
|
74
78
|
|
|
@@ -98,6 +102,7 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
98
102
|
isInForeground = false
|
|
99
103
|
}
|
|
100
104
|
|
|
105
|
+
trackedCallIds.clear()
|
|
101
106
|
scope.cancel()
|
|
102
107
|
}
|
|
103
108
|
|
|
@@ -179,11 +184,11 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
179
184
|
)
|
|
180
185
|
//fallback if for some reason startForeground method is not called in onStartCommand method
|
|
181
186
|
val notification = notificationManager.createNotification(call)
|
|
182
|
-
|
|
183
|
-
isInForeground = true
|
|
187
|
+
startForegroundSafely(notification)
|
|
184
188
|
}
|
|
185
189
|
}
|
|
186
190
|
is Call.Unregistered -> {
|
|
191
|
+
trackedCallIds.remove(call.id)
|
|
187
192
|
notificationManager.updateCallNotification(call)
|
|
188
193
|
|
|
189
194
|
if (isInForeground) {
|
|
@@ -195,6 +200,7 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
195
200
|
stopSelf()
|
|
196
201
|
}
|
|
197
202
|
is Call.None -> {
|
|
203
|
+
trackedCallIds.clear()
|
|
198
204
|
notificationManager.updateCallNotification(call)
|
|
199
205
|
|
|
200
206
|
if (isInForeground) {
|
|
@@ -218,6 +224,9 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
218
224
|
cause: DisconnectCause,
|
|
219
225
|
source: CallRepository.EventSource
|
|
220
226
|
) {
|
|
227
|
+
if (callId != null) {
|
|
228
|
+
trackedCallIds.remove(callId)
|
|
229
|
+
}
|
|
221
230
|
// we're not passing the callId here to prevent infinite loops
|
|
222
231
|
// callEnd event with callId will sent only when after interaction with notification buttons
|
|
223
232
|
sendBroadcastEvent(CallingxModule.CALL_END_ACTION) {
|
|
@@ -267,9 +276,8 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
267
276
|
}
|
|
268
277
|
}
|
|
269
278
|
|
|
270
|
-
public fun
|
|
271
|
-
|
|
272
|
-
return currentCall is Call.Registered && currentCall.id == callId
|
|
279
|
+
public fun isCallTracked(callId: String): Boolean {
|
|
280
|
+
return trackedCallIds.contains(callId)
|
|
273
281
|
}
|
|
274
282
|
|
|
275
283
|
public fun hasRegisteredCall(): Boolean {
|
|
@@ -303,33 +311,35 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
303
311
|
|
|
304
312
|
private fun registerCall(intent: Intent, incoming: Boolean) {
|
|
305
313
|
debugLog(TAG, "[service] registerCall: ${if (incoming) "in" else "out"} call")
|
|
314
|
+
val callInfo = extractIntentParams(intent)
|
|
315
|
+
// Track immediately when registration flow starts, mirroring iOS semantics.
|
|
316
|
+
trackedCallIds.add(callInfo.callId)
|
|
306
317
|
|
|
307
|
-
// If we have an ongoing call
|
|
318
|
+
// If we have an ongoing call, notify the module that registration is
|
|
319
|
+
// already done (so the pending promise resolves) and skip re-registration.
|
|
308
320
|
if (callRepository.currentCall.value is Call.Registered) {
|
|
309
321
|
Log.w(TAG, "[service] registerCall: Call already registered, ignoring new call request")
|
|
322
|
+
if (incoming) {
|
|
323
|
+
sendBroadcastEvent(CallingxModule.CALL_REGISTERED_INCOMING_ACTION) {
|
|
324
|
+
putExtra(CallingxModule.EXTRA_CALL_ID, callInfo.callId)
|
|
325
|
+
}
|
|
326
|
+
} else {
|
|
327
|
+
sendBroadcastEvent(CallingxModule.CALL_REGISTERED_ACTION) {
|
|
328
|
+
putExtra(CallingxModule.EXTRA_CALL_ID, callInfo.callId)
|
|
329
|
+
}
|
|
330
|
+
}
|
|
310
331
|
return
|
|
311
332
|
}
|
|
312
|
-
|
|
313
|
-
val callInfo = extractIntentParams(intent)
|
|
314
333
|
val tempCall = callRepository.getTempCall(callInfo, incoming)
|
|
315
334
|
|
|
316
335
|
//it is better to invoke startForeground method synchronously inside onStartCommand method
|
|
317
336
|
if (!isInForeground) {
|
|
318
337
|
debugLog(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
338
|
+
TAG,
|
|
339
|
+
"[service] registerCall: Starting foreground for call: ${callInfo.callId}"
|
|
340
|
+
)
|
|
322
341
|
val notification = notificationManager.createNotification(tempCall)
|
|
323
|
-
|
|
324
|
-
startForeground(
|
|
325
|
-
CallNotificationManager.NOTIFICATION_ID,
|
|
326
|
-
notification,
|
|
327
|
-
ServiceInfo.FOREGROUND_SERVICE_TYPE_PHONE_CALL
|
|
328
|
-
)
|
|
329
|
-
} else {
|
|
330
|
-
startForeground(CallNotificationManager.NOTIFICATION_ID, notification)
|
|
331
|
-
}
|
|
332
|
-
isInForeground = true
|
|
342
|
+
startForegroundSafely(notification)
|
|
333
343
|
}
|
|
334
344
|
|
|
335
345
|
scope.launch {
|
|
@@ -344,6 +354,11 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
344
354
|
)
|
|
345
355
|
} catch (e: Exception) {
|
|
346
356
|
Log.e(TAG, "[service] registerCall: Error registering call: ${e.message}")
|
|
357
|
+
trackedCallIds.remove(callInfo.callId)
|
|
358
|
+
|
|
359
|
+
sendBroadcastEvent(CallingxModule.CALL_REGISTRATION_FAILED_ACTION) {
|
|
360
|
+
putExtra(CallingxModule.EXTRA_CALL_ID, callInfo.callId)
|
|
361
|
+
}
|
|
347
362
|
|
|
348
363
|
if (isInForeground) {
|
|
349
364
|
stopForeground(STOP_FOREGROUND_REMOVE)
|
|
@@ -357,6 +372,30 @@ class CallService : Service(), CallRepository.Listener {
|
|
|
357
372
|
}
|
|
358
373
|
}
|
|
359
374
|
|
|
375
|
+
private fun startForegroundSafely(notification: Notification) {
|
|
376
|
+
try {
|
|
377
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
378
|
+
startForeground(
|
|
379
|
+
CallNotificationManager.NOTIFICATION_ID,
|
|
380
|
+
notification,
|
|
381
|
+
ServiceInfo.FOREGROUND_SERVICE_TYPE_PHONE_CALL
|
|
382
|
+
)
|
|
383
|
+
} else {
|
|
384
|
+
startForeground(CallNotificationManager.NOTIFICATION_ID, notification)
|
|
385
|
+
}
|
|
386
|
+
isInForeground = true
|
|
387
|
+
} catch (e: Exception) {
|
|
388
|
+
// If starting the foreground service fails (for example due to background start
|
|
389
|
+
// restrictions or notification issues), we log the error but avoid crashing the
|
|
390
|
+
// process so the rest of the call flow can continue and be recovered by Telecom.
|
|
391
|
+
Log.e(
|
|
392
|
+
TAG,
|
|
393
|
+
"[service] startForegroundSafely: Failed to start foreground service: ${e.message}",
|
|
394
|
+
e
|
|
395
|
+
)
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
360
399
|
private fun updateCall(intent: Intent) {
|
|
361
400
|
val callInfo = extractIntentParams(intent)
|
|
362
401
|
callRepository.updateCall(
|
|
@@ -8,7 +8,9 @@ import android.content.IntentFilter
|
|
|
8
8
|
import android.content.ServiceConnection
|
|
9
9
|
import android.os.Build
|
|
10
10
|
import android.os.Bundle
|
|
11
|
+
import android.os.Handler
|
|
11
12
|
import android.os.IBinder
|
|
13
|
+
import android.os.Looper
|
|
12
14
|
import android.telecom.DisconnectCause
|
|
13
15
|
import android.util.Log
|
|
14
16
|
import androidx.core.content.ContextCompat
|
|
@@ -50,6 +52,7 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
50
52
|
const val CALL_MUTED_ACTION = "call_muted"
|
|
51
53
|
const val CALL_ENDPOINT_CHANGED_ACTION = "call_endpoint_changed"
|
|
52
54
|
const val CALL_END_ACTION = "call_end"
|
|
55
|
+
const val CALL_REGISTRATION_FAILED_ACTION = "call_registration_failed"
|
|
53
56
|
// Background task name
|
|
54
57
|
const val HEADLESS_TASK_NAME = "HandleCallBackgroundState"
|
|
55
58
|
const val SERVICE_READY_ACTION = "service_ready"
|
|
@@ -69,6 +72,12 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
69
72
|
private var canSendEvents = false
|
|
70
73
|
private var isHeadlessTaskRegistered = false
|
|
71
74
|
|
|
75
|
+
// Per-callId pending promises for displayIncomingCall awaiting CALL_REGISTERED_INCOMING_ACTION
|
|
76
|
+
private val pendingDisplayPromises = mutableMapOf<String, Promise>()
|
|
77
|
+
private val pendingTimeouts = mutableMapOf<String, Runnable>()
|
|
78
|
+
private val mainHandler = Handler(Looper.getMainLooper())
|
|
79
|
+
private val displayTimeoutMs = 10_000L // 10 second safety timeout
|
|
80
|
+
|
|
72
81
|
private val notificationChannelsManager = NotificationChannelsManager(reactApplicationContext)
|
|
73
82
|
private val callEventBroadcastReceiver = CallEventBroadcastReceiver()
|
|
74
83
|
private val appStateListener =
|
|
@@ -112,6 +121,13 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
112
121
|
super.invalidate()
|
|
113
122
|
debugLog(TAG, "[module] invalidate: Invalidating module")
|
|
114
123
|
|
|
124
|
+
// Clean up pending display promises to prevent leaks
|
|
125
|
+
synchronized(pendingDisplayPromises) {
|
|
126
|
+
pendingTimeouts.values.forEach { mainHandler.removeCallbacks(it) }
|
|
127
|
+
pendingTimeouts.clear()
|
|
128
|
+
pendingDisplayPromises.clear()
|
|
129
|
+
}
|
|
130
|
+
|
|
115
131
|
unbindServiceSafely()
|
|
116
132
|
|
|
117
133
|
reactApplicationContext.removeLifecycleEventListener(appStateListener)
|
|
@@ -182,16 +198,46 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
182
198
|
return
|
|
183
199
|
}
|
|
184
200
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
201
|
+
// Store the promise keyed by callId; it will be resolved when CALL_REGISTERED_INCOMING_ACTION
|
|
202
|
+
// broadcast is received, or rejected on timeout / registration failure.
|
|
203
|
+
synchronized(pendingDisplayPromises) {
|
|
204
|
+
// Cancel any existing timeout for this callId to avoid a stale
|
|
205
|
+
// runnable rejecting the new promise after it overwrites the old one.
|
|
206
|
+
pendingTimeouts.remove(callId)?.let { mainHandler.removeCallbacks(it) }
|
|
207
|
+
|
|
208
|
+
pendingDisplayPromises[callId] = promise
|
|
209
|
+
|
|
210
|
+
// Per-call timeout runnable
|
|
211
|
+
val timeoutRunnable = Runnable {
|
|
212
|
+
synchronized(pendingDisplayPromises) {
|
|
213
|
+
pendingDisplayPromises.remove(callId)?.reject(
|
|
214
|
+
"TIMEOUT",
|
|
215
|
+
"Timed out waiting for call registration: $callId"
|
|
216
|
+
)
|
|
217
|
+
pendingTimeouts.remove(callId)
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
pendingTimeouts[callId] = timeoutRunnable
|
|
221
|
+
mainHandler.postDelayed(timeoutRunnable, displayTimeoutMs)
|
|
222
|
+
}
|
|
193
223
|
|
|
194
|
-
|
|
224
|
+
try {
|
|
225
|
+
startCallService(
|
|
226
|
+
CallService.ACTION_INCOMING_CALL,
|
|
227
|
+
callId,
|
|
228
|
+
callerName,
|
|
229
|
+
phoneNumber,
|
|
230
|
+
hasVideo,
|
|
231
|
+
displayOptions
|
|
232
|
+
)
|
|
233
|
+
} catch (e: Exception) {
|
|
234
|
+
Log.e(TAG, "[module] displayIncomingCall: Failed to start foreground service: ${e.message}", e)
|
|
235
|
+
synchronized(pendingDisplayPromises) {
|
|
236
|
+
pendingTimeouts.remove(callId)?.let { mainHandler.removeCallbacks(it) }
|
|
237
|
+
pendingDisplayPromises.remove(callId)
|
|
238
|
+
}
|
|
239
|
+
promise.reject("START_FOREGROUND_SERVICE_ERROR", e.message, e)
|
|
240
|
+
}
|
|
195
241
|
}
|
|
196
242
|
|
|
197
243
|
override fun answerIncomingCall(callId: String, promise: Promise) {
|
|
@@ -221,16 +267,20 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
221
267
|
return
|
|
222
268
|
}
|
|
223
269
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
270
|
+
try {
|
|
271
|
+
startCallService(
|
|
272
|
+
CallService.ACTION_OUTGOING_CALL,
|
|
273
|
+
callId,
|
|
274
|
+
callerName,
|
|
275
|
+
phoneNumber,
|
|
276
|
+
hasVideo,
|
|
277
|
+
displayOptions
|
|
278
|
+
)
|
|
279
|
+
promise.resolve(true)
|
|
280
|
+
} catch (e: Exception) {
|
|
281
|
+
Log.e(TAG, "[module] startCall: Failed to start foreground service: ${e.message}", e)
|
|
282
|
+
promise.reject("START_FOREGROUND_SERVICE_ERROR", e.message, e)
|
|
283
|
+
}
|
|
234
284
|
}
|
|
235
285
|
|
|
236
286
|
override fun updateDisplay(
|
|
@@ -247,15 +297,20 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
247
297
|
}
|
|
248
298
|
|
|
249
299
|
// for now only display options will be updated, rest of the parameters will be ignored
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
300
|
+
try {
|
|
301
|
+
startCallService(
|
|
302
|
+
CallService.ACTION_UPDATE_CALL,
|
|
303
|
+
callId,
|
|
304
|
+
callerName,
|
|
305
|
+
phoneNumber,
|
|
306
|
+
true,
|
|
307
|
+
displayOptions,
|
|
308
|
+
)
|
|
309
|
+
promise.resolve(true)
|
|
310
|
+
} catch (e: Exception) {
|
|
311
|
+
Log.e(TAG, "[module] updateDisplay: Failed to start foreground service: ${e.message}", e)
|
|
312
|
+
promise.reject("START_FOREGROUND_SERVICE_ERROR", e.message, e)
|
|
313
|
+
}
|
|
259
314
|
}
|
|
260
315
|
|
|
261
316
|
override fun endCallWithReason(callId: String, reason: Double, promise: Promise) {
|
|
@@ -270,10 +325,10 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
270
325
|
executeServiceAction(callId, action, promise)
|
|
271
326
|
}
|
|
272
327
|
|
|
273
|
-
override fun
|
|
274
|
-
val
|
|
275
|
-
debugLog(TAG, "[module]
|
|
276
|
-
return
|
|
328
|
+
override fun isCallTracked(callId: String): Boolean {
|
|
329
|
+
val isCallTracked = callService?.isCallTracked(callId) ?: false
|
|
330
|
+
debugLog(TAG, "[module] isCallTracked: Is call tracked: $isCallTracked")
|
|
331
|
+
return isCallTracked
|
|
277
332
|
}
|
|
278
333
|
|
|
279
334
|
override fun hasRegisteredCall(): Boolean {
|
|
@@ -295,28 +350,38 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
295
350
|
}
|
|
296
351
|
|
|
297
352
|
override fun startBackgroundTask(taskName: String, timeout: Double, promise: Promise) {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
353
|
+
try {
|
|
354
|
+
Intent(reactApplicationContext, CallService::class.java)
|
|
355
|
+
.apply {
|
|
356
|
+
this.action = CallService.ACTION_START_BACKGROUND_TASK
|
|
357
|
+
putExtra(CallService.EXTRA_TASK_NAME, taskName)
|
|
358
|
+
putExtra(CallService.EXTRA_TASK_DATA, Bundle())
|
|
359
|
+
putExtra(CallService.EXTRA_TASK_TIMEOUT, timeout.toLong())
|
|
360
|
+
}
|
|
361
|
+
.also { ContextCompat.startForegroundService(reactApplicationContext, it) }
|
|
306
362
|
|
|
307
|
-
|
|
363
|
+
promise.resolve(true)
|
|
364
|
+
} catch (e: Exception) {
|
|
365
|
+
Log.e(TAG, "[module] startBackgroundTask: Failed to start foreground service: ${e.message}", e)
|
|
366
|
+
promise.reject("START_FOREGROUND_SERVICE_ERROR", e.message, e)
|
|
367
|
+
}
|
|
308
368
|
}
|
|
309
369
|
|
|
310
370
|
override fun stopBackgroundTask(taskName: String, promise: Promise) {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
371
|
+
try {
|
|
372
|
+
Intent(reactApplicationContext, CallService::class.java)
|
|
373
|
+
.apply {
|
|
374
|
+
this.action = CallService.ACTION_STOP_BACKGROUND_TASK
|
|
375
|
+
putExtra(CallService.EXTRA_TASK_NAME, taskName)
|
|
376
|
+
}
|
|
377
|
+
.also { ContextCompat.startForegroundService(reactApplicationContext, it) }
|
|
317
378
|
|
|
318
|
-
|
|
319
|
-
|
|
379
|
+
isHeadlessTaskRegistered = false
|
|
380
|
+
promise.resolve(true)
|
|
381
|
+
} catch (e: Exception) {
|
|
382
|
+
Log.e(TAG, "[module] stopBackgroundTask: Failed to start foreground service: ${e.message}", e)
|
|
383
|
+
promise.reject("START_FOREGROUND_SERVICE_ERROR", e.message, e)
|
|
384
|
+
}
|
|
320
385
|
}
|
|
321
386
|
|
|
322
387
|
override fun registerBackgroundTaskAvailable() {
|
|
@@ -371,14 +436,18 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
371
436
|
return
|
|
372
437
|
}
|
|
373
438
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
439
|
+
try {
|
|
440
|
+
Intent(reactApplicationContext, CallService::class.java)
|
|
441
|
+
.apply {
|
|
442
|
+
this.action = CallService.ACTION_START_BACKGROUND_TASK
|
|
443
|
+
putExtra(CallService.EXTRA_TASK_NAME, taskName)
|
|
444
|
+
putExtra(CallService.EXTRA_TASK_DATA, Bundle())
|
|
445
|
+
putExtra(CallService.EXTRA_TASK_TIMEOUT, timeout.toLong())
|
|
446
|
+
}
|
|
447
|
+
.also { ContextCompat.startForegroundService(reactApplicationContext, it) }
|
|
448
|
+
} catch (e: Exception) {
|
|
449
|
+
Log.e(TAG, "[module] startBackgroundTaskAutomatically: Failed to start foreground service: ${e.message}", e)
|
|
450
|
+
}
|
|
382
451
|
}
|
|
383
452
|
|
|
384
453
|
private fun executeServiceAction(callId: String, action: CallAction, promise: Promise) {
|
|
@@ -454,6 +523,7 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
454
523
|
addAction(CALL_MUTED_ACTION)
|
|
455
524
|
addAction(CALL_ENDPOINT_CHANGED_ACTION)
|
|
456
525
|
addAction(CALL_END_ACTION)
|
|
526
|
+
addAction(CALL_REGISTRATION_FAILED_ACTION)
|
|
457
527
|
addAction(SERVICE_READY_ACTION)
|
|
458
528
|
}
|
|
459
529
|
|
|
@@ -563,8 +633,27 @@ class CallingxModule(reactContext: ReactApplicationContext) : NativeCallingxSpec
|
|
|
563
633
|
sendJSEvent("didReceiveStartCallAction", params)
|
|
564
634
|
}
|
|
565
635
|
CALL_REGISTERED_INCOMING_ACTION -> {
|
|
636
|
+
// Resolve the pending displayIncomingCall promise for this callId
|
|
637
|
+
if (callId != null) {
|
|
638
|
+
synchronized(pendingDisplayPromises) {
|
|
639
|
+
pendingTimeouts.remove(callId)?.let { mainHandler.removeCallbacks(it) }
|
|
640
|
+
pendingDisplayPromises.remove(callId)?.resolve(true)
|
|
641
|
+
}
|
|
642
|
+
}
|
|
566
643
|
sendJSEvent("didDisplayIncomingCall", params)
|
|
567
644
|
}
|
|
645
|
+
CALL_REGISTRATION_FAILED_ACTION -> {
|
|
646
|
+
// Reject the pending displayIncomingCall promise for this callId
|
|
647
|
+
if (callId != null) {
|
|
648
|
+
synchronized(pendingDisplayPromises) {
|
|
649
|
+
pendingTimeouts.remove(callId)?.let { mainHandler.removeCallbacks(it) }
|
|
650
|
+
pendingDisplayPromises.remove(callId)?.reject(
|
|
651
|
+
"REGISTRATION_FAILED",
|
|
652
|
+
"Failed to register call with telecom: $callId"
|
|
653
|
+
)
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
}
|
|
568
657
|
CALL_ANSWERED_ACTION -> {
|
|
569
658
|
if (intent.hasExtra(EXTRA_SOURCE)) {
|
|
570
659
|
params.putString("source", intent.getStringExtra(EXTRA_SOURCE))
|
|
@@ -10,7 +10,7 @@ import com.facebook.react.ReactNativeHost
|
|
|
10
10
|
import com.facebook.react.bridge.Arguments
|
|
11
11
|
import com.facebook.react.bridge.ReactContext
|
|
12
12
|
import com.facebook.react.bridge.UiThreadUtil
|
|
13
|
-
import com.facebook.react.internal.featureflags.
|
|
13
|
+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
|
|
14
14
|
import com.facebook.react.jstasks.HeadlessJsTaskConfig
|
|
15
15
|
import com.facebook.react.jstasks.HeadlessJsTaskContext
|
|
16
16
|
import com.facebook.react.jstasks.HeadlessJsTaskEventListener
|
|
@@ -124,7 +124,7 @@ class HeadlessTaskManager(private val context: Context) : HeadlessJsTaskEventLis
|
|
|
124
124
|
|
|
125
125
|
protected val reactContext: ReactContext?
|
|
126
126
|
get() {
|
|
127
|
-
if (
|
|
127
|
+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
|
|
128
128
|
val reactHost =
|
|
129
129
|
checkNotNull(reactHost) { "ReactHost is not initialized in New Architecture" }
|
|
130
130
|
return reactHost.currentReactContext
|
|
@@ -135,7 +135,7 @@ class HeadlessTaskManager(private val context: Context) : HeadlessJsTaskEventLis
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
private fun createReactContextAndScheduleTask(taskConfig: HeadlessJsTaskConfig) {
|
|
138
|
-
if (
|
|
138
|
+
if (ReactNativeFeatureFlags.enableBridgelessArchitecture()) {
|
|
139
139
|
val reactHost = checkNotNull(reactHost)
|
|
140
140
|
reactHost.addReactInstanceEventListener(
|
|
141
141
|
object : ReactInstanceEventListener {
|
|
@@ -19,6 +19,7 @@ import kotlinx.coroutines.cancel
|
|
|
19
19
|
import kotlinx.coroutines.channels.Channel
|
|
20
20
|
import kotlinx.coroutines.flow.Flow
|
|
21
21
|
import kotlinx.coroutines.flow.consumeAsFlow
|
|
22
|
+
import kotlinx.coroutines.flow.drop
|
|
22
23
|
import kotlinx.coroutines.flow.launchIn
|
|
23
24
|
import kotlinx.coroutines.flow.onEach
|
|
24
25
|
import kotlinx.coroutines.flow.scan
|
|
@@ -193,9 +194,11 @@ class TelecomCallRepository(context: Context) : CallRepository(context) {
|
|
|
193
194
|
|
|
194
195
|
private fun observeCallState(): Job {
|
|
195
196
|
return currentCall
|
|
197
|
+
.drop(1)
|
|
196
198
|
.scan(Pair<Call?, Call>(null, currentCall.value)) { (_, prev), next ->
|
|
197
199
|
Pair(prev, next)
|
|
198
200
|
}
|
|
201
|
+
.drop(1)
|
|
199
202
|
.onEach { (previous, current) ->
|
|
200
203
|
when {
|
|
201
204
|
previous is Call.None && current is Call.Registered -> {
|
|
@@ -113,8 +113,8 @@ class CallingxModule {
|
|
|
113
113
|
}
|
|
114
114
|
return NativeCallingModule.endCallWithReason(callId, reasons[reason]);
|
|
115
115
|
}
|
|
116
|
-
|
|
117
|
-
return NativeCallingModule.
|
|
116
|
+
isCallTracked(callId) {
|
|
117
|
+
return NativeCallingModule.isCallTracked(callId);
|
|
118
118
|
}
|
|
119
119
|
hasRegisteredCall() {
|
|
120
120
|
return NativeCallingModule.hasRegisteredCall();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","NativeCallingModule","HEADLESS_TASK_NAME","registerHeadlessTask","setHeadlessTask","EventManager","androidEndCallReasonMap","defaultAndroidOptions","defaultiOSOptions","defaultTextTransformer","iosEndCallReasonMap","isVoipEvent","CallingxModule","_isSetup","_isOngoingCallsEnabled","_isHeadlessTaskRegistered","titleTransformer","text","subtitleTransformer","undefined","eventManager","voipEventManager","canPostNotifications","OS","isOngoingCallsEnabled","isSetup","setup","options","enableOngoingCalls","setShouldRejectCallWhenBusy","shouldRejectCallWhenBusy","setupiOS","ios","incomingChannel","ongoingChannel","android","notificationsConfig","id","Error","setupAndroid","shouldReject","getInitialEvents","getInitialVoipEvents","setCurrentCallActive","callId","displayIncomingCall","phoneNumber","callerName","hasVideo","displayOptions","displayTitle","displaySubtitle","answerIncomingCall","startCall","updateDisplay","endCallWithReason","reason","reasons","endCall","
|
|
1
|
+
{"version":3,"names":["Platform","NativeCallingModule","HEADLESS_TASK_NAME","registerHeadlessTask","setHeadlessTask","EventManager","androidEndCallReasonMap","defaultAndroidOptions","defaultiOSOptions","defaultTextTransformer","iosEndCallReasonMap","isVoipEvent","CallingxModule","_isSetup","_isOngoingCallsEnabled","_isHeadlessTaskRegistered","titleTransformer","text","subtitleTransformer","undefined","eventManager","voipEventManager","canPostNotifications","OS","isOngoingCallsEnabled","isSetup","setup","options","enableOngoingCalls","setShouldRejectCallWhenBusy","shouldRejectCallWhenBusy","setupiOS","ios","incomingChannel","ongoingChannel","android","notificationsConfig","id","Error","setupAndroid","shouldReject","getInitialEvents","getInitialVoipEvents","setCurrentCallActive","callId","displayIncomingCall","phoneNumber","callerName","hasVideo","displayOptions","displayTitle","displaySubtitle","answerIncomingCall","startCall","updateDisplay","endCallWithReason","reason","reasons","endCall","isCallTracked","hasRegisteredCall","setMutedCall","isMuted","setOnHoldCall","isOnHold","registerBackgroundTask","taskProvider","stopTask","stopBackgroundTask","taskData","registerBackgroundTaskAvailable","startBackgroundTask","isServiceStarted","registerVoipToken","addEventListener","eventName","callback","manager","addListener","remove","removeListener","log","message","level","module"],"sourceRoot":"../../src","sources":["CallingxModule.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,7 +22,7 @@ declare class CallingxModule implements ICallingxModule {
|
|
|
22
22
|
startCall(callId: string, phoneNumber: string, callerName: string, hasVideo: boolean): Promise<void>;
|
|
23
23
|
updateDisplay(callId: string, phoneNumber: string, callerName: string): Promise<void>;
|
|
24
24
|
endCallWithReason(callId: string, reason: EndCallReason): Promise<void>;
|
|
25
|
-
|
|
25
|
+
isCallTracked(callId: string): boolean;
|
|
26
26
|
hasRegisteredCall(): boolean;
|
|
27
27
|
setMutedCall(callId: string, isMuted: boolean): Promise<void>;
|
|
28
28
|
setOnHoldCall(callId: string, isOnHold: boolean): Promise<void>;
|
|
@@ -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,EAGpB,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;AAUjB,cAAM,cAAe,YAAW,eAAe;IAC7C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,yBAAyB,CAAS;IAE1C,OAAO,CAAC,gBAAgB,CAA2C;IACnE,OAAO,CAAC,mBAAmB,CAA0C;IAErE,OAAO,CAAC,YAAY,CACC;IACrB,OAAO,CAAC,gBAAgB,CACH;IAErB,IAAI,oBAAoB,IAAI,OAAO,CAMlC;IAED,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAiDvC,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;IAchB,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;IAchB,aAAa,CACX,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAahB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvE,
|
|
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,EAGpB,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;AAUjB,cAAM,cAAe,YAAW,eAAe;IAC7C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,yBAAyB,CAAS;IAE1C,OAAO,CAAC,gBAAgB,CAA2C;IACnE,OAAO,CAAC,mBAAmB,CAA0C;IAErE,OAAO,CAAC,YAAY,CACC;IACrB,OAAO,CAAC,gBAAgB,CACH;IAErB,IAAI,oBAAoB,IAAI,OAAO,CAMlC;IAED,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAiDvC,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;IAchB,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;IAchB,aAAa,CACX,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAahB,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;IA0BtE,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC,iBAAiB,IAAI,IAAI;IAIzB,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"}
|
|
@@ -77,7 +77,7 @@ export interface Spec extends TurboModule {
|
|
|
77
77
|
displayTitle?: string;
|
|
78
78
|
displaySubtitle?: string;
|
|
79
79
|
}): Promise<void>;
|
|
80
|
-
|
|
80
|
+
isCallTracked(callId: string): boolean;
|
|
81
81
|
hasRegisteredCall(): boolean;
|
|
82
82
|
endCallWithReason(callId: string, reason: number): Promise<void>;
|
|
83
83
|
endCall(callId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeCallingx.d.ts","sourceRoot":"","sources":["../../../../src/spec/NativeCallingx.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"NativeCallingx.d.ts","sourceRoot":"","sources":["../../../../src/spec/NativeCallingx.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,11 +54,11 @@ export interface ICallingxModule {
|
|
|
54
54
|
setCurrentCallActive(callId: string): Promise<void>;
|
|
55
55
|
updateDisplay(callId: string, phoneNumber: string, callerName: string): Promise<void>;
|
|
56
56
|
/**
|
|
57
|
-
* Check if the call is
|
|
57
|
+
* Check if the call is tracked in the native calling module.
|
|
58
58
|
* @param callId - The call id.
|
|
59
59
|
* @returns The boolean value.
|
|
60
60
|
*/
|
|
61
|
-
|
|
61
|
+
isCallTracked(callId: string): boolean;
|
|
62
62
|
/**
|
|
63
63
|
* Check if there is a registered call.
|
|
64
64
|
* @returns The boolean value.
|