@qusaieilouti99/call-manager 0.1.26 → 0.1.27
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/qusaieilouti99/callmanager/CallEngine.kt +25 -1
- package/android/src/main/java/com/qusaieilouti99/callmanager/MyConnection.kt +1 -1
- package/lib/module/NativeCallManager.js +14 -0
- package/lib/module/NativeCallManager.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/NativeCallManager.d.ts +14 -1
- package/lib/typescript/src/NativeCallManager.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativeCallManager.ts +15 -1
- package/src/index.tsx +4 -2
|
@@ -30,6 +30,7 @@ object CallEngine {
|
|
|
30
30
|
private var ringtone: android.media.Ringtone? = null
|
|
31
31
|
private var audioManager: AudioManager? = null
|
|
32
32
|
private var wakeLock: PowerManager.WakeLock? = null
|
|
33
|
+
private var appContext: Context? = null
|
|
33
34
|
|
|
34
35
|
// --- Multi-call state ---
|
|
35
36
|
private val activeCalls = ConcurrentHashMap<String, CallInfo>() // callId -> CallInfo
|
|
@@ -78,6 +79,7 @@ object CallEngine {
|
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
fun reportIncomingCall(context: Context, callId: String, callData: String) {
|
|
82
|
+
appContext = context.applicationContext
|
|
81
83
|
Log.d(TAG, "reportIncomingCall: $callId, $callData")
|
|
82
84
|
val callerName = try {
|
|
83
85
|
val json = JSONObject(callData)
|
|
@@ -314,6 +316,7 @@ object CallEngine {
|
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
fun registerAudioDeviceCallback(context: Context) {
|
|
319
|
+
appContext = context.applicationContext
|
|
317
320
|
audioManager = audioManager ?: context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
|
318
321
|
audioManager?.registerAudioDeviceCallback(audioDeviceCallback, null)
|
|
319
322
|
}
|
|
@@ -324,7 +327,8 @@ object CallEngine {
|
|
|
324
327
|
}
|
|
325
328
|
|
|
326
329
|
fun emitAudioDevicesChanged() {
|
|
327
|
-
val
|
|
330
|
+
val context = appContext ?: return
|
|
331
|
+
val devices = getAudioDevices(context)
|
|
328
332
|
val json = JSONObject().put("devices", JSONArray(devices))
|
|
329
333
|
emitEvent(CallEventType.AUDIO_DEVICES_CHANGED, json)
|
|
330
334
|
}
|
|
@@ -385,4 +389,24 @@ object CallEngine {
|
|
|
385
389
|
PHONE_ACCOUNT_ID
|
|
386
390
|
)
|
|
387
391
|
}
|
|
392
|
+
|
|
393
|
+
fun playRingtone(context: Context) {
|
|
394
|
+
try {
|
|
395
|
+
Log.d(TAG, "Playing ringtone")
|
|
396
|
+
val uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
|
|
397
|
+
ringtone = RingtoneManager.getRingtone(context, uri)
|
|
398
|
+
ringtone?.audioAttributes = AudioAttributes.Builder()
|
|
399
|
+
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
|
|
400
|
+
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
|
401
|
+
.build()
|
|
402
|
+
ringtone?.play()
|
|
403
|
+
} catch (e: Exception) {
|
|
404
|
+
Log.e(TAG, "Failed to play ringtone: ${e.message}")
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
fun stopRingtone() {
|
|
409
|
+
try { ringtone?.stop() } catch (_: Exception) {}
|
|
410
|
+
ringtone = null
|
|
411
|
+
}
|
|
388
412
|
}
|
|
@@ -56,7 +56,7 @@ class MyConnection(
|
|
|
56
56
|
} else {
|
|
57
57
|
CallEngine.unmuteCall(context, callData)
|
|
58
58
|
}
|
|
59
|
-
//
|
|
59
|
+
// Only emit route change, not device list
|
|
60
60
|
CallEngine.emitEvent(
|
|
61
61
|
CallEventType.AUDIO_ROUTE_CHANGED,
|
|
62
62
|
org.json.JSONObject().put("route", state.route)
|
|
@@ -2,5 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
// NativeCallManager.ts
|
|
4
4
|
import { TurboModuleRegistry } from 'react-native';
|
|
5
|
+
export let CallEventType = /*#__PURE__*/function (CallEventType) {
|
|
6
|
+
CallEventType["INITIAL_CALL_STATE"] = "INITIAL_CALL_STATE";
|
|
7
|
+
CallEventType["CALL_STATE_CHANGED"] = "CALL_STATE_CHANGED";
|
|
8
|
+
CallEventType["AUDIO_DEVICES_CHANGED"] = "AUDIO_DEVICES_CHANGED";
|
|
9
|
+
CallEventType["AUDIO_ROUTE_CHANGED"] = "AUDIO_ROUTE_CHANGED";
|
|
10
|
+
CallEventType["CALL_HELD"] = "CALL_HELD";
|
|
11
|
+
CallEventType["CALL_UNHELD"] = "CALL_UNHELD";
|
|
12
|
+
CallEventType["CALL_MUTED"] = "CALL_MUTED";
|
|
13
|
+
CallEventType["CALL_UNMUTED"] = "CALL_UNMUTED";
|
|
14
|
+
CallEventType["CALL_ANSWERED"] = "CALL_ANSWERED";
|
|
15
|
+
CallEventType["CALL_REJECTED"] = "CALL_REJECTED";
|
|
16
|
+
CallEventType["CALL_ENDED"] = "CALL_ENDED";
|
|
17
|
+
return CallEventType;
|
|
18
|
+
}({});
|
|
5
19
|
export default TurboModuleRegistry.getEnforcing('CallManager');
|
|
6
20
|
//# sourceMappingURL=NativeCallManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"..\\..\\src","sources":["NativeCallManager.ts"],"mappings":";;AAAA;AACA,SAA2BA,mBAAmB,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","CallEventType","getEnforcing"],"sourceRoot":"..\\..\\src","sources":["NativeCallManager.ts"],"mappings":";;AAAA;AACA,SAA2BA,mBAAmB,QAAQ,cAAc;AAEpE,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AA4BzB,eAAeD,mBAAmB,CAACE,YAAY,CAAO,aAAa,CAAC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CallManager","reportIncomingCall","endCall","answerCall","silenceRingtone","rejectCurrentAndAnswerNew","setEventHandler","getAudioDevices","setAudioRoute","keepScreenAwake"],"sourceRoot":"..\\..\\src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,WAAW,MAAM,wBAAqB;AAG7C,OAAO,MAAMC,kBAAkB,GAAGD,WAAW,CAACC,kBAAkB;AAChE,OAAO,MAAMC,OAAO,GAAGF,WAAW,CAACE,OAAO;AAC1C,OAAO,MAAMC,UAAU,GAAGH,WAAW,CAACG,UAAU;AAChD,OAAO,MAAMC,eAAe,GAAGJ,WAAW,CAACI,eAAe;AAC1D,OAAO,MAAMC,yBAAyB,GAAGL,WAAW,CAACK,yBAAyB;AAC9E,OAAO,MAAMC,eAAe,GAAGN,WAAW,CAACM,eAAe;
|
|
1
|
+
{"version":3,"names":["CallManager","reportIncomingCall","endCall","answerCall","silenceRingtone","rejectCurrentAndAnswerNew","setEventHandler","getAudioDevices","setAudioRoute","keepScreenAwake"],"sourceRoot":"..\\..\\src","sources":["index.tsx"],"mappings":";;AAAA;AACA,OAAOA,WAAW,MAAM,wBAAqB;AAG7C,OAAO,MAAMC,kBAAkB,GAAGD,WAAW,CAACC,kBAAkB;AAChE,OAAO,MAAMC,OAAO,GAAGF,WAAW,CAACE,OAAO;AAC1C,OAAO,MAAMC,UAAU,GAAGH,WAAW,CAACG,UAAU;AAChD,OAAO,MAAMC,eAAe,GAAGJ,WAAW,CAACI,eAAe;AAC1D,OAAO,MAAMC,yBAAyB,GAAGL,WAAW,CAACK,yBAAyB;AAC9E,OAAO,MAAMC,eAAe,GAAGN,WAAW,CAACM,eAAe;AAC1D,OAAO,MAAMC,eAAe,GAAGP,WAAW,CAACO,eAAe;AAC1D,OAAO,MAAMC,aAAa,GAAGR,WAAW,CAACQ,aAAa;AACtD,OAAO,MAAMC,eAAe,GAAGT,WAAW,CAACS,eAAe","ignoreList":[]}
|
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { type TurboModule } from 'react-native';
|
|
2
|
+
export declare enum CallEventType {
|
|
3
|
+
INITIAL_CALL_STATE = "INITIAL_CALL_STATE",
|
|
4
|
+
CALL_STATE_CHANGED = "CALL_STATE_CHANGED",
|
|
5
|
+
AUDIO_DEVICES_CHANGED = "AUDIO_DEVICES_CHANGED",
|
|
6
|
+
AUDIO_ROUTE_CHANGED = "AUDIO_ROUTE_CHANGED",
|
|
7
|
+
CALL_HELD = "CALL_HELD",
|
|
8
|
+
CALL_UNHELD = "CALL_UNHELD",
|
|
9
|
+
CALL_MUTED = "CALL_MUTED",
|
|
10
|
+
CALL_UNMUTED = "CALL_UNMUTED",
|
|
11
|
+
CALL_ANSWERED = "CALL_ANSWERED",
|
|
12
|
+
CALL_REJECTED = "CALL_REJECTED",
|
|
13
|
+
CALL_ENDED = "CALL_ENDED"
|
|
14
|
+
}
|
|
2
15
|
export interface Spec extends TurboModule {
|
|
3
16
|
reportIncomingCall(callId: string, callData: string): void;
|
|
4
17
|
endCall(callId: string): void;
|
|
5
18
|
answerCall(callId: string): void;
|
|
6
19
|
silenceRingtone(): void;
|
|
7
20
|
rejectCurrentAndAnswerNew(callId: string, callData: string): void;
|
|
8
|
-
setEventHandler(callback: (event:
|
|
21
|
+
setEventHandler(callback: (event: CallEventType, callData: string) => void): void;
|
|
9
22
|
getAudioDevices(): string[];
|
|
10
23
|
setAudioRoute(route: string): void;
|
|
11
24
|
keepScreenAwake(keepAwake: boolean): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeCallManager.d.ts","sourceRoot":"","sources":["../../../src/NativeCallManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,cAAc,CAAC;AAErE,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,IAAI,IAAI,CAAC;IACxB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"NativeCallManager.d.ts","sourceRoot":"","sources":["../../../src/NativeCallManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,cAAc,CAAC;AAErE,oBAAY,aAAa;IACvB,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,qBAAqB,0BAA0B;IAC/C,mBAAmB,wBAAwB;IAC3C,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,IAAI,IAAI,CAAC;IACxB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAGlF,eAAe,IAAI,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3C;;AAED,wBAAqE"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import type { CallEventType } from './NativeCallManager';
|
|
1
2
|
export declare const reportIncomingCall: (callId: string, callData: string) => void;
|
|
2
3
|
export declare const endCall: (callId: string) => void;
|
|
3
4
|
export declare const answerCall: (callId: string) => void;
|
|
4
5
|
export declare const silenceRingtone: () => void;
|
|
5
6
|
export declare const rejectCurrentAndAnswerNew: (callId: string, callData: string) => void;
|
|
6
|
-
export declare const setEventHandler: (callback: (event:
|
|
7
|
+
export declare const setEventHandler: (callback: (event: CallEventType, callData: string) => void) => void;
|
|
7
8
|
export declare const getAudioDevices: () => string[];
|
|
8
9
|
export declare const setAudioRoute: (route: string) => void;
|
|
9
10
|
export declare const keepScreenAwake: (keepAwake: boolean) => void;
|
|
11
|
+
export type { CallEventType };
|
|
10
12
|
//# 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":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,eAAO,MAAM,kBAAkB,4CAAiC,CAAC;AACjE,eAAO,MAAM,OAAO,0BAAsB,CAAC;AAC3C,eAAO,MAAM,UAAU,0BAAyB,CAAC;AACjD,eAAO,MAAM,eAAe,YAA8B,CAAC;AAC3D,eAAO,MAAM,yBAAyB,4CAAwC,CAAC;AAC/E,eAAO,MAAM,eAAe,sEAA8B,CAAC;AAC3D,eAAO,MAAM,eAAe,gBAA8B,CAAC;AAC3D,eAAO,MAAM,aAAa,yBAA4B,CAAC;AACvD,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAE3D,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
package/package.json
CHANGED
package/src/NativeCallManager.ts
CHANGED
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
// NativeCallManager.ts
|
|
2
2
|
import { type TurboModule, TurboModuleRegistry } from 'react-native';
|
|
3
3
|
|
|
4
|
+
export enum CallEventType {
|
|
5
|
+
INITIAL_CALL_STATE = 'INITIAL_CALL_STATE',
|
|
6
|
+
CALL_STATE_CHANGED = 'CALL_STATE_CHANGED',
|
|
7
|
+
AUDIO_DEVICES_CHANGED = 'AUDIO_DEVICES_CHANGED',
|
|
8
|
+
AUDIO_ROUTE_CHANGED = 'AUDIO_ROUTE_CHANGED',
|
|
9
|
+
CALL_HELD = 'CALL_HELD',
|
|
10
|
+
CALL_UNHELD = 'CALL_UNHELD',
|
|
11
|
+
CALL_MUTED = 'CALL_MUTED',
|
|
12
|
+
CALL_UNMUTED = 'CALL_UNMUTED',
|
|
13
|
+
CALL_ANSWERED = 'CALL_ANSWERED',
|
|
14
|
+
CALL_REJECTED = 'CALL_REJECTED',
|
|
15
|
+
CALL_ENDED = 'CALL_ENDED',
|
|
16
|
+
}
|
|
17
|
+
|
|
4
18
|
export interface Spec extends TurboModule {
|
|
5
19
|
reportIncomingCall(callId: string, callData: string): void;
|
|
6
20
|
endCall(callId: string): void;
|
|
7
21
|
answerCall(callId: string): void;
|
|
8
22
|
silenceRingtone(): void;
|
|
9
23
|
rejectCurrentAndAnswerNew(callId: string, callData: string): void;
|
|
10
|
-
setEventHandler(callback: (event:
|
|
24
|
+
setEventHandler(callback: (event: CallEventType, callData: string) => void): void;
|
|
11
25
|
|
|
12
26
|
// JSI-native audio/device/screen APIs:
|
|
13
27
|
getAudioDevices(): string[];
|
package/src/index.tsx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
// index.tsx
|
|
1
2
|
import CallManager from './NativeCallManager';
|
|
2
|
-
|
|
3
|
+
import type { CallEventType } from './NativeCallManager';
|
|
3
4
|
|
|
4
5
|
export const reportIncomingCall = CallManager.reportIncomingCall;
|
|
5
6
|
export const endCall = CallManager.endCall;
|
|
@@ -7,7 +8,8 @@ export const answerCall = CallManager.answerCall;
|
|
|
7
8
|
export const silenceRingtone = CallManager.silenceRingtone;
|
|
8
9
|
export const rejectCurrentAndAnswerNew = CallManager.rejectCurrentAndAnswerNew;
|
|
9
10
|
export const setEventHandler = CallManager.setEventHandler;
|
|
10
|
-
|
|
11
11
|
export const getAudioDevices = CallManager.getAudioDevices;
|
|
12
12
|
export const setAudioRoute = CallManager.setAudioRoute;
|
|
13
13
|
export const keepScreenAwake = CallManager.keepScreenAwake;
|
|
14
|
+
|
|
15
|
+
export type { CallEventType };
|