@qusaieilouti99/call-manager 0.1.52 → 0.1.54
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/android/src/main/java/com/margelo/nitro/qusaieilouti99/callmanager/CallEngine.kt +38 -76
- package/lib/module/CallManager.nitro.js +6 -1
- package/lib/module/CallManager.nitro.js.map +1 -1
- package/lib/module/index.js +2 -3
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/CallManager.nitro.d.ts +2 -1
- package/lib/typescript/src/CallManager.nitro.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/CallManager.nitro.ts +5 -1
- package/src/index.tsx +3 -5
|
@@ -69,7 +69,6 @@ object CallEngine {
|
|
|
69
69
|
|
|
70
70
|
// System Call State Tracking
|
|
71
71
|
private var isSystemCallActive: Boolean = false
|
|
72
|
-
private var wasHeldBySystem: Boolean = false
|
|
73
72
|
|
|
74
73
|
// Lock Screen Bypass
|
|
75
74
|
private var lockScreenBypassActive = false
|
|
@@ -92,7 +91,7 @@ object CallEngine {
|
|
|
92
91
|
)
|
|
93
92
|
|
|
94
93
|
enum class CallState {
|
|
95
|
-
INCOMING, DIALING, ACTIVE, HELD,
|
|
94
|
+
INCOMING, DIALING, ACTIVE, HELD, ENDED
|
|
96
95
|
}
|
|
97
96
|
|
|
98
97
|
interface LockScreenBypassCallback {
|
|
@@ -104,26 +103,23 @@ object CallEngine {
|
|
|
104
103
|
Log.d(TAG, "Audio focus changed: $focusChange")
|
|
105
104
|
when (focusChange) {
|
|
106
105
|
AudioManager.AUDIOFOCUS_LOSS -> {
|
|
107
|
-
// Lost focus permanently - likely due to phone call
|
|
108
106
|
handleAudioFocusLoss()
|
|
109
107
|
}
|
|
110
108
|
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
|
|
111
|
-
|
|
112
|
-
handleAudioFocusLossTransient()
|
|
109
|
+
handleAudioFocusLoss()
|
|
113
110
|
}
|
|
114
111
|
AudioManager.AUDIOFOCUS_GAIN -> {
|
|
115
|
-
// Regained focus
|
|
116
112
|
handleAudioFocusGain()
|
|
117
113
|
}
|
|
118
114
|
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
|
|
119
|
-
// Can duck audio
|
|
120
|
-
|
|
115
|
+
// Can duck audio - don't hold call
|
|
116
|
+
Log.d(TAG, "Audio focus loss - can duck, not holding call")
|
|
121
117
|
}
|
|
122
118
|
}
|
|
123
119
|
}
|
|
124
120
|
|
|
125
121
|
private fun handleAudioFocusLoss() {
|
|
126
|
-
Log.d(TAG, "Audio focus lost
|
|
122
|
+
Log.d(TAG, "Audio focus lost - likely system call active")
|
|
127
123
|
hasAudioFocus = false
|
|
128
124
|
isSystemCallActive = true
|
|
129
125
|
|
|
@@ -131,17 +127,16 @@ object CallEngine {
|
|
|
131
127
|
activeCalls.values.filter { it.state == CallState.ACTIVE }.forEach { call ->
|
|
132
128
|
if (!call.wasHeldBySystem) {
|
|
133
129
|
call.wasHeldBySystem = true
|
|
134
|
-
call.state = CallState.
|
|
130
|
+
call.state = CallState.HELD
|
|
135
131
|
|
|
136
132
|
val connection = telecomConnections[call.callId]
|
|
137
133
|
connection?.setOnHold()
|
|
138
134
|
|
|
139
135
|
emitEvent(CallEventType.CALL_HELD, JSONObject().apply {
|
|
140
136
|
put("callId", call.callId)
|
|
141
|
-
put("reason", "system_call_active")
|
|
142
137
|
})
|
|
143
138
|
|
|
144
|
-
notifySpecificCallStateChanged(appContext!!, call.callId, CallState.
|
|
139
|
+
notifySpecificCallStateChanged(appContext!!, call.callId, CallState.HELD)
|
|
145
140
|
Log.d(TAG, "Call ${call.callId} held by system due to audio focus loss")
|
|
146
141
|
}
|
|
147
142
|
}
|
|
@@ -150,39 +145,29 @@ object CallEngine {
|
|
|
150
145
|
updateForegroundNotification(appContext!!)
|
|
151
146
|
}
|
|
152
147
|
|
|
153
|
-
private fun handleAudioFocusLossTransient() {
|
|
154
|
-
// Similar to permanent loss but may be temporary
|
|
155
|
-
handleAudioFocusLoss()
|
|
156
|
-
}
|
|
157
|
-
|
|
158
148
|
private fun handleAudioFocusGain() {
|
|
159
149
|
Log.d(TAG, "Audio focus regained - system call likely ended")
|
|
160
150
|
hasAudioFocus = true
|
|
161
151
|
isSystemCallActive = false
|
|
162
152
|
|
|
163
|
-
//
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
connection?.setActive()
|
|
153
|
+
// Automatically resume calls that were held by system after a short delay
|
|
154
|
+
Handler(Looper.getMainLooper()).postDelayed({
|
|
155
|
+
activeCalls.values.filter { it.state == CallState.HELD && it.wasHeldBySystem }.forEach { call ->
|
|
156
|
+
Log.d(TAG, "Auto-resuming call ${call.callId} after system call ended")
|
|
157
|
+
call.wasHeldBySystem = false
|
|
158
|
+
call.state = CallState.ACTIVE
|
|
170
159
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
put("reason", "system_call_ended")
|
|
174
|
-
})
|
|
175
|
-
|
|
176
|
-
notifySpecificCallStateChanged(appContext!!, call.callId, CallState.ACTIVE)
|
|
177
|
-
Log.d(TAG, "Call ${call.callId} resumed after system call ended")
|
|
178
|
-
}
|
|
160
|
+
val connection = telecomConnections[call.callId]
|
|
161
|
+
connection?.setActive()
|
|
179
162
|
|
|
180
|
-
|
|
181
|
-
|
|
163
|
+
emitEvent(CallEventType.CALL_UNHELD, JSONObject().apply {
|
|
164
|
+
put("callId", call.callId)
|
|
165
|
+
})
|
|
182
166
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
167
|
+
notifySpecificCallStateChanged(appContext!!, call.callId, CallState.ACTIVE)
|
|
168
|
+
}
|
|
169
|
+
updateForegroundNotification(appContext!!)
|
|
170
|
+
}, 1000) // 1 second delay to ensure system is ready
|
|
186
171
|
}
|
|
187
172
|
|
|
188
173
|
private fun requestAudioFocus(): Boolean {
|
|
@@ -311,7 +296,6 @@ object CallEngine {
|
|
|
311
296
|
obj.put("callData", it.callData)
|
|
312
297
|
obj.put("state", it.state.name)
|
|
313
298
|
obj.put("callType", it.callType)
|
|
314
|
-
obj.put("wasHeldBySystem", it.wasHeldBySystem)
|
|
315
299
|
jsonArray.put(obj)
|
|
316
300
|
}
|
|
317
301
|
val result = jsonArray.toString()
|
|
@@ -333,7 +317,7 @@ object CallEngine {
|
|
|
333
317
|
}
|
|
334
318
|
|
|
335
319
|
// Check if there's an active call when receiving incoming
|
|
336
|
-
val activeCall = activeCalls.values.find { it.state == CallState.ACTIVE || it.state == CallState.
|
|
320
|
+
val activeCall = activeCalls.values.find { it.state == CallState.ACTIVE || it.state == CallState.HELD }
|
|
337
321
|
if (activeCall != null && !canMakeMultipleCalls) {
|
|
338
322
|
Log.d(TAG, "Active call exists when receiving incoming call. Auto-rejecting: $callId")
|
|
339
323
|
rejectIncomingCallCollision(callId, "Another call is already active")
|
|
@@ -432,14 +416,13 @@ object CallEngine {
|
|
|
432
416
|
startForegroundService(context)
|
|
433
417
|
Log.d(TAG, "Successfully reported outgoing call to TelecomManager via placeCall for $callId")
|
|
434
418
|
|
|
435
|
-
// Request audio focus
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
setInitialAudioRoute(context, parsedCallType)
|
|
439
|
-
}
|
|
419
|
+
// Request audio focus and start ringback
|
|
420
|
+
requestAudioFocus()
|
|
421
|
+
startRingback()
|
|
440
422
|
|
|
441
423
|
bringAppToForeground(context)
|
|
442
424
|
keepScreenAwake(context, true)
|
|
425
|
+
setInitialAudioRoute(context, parsedCallType)
|
|
443
426
|
} catch (e: SecurityException) {
|
|
444
427
|
Log.e(TAG, "SecurityException: Failed to start outgoing call via placeCall. Check MANAGE_OWN_CALLS permission: ${e.message}", e)
|
|
445
428
|
endCall(context, callId)
|
|
@@ -478,9 +461,7 @@ object CallEngine {
|
|
|
478
461
|
cancelIncomingCallUI(context)
|
|
479
462
|
|
|
480
463
|
// Request audio focus when answering
|
|
481
|
-
|
|
482
|
-
requestAudioFocus()
|
|
483
|
-
}
|
|
464
|
+
requestAudioFocus()
|
|
484
465
|
|
|
485
466
|
// Update call state
|
|
486
467
|
activeCalls[callId]?.state = CallState.ACTIVE
|
|
@@ -538,31 +519,16 @@ object CallEngine {
|
|
|
538
519
|
fun unholdCall(context: Context, callId: String) {
|
|
539
520
|
Log.d(TAG, "unholdCall: $callId")
|
|
540
521
|
val callInfo = activeCalls[callId]
|
|
541
|
-
if (callInfo?.state != CallState.HELD
|
|
522
|
+
if (callInfo?.state != CallState.HELD) {
|
|
542
523
|
Log.w(TAG, "Cannot unhold call $callId - not in held state (current: ${callInfo?.state})")
|
|
543
524
|
return
|
|
544
525
|
}
|
|
545
526
|
|
|
546
|
-
//
|
|
547
|
-
|
|
548
|
-
Log.w(TAG, "Cannot unhold call $callId - held by system and system call still active")
|
|
549
|
-
emitEvent(CallEventType.CALL_UNHOLD_FAILED, JSONObject().apply {
|
|
550
|
-
put("callId", callId)
|
|
551
|
-
put("reason", "system_call_active")
|
|
552
|
-
})
|
|
553
|
-
return
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
// Request audio focus before unholding
|
|
527
|
+
// Try to request audio focus, but don't fail if we can't get it immediately
|
|
528
|
+
// The system will handle audio routing properly
|
|
557
529
|
if (!hasAudioFocus) {
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
emitEvent(CallEventType.CALL_UNHOLD_FAILED, JSONObject().apply {
|
|
561
|
-
put("callId", callId)
|
|
562
|
-
put("reason", "audio_focus_failed")
|
|
563
|
-
})
|
|
564
|
-
return
|
|
565
|
-
}
|
|
530
|
+
Log.d(TAG, "Attempting to request audio focus for unhold")
|
|
531
|
+
requestAudioFocus()
|
|
566
532
|
}
|
|
567
533
|
|
|
568
534
|
activeCalls[callId]?.state = CallState.ACTIVE
|
|
@@ -574,6 +540,8 @@ object CallEngine {
|
|
|
574
540
|
emitEvent(CallEventType.CALL_UNHELD, JSONObject().put("callId", callId))
|
|
575
541
|
updateLockScreenBypass()
|
|
576
542
|
notifySpecificCallStateChanged(context, callId, CallState.ACTIVE)
|
|
543
|
+
|
|
544
|
+
Log.d(TAG, "Call $callId successfully unheld")
|
|
577
545
|
}
|
|
578
546
|
|
|
579
547
|
fun muteCall(context: Context, callId: String) {
|
|
@@ -880,8 +848,7 @@ object CallEngine {
|
|
|
880
848
|
it.value.state == CallState.ACTIVE ||
|
|
881
849
|
it.value.state == CallState.INCOMING ||
|
|
882
850
|
it.value.state == CallState.DIALING ||
|
|
883
|
-
it.value.state == CallState.HELD
|
|
884
|
-
it.value.state == CallState.HELD_BY_SYSTEM
|
|
851
|
+
it.value.state == CallState.HELD
|
|
885
852
|
}
|
|
886
853
|
|
|
887
854
|
private fun validateOutgoingCallRequest(): Boolean {
|
|
@@ -1037,8 +1004,7 @@ object CallEngine {
|
|
|
1037
1004
|
// Find the current active call to pass its info
|
|
1038
1005
|
val currentCall = activeCalls.values.find {
|
|
1039
1006
|
it.state == CallState.ACTIVE || it.state == CallState.INCOMING ||
|
|
1040
|
-
it.state == CallState.DIALING || it.state == CallState.HELD
|
|
1041
|
-
it.state == CallState.HELD_BY_SYSTEM
|
|
1007
|
+
it.state == CallState.DIALING || it.state == CallState.HELD
|
|
1042
1008
|
}
|
|
1043
1009
|
|
|
1044
1010
|
val intent = Intent(context, CallForegroundService::class.java)
|
|
@@ -1203,7 +1169,6 @@ object CallEngine {
|
|
|
1203
1169
|
put("callData", callInfo.callData)
|
|
1204
1170
|
put("state", newState.name)
|
|
1205
1171
|
put("callType", callInfo.callType)
|
|
1206
|
-
put("wasHeldBySystem", callInfo.wasHeldBySystem)
|
|
1207
1172
|
}
|
|
1208
1173
|
|
|
1209
1174
|
Log.d(TAG, "Specific call state changed. Emitting CALL_STATE_CHANGED for $callId: $newState")
|
|
@@ -1213,9 +1178,8 @@ object CallEngine {
|
|
|
1213
1178
|
private fun updateForegroundNotification(context: Context) {
|
|
1214
1179
|
val activeCall = activeCalls.values.find { it.state == CallState.ACTIVE }
|
|
1215
1180
|
val heldCall = activeCalls.values.find { it.state == CallState.HELD }
|
|
1216
|
-
val heldBySystemCall = activeCalls.values.find { it.state == CallState.HELD_BY_SYSTEM }
|
|
1217
1181
|
|
|
1218
|
-
val callToShow = activeCall ?: heldCall
|
|
1182
|
+
val callToShow = activeCall ?: heldCall
|
|
1219
1183
|
callToShow?.let {
|
|
1220
1184
|
val intent = Intent(context, CallForegroundService::class.java)
|
|
1221
1185
|
intent.putExtra("UPDATE_NOTIFICATION", true)
|
|
@@ -1236,8 +1200,6 @@ object CallEngine {
|
|
|
1236
1200
|
stopForegroundService(context)
|
|
1237
1201
|
keepScreenAwake(context, false)
|
|
1238
1202
|
resetAudioMode(context)
|
|
1239
|
-
abandonAudioFocus()
|
|
1240
1203
|
isSystemCallActive = false
|
|
1241
|
-
wasHeldBySystem = false
|
|
1242
1204
|
}
|
|
1243
1205
|
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// Your CallManager.ts (or similar)
|
|
4
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
5
|
+
|
|
6
|
+
// Define the structure for audio device information
|
|
7
|
+
|
|
8
|
+
export const CallManagerHybridObject = NitroModules.createHybridObject('CallManager');
|
|
4
9
|
//# sourceMappingURL=CallManager.nitro.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"..\\..\\src","sources":["CallManager.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["NitroModules","CallManagerHybridObject","createHybridObject"],"sourceRoot":"..\\..\\src","sources":["CallManager.nitro.ts"],"mappings":";;AAAA;AACA,SAA4BA,YAAY,QAAQ,4BAA4B;;AAG5E;;AA2BA,OAAO,MAAMC,uBAAuB,GAClCD,YAAY,CAACE,kBAAkB,CAAc,aAAa,CAAC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
const CallManagerHybridObject = NitroModules.createHybridObject('CallManager');
|
|
5
|
-
|
|
3
|
+
import { CallManagerHybridObject } from "./CallManager.nitro.js";
|
|
6
4
|
// Named exports for only the allowed methods
|
|
7
5
|
export const endCall = CallManagerHybridObject.endCall;
|
|
8
6
|
export const silenceRingtone = CallManagerHybridObject.silenceRingtone;
|
|
@@ -14,4 +12,5 @@ export const callAnswered = CallManagerHybridObject.callAnswered;
|
|
|
14
12
|
|
|
15
13
|
// Event emitter: addListener returns a remove function
|
|
16
14
|
export const addCallManagerListener = listener => CallManagerHybridObject.addListener(listener);
|
|
15
|
+
export default CallManagerHybridObject;
|
|
17
16
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["CallManagerHybridObject","endCall","silenceRingtone","getAudioDevices","setAudioRoute","keepScreenAwake","startOutgoingCall","callAnswered","addCallManagerListener","listener","addListener"],"sourceRoot":"..\\..\\src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,uBAAuB,QAAQ,wBAAqB;AAG7D;AACA,OAAO,MAAMC,OAAO,GAAGD,uBAAuB,CAACC,OAAO;AACtD,OAAO,MAAMC,eAAe,GAAGF,uBAAuB,CAACE,eAAe;AAEtE,OAAO,MAAMC,eAAe,GAAGH,uBAAuB,CAACG,eAAe;AACtE,OAAO,MAAMC,aAAa,GAAGJ,uBAAuB,CAACI,aAAa;AAClE,OAAO,MAAMC,eAAe,GAAGL,uBAAuB,CAACK,eAAe;AACtE,OAAO,MAAMC,iBAAiB,GAAGN,uBAAuB,CAACM,iBAAiB;AAC1E,OAAO,MAAMC,YAAY,GAAGP,uBAAuB,CAACO,YAAY;;AAEhE;AACA,OAAO,MAAMC,sBAAsB,GACjCC,QAAyD,IAC1CT,uBAAuB,CAACU,WAAW,CAACD,QAAQ,CAAC;AAI9D,eAAeT,uBAAuB","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type HybridObject } from 'react-native-nitro-modules';
|
|
2
2
|
import type { CallEventType } from './CallEventType';
|
|
3
3
|
export interface AudioRoutesInfo {
|
|
4
4
|
devices: string[];
|
|
@@ -17,4 +17,5 @@ export interface CallManager extends HybridObject<{
|
|
|
17
17
|
keepScreenAwake(keepAwake: boolean): void;
|
|
18
18
|
addListener(listener: (event: CallEventType, payload: string) => void): () => void;
|
|
19
19
|
}
|
|
20
|
+
export declare const CallManagerHybridObject: CallManager;
|
|
20
21
|
//# sourceMappingURL=CallManager.nitro.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallManager.nitro.d.ts","sourceRoot":"","sources":["../../../src/CallManager.nitro.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"CallManager.nitro.d.ts","sourceRoot":"","sources":["../../../src/CallManager.nitro.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IAEpF,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,IAAI,IAAI,CAAC;IAExB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAGnC,eAAe,IAAI,eAAe,CAAC;IACnC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAG1C,WAAW,CAET,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GACxD,MAAM,IAAI,CAAC;CACf;AAGD,eAAO,MAAM,uBAAuB,aACyB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CallManagerHybridObject } from './CallManager.nitro';
|
|
1
2
|
import type { CallEventType } from './CallEventType';
|
|
2
3
|
export declare const endCall: (callId: string) => void;
|
|
3
4
|
export declare const silenceRingtone: () => void;
|
|
@@ -8,4 +9,5 @@ export declare const startOutgoingCall: (callId: string, callData: string) => vo
|
|
|
8
9
|
export declare const callAnswered: (callId: string) => void;
|
|
9
10
|
export declare const addCallManagerListener: (listener: (event: CallEventType, payload: string) => void) => () => void;
|
|
10
11
|
export type { CallEventType };
|
|
12
|
+
export default CallManagerHybridObject;
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,eAAO,MAAM,OAAO,0BAAkC,CAAC;AACvD,eAAO,MAAM,eAAe,YAA0C,CAAC;AAEvE,eAAO,MAAM,eAAe,qDAA0C,CAAC;AACvE,eAAO,MAAM,aAAa,yBAAwC,CAAC;AACnE,eAAO,MAAM,eAAe,8BAA0C,CAAC;AACvE,eAAO,MAAM,iBAAiB,4CAA4C,CAAC;AAC3E,eAAO,MAAM,YAAY,0BAAuC,CAAC;AAGjE,eAAO,MAAM,sBAAsB,GACjC,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,KACxD,MAAM,IAAqD,CAAC;AAE/D,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,eAAe,uBAAuB,CAAC"}
|
package/package.json
CHANGED
package/src/CallManager.nitro.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Your CallManager.ts (or similar)
|
|
2
|
-
import type
|
|
2
|
+
import { type HybridObject, NitroModules } from 'react-native-nitro-modules';
|
|
3
3
|
import type { CallEventType } from './CallEventType';
|
|
4
4
|
|
|
5
5
|
// Define the structure for audio device information
|
|
@@ -27,3 +27,7 @@ export interface CallManager extends HybridObject<{ ios: 'swift'; android: 'kotl
|
|
|
27
27
|
listener: (event: CallEventType, payload: string) => void
|
|
28
28
|
): () => void;
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
export const CallManagerHybridObject =
|
|
33
|
+
NitroModules.createHybridObject<CallManager>('CallManager');
|
package/src/index.tsx
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { CallManager } from './CallManager.nitro';
|
|
1
|
+
import { CallManagerHybridObject } from './CallManager.nitro';
|
|
3
2
|
import type { CallEventType } from './CallEventType';
|
|
4
3
|
|
|
5
|
-
const CallManagerHybridObject =
|
|
6
|
-
NitroModules.createHybridObject<CallManager>('CallManager');
|
|
7
|
-
|
|
8
4
|
// Named exports for only the allowed methods
|
|
9
5
|
export const endCall = CallManagerHybridObject.endCall;
|
|
10
6
|
export const silenceRingtone = CallManagerHybridObject.silenceRingtone;
|
|
@@ -21,3 +17,5 @@ export const addCallManagerListener = (
|
|
|
21
17
|
): () => void => CallManagerHybridObject.addListener(listener);
|
|
22
18
|
|
|
23
19
|
export type { CallEventType };
|
|
20
|
+
|
|
21
|
+
export default CallManagerHybridObject;
|