Skip to content

Commit 2188f77

Browse files
committed
feat(voip): remove dead DDP accept/reject methods from VoipNotification
1 parent 1f27a7b commit 2188f77

File tree

1 file changed

+11
-143
lines changed

1 file changed

+11
-143
lines changed

android/app/src/main/java/chat/rocket/reactnative/voip/VoipNotification.kt

Lines changed: 11 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,6 @@ class VoipNotification(private val context: Context) {
7070
private const val CALLKEEP_CONNECTION_SERVICE_CLASS = "io.wazo.callkeep.VoiceConnectionService"
7171
private const val DISCONNECT_REASON_MISSED = 6
7272

73-
private data class VoipMediaCallIdentity(val userId: String, val deviceId: String)
74-
7573
/** Keep in sync with MediaSessionStore features (audio-only today). */
7674
private val SUPPORTED_VOIP_FEATURES = JSONArray().apply { put("audio") }
7775
private val timeoutHandler = Handler(Looper.getMainLooper())
@@ -253,7 +251,7 @@ class VoipNotification(private val context: Context) {
253251
answerIncomingCall(payload.callId)
254252
VoipModule.storeInitialEvents(payload)
255253
} else {
256-
Log.d(TAG, "Native accept did not succeed over DDP for ${payload.callId}; opening app for JS recovery")
254+
Log.d(TAG, "Native accept did not succeed for ${payload.callId}; opening app for JS recovery")
257255
disconnectIncomingCall(payload.callId, false)
258256
VoipModule.storeAcceptFailureForJs(payload)
259257
}
@@ -345,146 +343,6 @@ class VoipNotification(private val context: Context) {
345343
}
346344
}
347345

348-
private fun sendRejectSignal(context: Context, payload: VoipPayload) {
349-
val client = ddpRegistry.clientFor(payload.callId)
350-
if (client == null) {
351-
Log.d(TAG, "Native DDP client unavailable, cannot send reject for ${payload.callId}")
352-
return
353-
}
354-
355-
val params = buildRejectSignalParams(context, payload) ?: return
356-
357-
client.callMethod("stream-notify-user", params) { success ->
358-
Log.d(TAG, "Native reject signal result for ${payload.callId}: $success")
359-
ddpRegistry.stopClient(payload.callId)
360-
}
361-
}
362-
363-
private fun queueRejectSignal(context: Context, payload: VoipPayload) {
364-
val client = ddpRegistry.clientFor(payload.callId)
365-
if (client == null) {
366-
Log.d(TAG, "Native DDP client unavailable, cannot queue reject for ${payload.callId}")
367-
return
368-
}
369-
370-
val params = buildRejectSignalParams(context, payload) ?: return
371-
372-
client.queueMethodCall("stream-notify-user", params) { success ->
373-
Log.d(TAG, "Queued native reject signal result for ${payload.callId}: $success")
374-
ddpRegistry.stopClient(payload.callId)
375-
}
376-
Log.d(TAG, "Queued native reject signal for ${payload.callId}")
377-
}
378-
379-
private fun flushPendingQueuedSignalsIfNeeded(callId: String): Boolean {
380-
val client = ddpRegistry.clientFor(callId) ?: return false
381-
if (!client.hasQueuedMethodCalls()) {
382-
return false
383-
}
384-
385-
client.flushQueuedMethodCalls()
386-
return true
387-
}
388-
389-
private fun sendAcceptSignal(
390-
context: Context,
391-
payload: VoipPayload,
392-
onComplete: (Boolean) -> Unit
393-
) {
394-
val client = ddpRegistry.clientFor(payload.callId)
395-
if (client == null) {
396-
Log.d(TAG, "Native DDP client unavailable, cannot send accept for ${payload.callId}")
397-
onComplete(false)
398-
return
399-
}
400-
401-
val params = buildAcceptSignalParams(context, payload) ?: run {
402-
onComplete(false)
403-
return
404-
}
405-
406-
client.callMethod("stream-notify-user", params) { success ->
407-
Log.d(TAG, "Native accept signal result for ${payload.callId}: $success")
408-
onComplete(success)
409-
}
410-
}
411-
412-
private fun queueAcceptSignal(
413-
context: Context,
414-
payload: VoipPayload,
415-
onComplete: (Boolean) -> Unit
416-
) {
417-
val client = ddpRegistry.clientFor(payload.callId)
418-
if (client == null) {
419-
Log.d(TAG, "Native DDP client unavailable, cannot queue accept for ${payload.callId}")
420-
onComplete(false)
421-
return
422-
}
423-
424-
val params = buildAcceptSignalParams(context, payload) ?: run {
425-
onComplete(false)
426-
return
427-
}
428-
429-
client.queueMethodCall("stream-notify-user", params) { success ->
430-
Log.d(TAG, "Queued native accept signal result for ${payload.callId}: $success")
431-
onComplete(success)
432-
}
433-
Log.d(TAG, "Queued native accept signal for ${payload.callId}")
434-
}
435-
436-
/**
437-
* Resolves user id for this host and Android [Settings.Secure.ANDROID_ID] as media-signaling contractId.
438-
* Must match JS `getUniqueIdSync()` from react-native-device-info (iOS native code uses `DeviceUID`).
439-
*/
440-
private fun resolveVoipMediaCallIdentity(context: Context, payload: VoipPayload): VoipMediaCallIdentity? {
441-
val ejson = Ejson().apply {
442-
host = payload.host
443-
}
444-
val userId = ejson.userId()
445-
if (userId.isNullOrEmpty()) {
446-
Log.d(TAG, "Missing userId, cannot build stream-notify-user params for ${payload.callId}")
447-
ddpRegistry.stopClient(payload.callId)
448-
return null
449-
}
450-
val deviceId = Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
451-
if (deviceId.isNullOrEmpty()) {
452-
Log.d(TAG, "Missing deviceId, cannot build stream-notify-user params for ${payload.callId}")
453-
ddpRegistry.stopClient(payload.callId)
454-
return null
455-
}
456-
return VoipMediaCallIdentity(userId, deviceId)
457-
}
458-
459-
private fun buildAcceptSignalParams(context: Context, payload: VoipPayload): JSONArray? {
460-
val ids = resolveVoipMediaCallIdentity(context, payload) ?: return null
461-
val signal = JSONObject().apply {
462-
put("callId", payload.callId)
463-
put("contractId", ids.deviceId)
464-
put("type", "answer")
465-
put("answer", "accept")
466-
put("supportedFeatures", SUPPORTED_VOIP_FEATURES)
467-
}
468-
return JSONArray().apply {
469-
put("${ids.userId}/media-calls")
470-
put(signal.toString())
471-
}
472-
}
473-
474-
private fun buildRejectSignalParams(context: Context, payload: VoipPayload): JSONArray? {
475-
val ids = resolveVoipMediaCallIdentity(context, payload) ?: return null
476-
val signal = JSONObject().apply {
477-
put("callId", payload.callId)
478-
put("contractId", ids.deviceId)
479-
put("type", "answer")
480-
put("answer", "reject")
481-
}
482-
return JSONArray().apply {
483-
put("${ids.userId}/media-calls")
484-
put(signal.toString())
485-
}
486-
}
487-
488346
/**
489347
* True when the user is already in a call: this app's Telecom connections (ringing, dialing,
490348
* active, hold — same idea as iOS CXCallObserver "any non-ended"), any system in-call state
@@ -534,6 +392,16 @@ class VoipNotification(private val context: Context) {
534392
return false
535393
}
536394

395+
private fun flushPendingQueuedSignalsIfNeeded(callId: String): Boolean {
396+
val client = ddpRegistry.clientFor(callId) ?: return false
397+
if (!client.hasQueuedMethodCalls()) {
398+
return false
399+
}
400+
401+
client.flushQueuedMethodCalls()
402+
return true
403+
}
404+
537405
/**
538406
* Rejects an incoming call because the user is already on another call.
539407
*

0 commit comments

Comments
 (0)