react-native-telecom 0.0.0-stage → 0.1.1
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/LICENSE +20 -0
- package/README.md +321 -2
- package/Telecom.podspec +20 -0
- package/android/build.gradle +58 -0
- package/android/src/main/AndroidManifest.xml +43 -0
- package/android/src/main/java/com/telecom/CallSession.kt +37 -0
- package/android/src/main/java/com/telecom/CallSessionManager.kt +486 -0
- package/android/src/main/java/com/telecom/TelecomAudioRouter.kt +227 -0
- package/android/src/main/java/com/telecom/TelecomAvatarLoader.kt +77 -0
- package/android/src/main/java/com/telecom/TelecomCallService.kt +395 -0
- package/android/src/main/java/com/telecom/TelecomCallUi.kt +65 -0
- package/android/src/main/java/com/telecom/TelecomInCallActivity.kt +285 -0
- package/android/src/main/java/com/telecom/TelecomIncomingCallActivity.kt +171 -0
- package/android/src/main/java/com/telecom/TelecomModule.kt +189 -0
- package/android/src/main/java/com/telecom/TelecomPackage.kt +31 -0
- package/android/src/main/java/com/telecom/TelecomPushBridge.kt +82 -0
- package/android/src/main/java/com/telecom/TelecomRingtonePlayer.kt +109 -0
- package/android/src/main/java/com/telecom/TelecomUiConfig.kt +27 -0
- package/android/src/main/res/drawable/rn_telecom_action_pill.xml +6 -0
- package/android/src/main/res/drawable/rn_telecom_answer_circle.xml +8 -0
- package/android/src/main/res/drawable/rn_telecom_answer_circle_green.xml +8 -0
- package/android/src/main/res/drawable/rn_telecom_avatar_bg.xml +6 -0
- package/android/src/main/res/drawable/rn_telecom_avatar_circle.xml +12 -0
- package/android/src/main/res/drawable/rn_telecom_btn_answer.xml +6 -0
- package/android/src/main/res/drawable/rn_telecom_btn_decline.xml +6 -0
- package/android/src/main/res/drawable/rn_telecom_btn_message.xml +9 -0
- package/android/src/main/res/drawable/rn_telecom_btn_secondary.xml +6 -0
- package/android/src/main/res/drawable/rn_telecom_control_circle.xml +8 -0
- package/android/src/main/res/drawable/rn_telecom_control_circle_on.xml +8 -0
- package/android/src/main/res/drawable/rn_telecom_decline_circle.xml +8 -0
- package/android/src/main/res/drawable/rn_telecom_ic_call.xml +10 -0
- package/android/src/main/res/drawable/rn_telecom_ic_call_end.xml +16 -0
- package/android/src/main/res/drawable/rn_telecom_ic_call_white.xml +10 -0
- package/android/src/main/res/drawable/rn_telecom_ic_dialpad.xml +13 -0
- package/android/src/main/res/drawable/rn_telecom_ic_hold.xml +10 -0
- package/android/src/main/res/drawable/rn_telecom_ic_message.xml +10 -0
- package/android/src/main/res/drawable/rn_telecom_ic_mic.xml +10 -0
- package/android/src/main/res/drawable/rn_telecom_ic_mic_off.xml +10 -0
- package/android/src/main/res/drawable/rn_telecom_ic_speaker.xml +10 -0
- package/android/src/main/res/layout/rn_telecom_control_item.xml +36 -0
- package/android/src/main/res/layout/rn_telecom_incall.xml +168 -0
- package/android/src/main/res/layout/rn_telecom_incoming_call.xml +188 -0
- package/ios/Telecom.h +5 -0
- package/ios/Telecom.mm +66 -0
- package/lib/module/NativeTelecom.js +5 -0
- package/lib/module/NativeTelecom.js.map +1 -0
- package/lib/module/index.js +102 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NativeTelecom.d.ts +40 -0
- package/lib/typescript/src/NativeTelecom.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +104 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/package.json +154 -4
- package/src/NativeTelecom.ts +55 -0
- package/src/index.tsx +217 -0
package/package.json
CHANGED
|
@@ -1,6 +1,156 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-telecom",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Modern react-native-callkeep alternative for React Native New Architecture. Android Jetpack Core-Telecom, CallStyle notifications, lock-screen incoming call UI, VoIP ringtone, mute, hold, DTMF, Bluetooth audio routes, FCM wake. TurboModule. Works with Telnyx, WebRTC, LiveKit.",
|
|
5
|
+
"main": "./lib/module/index.js",
|
|
6
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"react-native-telecom-source": "./src/index.tsx",
|
|
10
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
11
|
+
"default": "./lib/module/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"src",
|
|
17
|
+
"lib",
|
|
18
|
+
"android",
|
|
19
|
+
"ios",
|
|
20
|
+
"cpp",
|
|
21
|
+
"*.podspec",
|
|
22
|
+
"react-native.config.js",
|
|
23
|
+
"!ios/build",
|
|
24
|
+
"!android/build",
|
|
25
|
+
"!android/gradle",
|
|
26
|
+
"!android/gradlew",
|
|
27
|
+
"!android/gradlew.bat",
|
|
28
|
+
"!android/local.properties",
|
|
29
|
+
"!**/__tests__",
|
|
30
|
+
"!**/__fixtures__",
|
|
31
|
+
"!**/__mocks__",
|
|
32
|
+
"!**/.*"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"example": "yarn workspace react-native-telecom-example",
|
|
36
|
+
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
37
|
+
"prepare": "bob build",
|
|
38
|
+
"typecheck": "tsc",
|
|
39
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\""
|
|
40
|
+
},
|
|
41
|
+
"keywords": [
|
|
42
|
+
"react-native",
|
|
43
|
+
"react-native-callkeep",
|
|
44
|
+
"callkeep",
|
|
45
|
+
"callkeep-alternative",
|
|
46
|
+
"voip",
|
|
47
|
+
"telecom",
|
|
48
|
+
"core-telecom",
|
|
49
|
+
"connection-service",
|
|
50
|
+
"callstyle",
|
|
51
|
+
"incoming-call",
|
|
52
|
+
"outgoing-call",
|
|
53
|
+
"call-notification",
|
|
54
|
+
"full-screen-intent",
|
|
55
|
+
"lock-screen",
|
|
56
|
+
"ringtone",
|
|
57
|
+
"webrtc",
|
|
58
|
+
"telnyx",
|
|
59
|
+
"livekit",
|
|
60
|
+
"twilio",
|
|
61
|
+
"sip",
|
|
62
|
+
"dtmf",
|
|
63
|
+
"bluetooth",
|
|
64
|
+
"fcm",
|
|
65
|
+
"push-notification",
|
|
66
|
+
"turbomodule",
|
|
67
|
+
"new-architecture",
|
|
68
|
+
"fabric",
|
|
69
|
+
"android",
|
|
70
|
+
"kotlin",
|
|
71
|
+
"calls",
|
|
72
|
+
"phone-call-ui"
|
|
73
|
+
],
|
|
74
|
+
"repository": {
|
|
75
|
+
"type": "git",
|
|
76
|
+
"url": "git+https://github.com/itxmoizdev/react-native-telecom.git"
|
|
77
|
+
},
|
|
78
|
+
"author": "Abdul Moiz <opensource@itxmoizdev.com> (https://github.com/itxmoizdev)",
|
|
79
|
+
"license": "MIT",
|
|
80
|
+
"bugs": {
|
|
81
|
+
"url": "https://github.com/itxmoizdev/react-native-telecom/issues",
|
|
82
|
+
"email": "opensource@itxmoizdev.com"
|
|
83
|
+
},
|
|
84
|
+
"homepage": "https://github.com/itxmoizdev/react-native-telecom#readme",
|
|
85
|
+
"publishConfig": {
|
|
86
|
+
"registry": "https://registry.npmjs.org/"
|
|
87
|
+
},
|
|
88
|
+
"devDependencies": {
|
|
89
|
+
"@eslint/compat": "^2.1.0",
|
|
90
|
+
"@eslint/eslintrc": "^3.3.6",
|
|
91
|
+
"@eslint/js": "^9.39.5",
|
|
92
|
+
"@react-native/babel-preset": "0.87.1",
|
|
93
|
+
"@react-native/eslint-config": "0.86.2",
|
|
94
|
+
"@types/react": "^19.2.0",
|
|
95
|
+
"del-cli": "^7.0.0",
|
|
96
|
+
"eslint": "^9.39.5",
|
|
97
|
+
"eslint-config-prettier": "^10.1.8",
|
|
98
|
+
"eslint-plugin-ft-flow": "^3.0.11",
|
|
99
|
+
"eslint-plugin-prettier": "^5.5.6",
|
|
100
|
+
"prettier": "^3.9.6",
|
|
101
|
+
"react": "19.2.3",
|
|
102
|
+
"react-native": "0.87.1",
|
|
103
|
+
"react-native-builder-bob": "^0.43.0",
|
|
104
|
+
"turbo": "^2.10.8",
|
|
105
|
+
"typescript": "^6.0.3"
|
|
106
|
+
},
|
|
107
|
+
"peerDependencies": {
|
|
108
|
+
"react": "*",
|
|
109
|
+
"react-native": "*"
|
|
110
|
+
},
|
|
111
|
+
"workspaces": [
|
|
112
|
+
"example"
|
|
113
|
+
],
|
|
114
|
+
"packageManager": "yarn@4.11.0",
|
|
115
|
+
"react-native-builder-bob": {
|
|
116
|
+
"source": "src",
|
|
117
|
+
"output": "lib",
|
|
118
|
+
"targets": [
|
|
119
|
+
[
|
|
120
|
+
"module",
|
|
121
|
+
{
|
|
122
|
+
"esm": true
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
[
|
|
126
|
+
"typescript",
|
|
127
|
+
{
|
|
128
|
+
"project": "tsconfig.build.json"
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
"codegenConfig": {
|
|
134
|
+
"name": "TelecomSpec",
|
|
135
|
+
"type": "modules",
|
|
136
|
+
"jsSrcsDir": "src",
|
|
137
|
+
"android": {
|
|
138
|
+
"javaPackageName": "com.telecom"
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"prettier": {
|
|
142
|
+
"quoteProps": "consistent",
|
|
143
|
+
"singleQuote": true,
|
|
144
|
+
"tabWidth": 2,
|
|
145
|
+
"trailingComma": "es5",
|
|
146
|
+
"useTabs": false
|
|
147
|
+
},
|
|
148
|
+
"create-react-native-library": {
|
|
149
|
+
"type": "turbo-module",
|
|
150
|
+
"languages": "kotlin-objc",
|
|
151
|
+
"tools": [
|
|
152
|
+
"eslint"
|
|
153
|
+
],
|
|
154
|
+
"version": "0.63.1"
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { TurboModuleRegistry, type TurboModule } from 'react-native';
|
|
2
|
+
|
|
3
|
+
export type TelecomSetupOptions = {
|
|
4
|
+
appName?: string;
|
|
5
|
+
supportsVideo?: boolean;
|
|
6
|
+
/** Customize the full-screen incoming host Activity (not the CallStyle notification). */
|
|
7
|
+
ui?: {
|
|
8
|
+
incomingTitle?: string;
|
|
9
|
+
answerLabel?: string;
|
|
10
|
+
declineLabel?: string;
|
|
11
|
+
/** Hex colors e.g. `#000000`, `#43A047` */
|
|
12
|
+
backgroundColor?: string;
|
|
13
|
+
titleColor?: string;
|
|
14
|
+
nameColor?: string;
|
|
15
|
+
handleColor?: string;
|
|
16
|
+
answerColor?: string;
|
|
17
|
+
declineColor?: string;
|
|
18
|
+
/** Default true. Set false for notification-only (native CallStyle). */
|
|
19
|
+
launchFullScreenOnIncoming?: boolean;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type TelecomAudioRoute = 'earpiece' | 'speaker' | 'bluetooth';
|
|
24
|
+
|
|
25
|
+
export interface Spec extends TurboModule {
|
|
26
|
+
setup(options: Object): Promise<boolean>;
|
|
27
|
+
displayIncomingCall(
|
|
28
|
+
uuid: string,
|
|
29
|
+
handle: string,
|
|
30
|
+
callerName: string,
|
|
31
|
+
hasVideo: boolean,
|
|
32
|
+
autoAnswer: boolean,
|
|
33
|
+
avatarUrl: string
|
|
34
|
+
): void;
|
|
35
|
+
startCall(
|
|
36
|
+
uuid: string,
|
|
37
|
+
handle: string,
|
|
38
|
+
callerName: string,
|
|
39
|
+
hasVideo: boolean,
|
|
40
|
+
avatarUrl: string
|
|
41
|
+
): void;
|
|
42
|
+
answerCall(uuid: string): void;
|
|
43
|
+
endCall(uuid: string): void;
|
|
44
|
+
endAllCalls(): void;
|
|
45
|
+
setMuted(uuid: string, muted: boolean): void;
|
|
46
|
+
setOnHold(uuid: string, hold: boolean): void;
|
|
47
|
+
setAudioRoute(uuid: string, route: string): void;
|
|
48
|
+
getAvailableAudioRoutes(): Promise<Object>;
|
|
49
|
+
sendDtmf(uuid: string, digits: string): void;
|
|
50
|
+
handlePushMessage(data: Object): Promise<boolean>;
|
|
51
|
+
addListener(eventName: string): void;
|
|
52
|
+
removeListeners(count: number): void;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export default TurboModuleRegistry.getEnforcing<Spec>('Telecom');
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NativeEventEmitter,
|
|
3
|
+
NativeModules,
|
|
4
|
+
Platform,
|
|
5
|
+
type EmitterSubscription,
|
|
6
|
+
} from 'react-native';
|
|
7
|
+
import NativeTelecom, {
|
|
8
|
+
type TelecomAudioRoute,
|
|
9
|
+
type TelecomSetupOptions,
|
|
10
|
+
} from './NativeTelecom';
|
|
11
|
+
|
|
12
|
+
export type { TelecomAudioRoute, TelecomSetupOptions };
|
|
13
|
+
|
|
14
|
+
export type TelecomAudioRouteInfo = {
|
|
15
|
+
id: TelecomAudioRoute;
|
|
16
|
+
name: string;
|
|
17
|
+
available: boolean;
|
|
18
|
+
selected: boolean;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type TelecomEvents = {
|
|
22
|
+
answerCall: { callUUID: string };
|
|
23
|
+
endCall: { callUUID: string };
|
|
24
|
+
didDisplayIncomingCall: {
|
|
25
|
+
callUUID: string;
|
|
26
|
+
handle: string;
|
|
27
|
+
callerName: string;
|
|
28
|
+
hasVideo: boolean;
|
|
29
|
+
direction: 'incoming' | 'outgoing';
|
|
30
|
+
avatarUrl?: string;
|
|
31
|
+
};
|
|
32
|
+
didChangeHoldState: { callUUID: string; hold: boolean };
|
|
33
|
+
didChangeMuteState: { callUUID: string; muted: boolean };
|
|
34
|
+
didChangeSpeaker: { callUUID: string; speakerOn: boolean };
|
|
35
|
+
didChangeAudioRoute: { callUUID: string; route: TelecomAudioRoute };
|
|
36
|
+
didActivateAudioSession: { callUUID: string; route: TelecomAudioRoute };
|
|
37
|
+
didDeactivateAudioSession: { callUUID?: string };
|
|
38
|
+
dtmfTone: { callUUID: string; digit: string };
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export type TelecomEventName = keyof TelecomEvents;
|
|
42
|
+
|
|
43
|
+
export type TelecomPushPayload = {
|
|
44
|
+
uuid?: string;
|
|
45
|
+
callUUID?: string;
|
|
46
|
+
handle?: string;
|
|
47
|
+
number?: string;
|
|
48
|
+
callerName?: string;
|
|
49
|
+
name?: string;
|
|
50
|
+
hasVideo?: boolean | string;
|
|
51
|
+
autoAnswer?: boolean | string;
|
|
52
|
+
avatarUrl?: string;
|
|
53
|
+
avatar?: string;
|
|
54
|
+
type?: string;
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const isAndroid = Platform.OS === 'android';
|
|
59
|
+
|
|
60
|
+
const emitter = new NativeEventEmitter(
|
|
61
|
+
(NativeModules.Telecom ?? NativeTelecom) as never
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
function assertAndroid(): void {
|
|
65
|
+
if (!isAndroid) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
'react-native-telecom: Android Jetpack Core-Telecom only in v0.x. iOS CallKit support is coming later.'
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export async function setup(
|
|
73
|
+
options: TelecomSetupOptions = {}
|
|
74
|
+
): Promise<boolean> {
|
|
75
|
+
assertAndroid();
|
|
76
|
+
return NativeTelecom.setup({
|
|
77
|
+
appName: options.appName ?? 'App',
|
|
78
|
+
supportsVideo: options.supportsVideo ?? true,
|
|
79
|
+
ui: options.ui,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function displayIncomingCall(
|
|
84
|
+
uuid: string,
|
|
85
|
+
handle: string,
|
|
86
|
+
callerName: string,
|
|
87
|
+
hasVideo: boolean = false,
|
|
88
|
+
autoAnswer: boolean = false,
|
|
89
|
+
avatarUrl: string = ''
|
|
90
|
+
): void {
|
|
91
|
+
assertAndroid();
|
|
92
|
+
NativeTelecom.displayIncomingCall(
|
|
93
|
+
uuid,
|
|
94
|
+
handle,
|
|
95
|
+
callerName,
|
|
96
|
+
hasVideo,
|
|
97
|
+
autoAnswer,
|
|
98
|
+
avatarUrl
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function startCall(
|
|
103
|
+
uuid: string,
|
|
104
|
+
handle: string,
|
|
105
|
+
callerName: string,
|
|
106
|
+
hasVideo: boolean = false,
|
|
107
|
+
avatarUrl: string = ''
|
|
108
|
+
): void {
|
|
109
|
+
assertAndroid();
|
|
110
|
+
NativeTelecom.startCall(uuid, handle, callerName, hasVideo, avatarUrl);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function answerCall(uuid: string): void {
|
|
114
|
+
assertAndroid();
|
|
115
|
+
NativeTelecom.answerCall(uuid);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function endCall(uuid: string): void {
|
|
119
|
+
assertAndroid();
|
|
120
|
+
NativeTelecom.endCall(uuid);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function endAllCalls(): void {
|
|
124
|
+
assertAndroid();
|
|
125
|
+
NativeTelecom.endAllCalls();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function setMuted(uuid: string, muted: boolean): void {
|
|
129
|
+
assertAndroid();
|
|
130
|
+
NativeTelecom.setMuted(uuid, muted);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function setOnHold(uuid: string, hold: boolean): void {
|
|
134
|
+
assertAndroid();
|
|
135
|
+
NativeTelecom.setOnHold(uuid, hold);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function setAudioRoute(uuid: string, route: TelecomAudioRoute): void {
|
|
139
|
+
assertAndroid();
|
|
140
|
+
NativeTelecom.setAudioRoute(uuid, route);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export async function getAvailableAudioRoutes(): Promise<
|
|
144
|
+
TelecomAudioRouteInfo[]
|
|
145
|
+
> {
|
|
146
|
+
assertAndroid();
|
|
147
|
+
const routes = await NativeTelecom.getAvailableAudioRoutes();
|
|
148
|
+
return routes as TelecomAudioRouteInfo[];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Local DTMF beep + `dtmfTone` event — forward digits in your signaling/WebRTC. */
|
|
152
|
+
export function sendDtmf(uuid: string, digits: string): void {
|
|
153
|
+
assertAndroid();
|
|
154
|
+
NativeTelecom.sendDtmf(uuid, digits);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Handle an FCM / push data map from JS (foreground).
|
|
159
|
+
* For killed-state, call `TelecomPushBridge` from your native MessagingService.
|
|
160
|
+
*/
|
|
161
|
+
export async function handlePushMessage(
|
|
162
|
+
data: TelecomPushPayload
|
|
163
|
+
): Promise<boolean> {
|
|
164
|
+
assertAndroid();
|
|
165
|
+
return NativeTelecom.handlePushMessage(data);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function addEventListener<E extends TelecomEventName>(
|
|
169
|
+
eventName: E,
|
|
170
|
+
listener: (event: TelecomEvents[E]) => void
|
|
171
|
+
): EmitterSubscription {
|
|
172
|
+
assertAndroid();
|
|
173
|
+
return emitter.addListener(eventName, (event) => {
|
|
174
|
+
listener(event as TelecomEvents[E]);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export function removeAllListeners(eventName?: TelecomEventName): void {
|
|
179
|
+
if (eventName) {
|
|
180
|
+
emitter.removeAllListeners(eventName);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
(
|
|
185
|
+
[
|
|
186
|
+
'answerCall',
|
|
187
|
+
'endCall',
|
|
188
|
+
'didDisplayIncomingCall',
|
|
189
|
+
'didChangeHoldState',
|
|
190
|
+
'didChangeMuteState',
|
|
191
|
+
'didChangeSpeaker',
|
|
192
|
+
'didChangeAudioRoute',
|
|
193
|
+
'didActivateAudioSession',
|
|
194
|
+
'didDeactivateAudioSession',
|
|
195
|
+
'dtmfTone',
|
|
196
|
+
] as TelecomEventName[]
|
|
197
|
+
).forEach((name) => emitter.removeAllListeners(name));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const Telecom = {
|
|
201
|
+
setup,
|
|
202
|
+
displayIncomingCall,
|
|
203
|
+
startCall,
|
|
204
|
+
answerCall,
|
|
205
|
+
endCall,
|
|
206
|
+
endAllCalls,
|
|
207
|
+
setMuted,
|
|
208
|
+
setOnHold,
|
|
209
|
+
setAudioRoute,
|
|
210
|
+
getAvailableAudioRoutes,
|
|
211
|
+
sendDtmf,
|
|
212
|
+
handlePushMessage,
|
|
213
|
+
addEventListener,
|
|
214
|
+
removeAllListeners,
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
export default Telecom;
|