voice-react-native-sdk 1.6.2-fork.4
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 +206 -0
- package/README.md +179 -0
- package/android/build.gradle +113 -0
- package/android/gradle.properties +29 -0
- package/android/src/main/AndroidManifest.xml +30 -0
- package/android/src/main/java/com/twiliovoicereactnative/AudioSwitchManager.java +141 -0
- package/android/src/main/java/com/twiliovoicereactnative/CallListenerProxy.java +186 -0
- package/android/src/main/java/com/twiliovoicereactnative/CallMessageListenerProxy.java +103 -0
- package/android/src/main/java/com/twiliovoicereactnative/CallRecordDatabase.java +183 -0
- package/android/src/main/java/com/twiliovoicereactnative/CommonConstants.java +195 -0
- package/android/src/main/java/com/twiliovoicereactnative/ConfigurationProperties.java +41 -0
- package/android/src/main/java/com/twiliovoicereactnative/Constants.java +23 -0
- package/android/src/main/java/com/twiliovoicereactnative/ExpoActivityLifecycleListener.java +27 -0
- package/android/src/main/java/com/twiliovoicereactnative/ExpoApplicationLifecycleListener.java +14 -0
- package/android/src/main/java/com/twiliovoicereactnative/ExpoModule.kt +36 -0
- package/android/src/main/java/com/twiliovoicereactnative/ExpoPackage.java +20 -0
- package/android/src/main/java/com/twiliovoicereactnative/JSEventEmitter.java +98 -0
- package/android/src/main/java/com/twiliovoicereactnative/MediaPlayerManager.java +58 -0
- package/android/src/main/java/com/twiliovoicereactnative/NotificationUtility.java +363 -0
- package/android/src/main/java/com/twiliovoicereactnative/ReactNativeArgumentsSerializer.java +276 -0
- package/android/src/main/java/com/twiliovoicereactnative/SDKLog.java +74 -0
- package/android/src/main/java/com/twiliovoicereactnative/StatsListenerProxy.java +178 -0
- package/android/src/main/java/com/twiliovoicereactnative/TwilioVoiceReactNativeModule.java +778 -0
- package/android/src/main/java/com/twiliovoicereactnative/TwilioVoiceReactNativePackage.java +28 -0
- package/android/src/main/java/com/twiliovoicereactnative/VoiceActivityProxy.java +101 -0
- package/android/src/main/java/com/twiliovoicereactnative/VoiceApplicationProxy.java +133 -0
- package/android/src/main/java/com/twiliovoicereactnative/VoiceFirebaseMessagingService.java +88 -0
- package/android/src/main/java/com/twiliovoicereactnative/VoiceService.java +403 -0
- package/android/src/main/res/drawable/answered_call_small_icon.png +0 -0
- package/android/src/main/res/drawable/ic_launcher_round.png +0 -0
- package/android/src/main/res/drawable/ic_launcher_sdk.png +0 -0
- package/android/src/main/res/drawable/incoming_call_small_icon.png +0 -0
- package/android/src/main/res/drawable/outgoing_call_small_icon.png +0 -0
- package/android/src/main/res/raw/disconnect.wav +0 -0
- package/android/src/main/res/raw/incoming.wav +0 -0
- package/android/src/main/res/raw/outgoing.wav +0 -0
- package/android/src/main/res/raw/ringtone.wav +0 -0
- package/android/src/main/res/raw/silent.wav +0 -0
- package/android/src/main/res/values/colors.xml +11 -0
- package/android/src/main/res/values/config.xml +5 -0
- package/android/src/main/res/values/dimens.xml +7 -0
- package/android/src/main/res/values/strings.xml +25 -0
- package/android/src/main/res/values/styles.xml +10 -0
- package/android/src/main/res/values-night/colors.xml +11 -0
- package/expo-config-plugin/android.js +191 -0
- package/expo-config-plugin/ios.js +22 -0
- package/expo-module.config.json +6 -0
- package/ios/TwilioVoicePushRegistry.h +19 -0
- package/ios/TwilioVoicePushRegistry.m +72 -0
- package/ios/TwilioVoiceReactNative+CallInvite.m +56 -0
- package/ios/TwilioVoiceReactNative+CallKit.m +533 -0
- package/ios/TwilioVoiceReactNative+CallMessage.m +81 -0
- package/ios/TwilioVoiceReactNative.h +74 -0
- package/ios/TwilioVoiceReactNative.m +1046 -0
- package/ios/TwilioVoiceReactNative.xcodeproj/project.pbxproj +328 -0
- package/ios/TwilioVoiceReactNativeConstants.h +200 -0
- package/ios/Utilities/TwilioVoiceStatsReport.h +175 -0
- package/lib/commonjs/AudioDevice.js +101 -0
- package/lib/commonjs/AudioDevice.js.map +1 -0
- package/lib/commonjs/Call.js +765 -0
- package/lib/commonjs/Call.js.map +1 -0
- package/lib/commonjs/CallInvite.js +452 -0
- package/lib/commonjs/CallInvite.js.map +1 -0
- package/lib/commonjs/CallMessage/CallMessage.js +54 -0
- package/lib/commonjs/CallMessage/CallMessage.js.map +1 -0
- package/lib/commonjs/CallMessage/IncomingCallMessage.js +120 -0
- package/lib/commonjs/CallMessage/IncomingCallMessage.js.map +1 -0
- package/lib/commonjs/CallMessage/OutgoingCallMessage.js +148 -0
- package/lib/commonjs/CallMessage/OutgoingCallMessage.js.map +1 -0
- package/lib/commonjs/ExpoModule.js +69 -0
- package/lib/commonjs/ExpoModule.js.map +1 -0
- package/lib/commonjs/Voice.js +611 -0
- package/lib/commonjs/Voice.js.map +1 -0
- package/lib/commonjs/common.js +26 -0
- package/lib/commonjs/common.js.map +1 -0
- package/lib/commonjs/constants.js +158 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/error/InvalidArgumentError.js +32 -0
- package/lib/commonjs/error/InvalidArgumentError.js.map +1 -0
- package/lib/commonjs/error/InvalidStateError.js +33 -0
- package/lib/commonjs/error/InvalidStateError.js.map +1 -0
- package/lib/commonjs/error/TwilioError.js +38 -0
- package/lib/commonjs/error/TwilioError.js.map +1 -0
- package/lib/commonjs/error/UnsupportedPlatformError.js +33 -0
- package/lib/commonjs/error/UnsupportedPlatformError.js.map +1 -0
- package/lib/commonjs/error/generated.js +2343 -0
- package/lib/commonjs/error/generated.js.map +1 -0
- package/lib/commonjs/error/index.js +112 -0
- package/lib/commonjs/error/index.js.map +1 -0
- package/lib/commonjs/error/utility.js +37 -0
- package/lib/commonjs/error/utility.js.map +1 -0
- package/lib/commonjs/index.js +95 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/type/AudioDevice.js +6 -0
- package/lib/commonjs/type/AudioDevice.js.map +1 -0
- package/lib/commonjs/type/Call.js +6 -0
- package/lib/commonjs/type/Call.js.map +1 -0
- package/lib/commonjs/type/CallInvite.js +6 -0
- package/lib/commonjs/type/CallInvite.js.map +1 -0
- package/lib/commonjs/type/CallKit.js +30 -0
- package/lib/commonjs/type/CallKit.js.map +1 -0
- package/lib/commonjs/type/CallMessage.js +6 -0
- package/lib/commonjs/type/CallMessage.js.map +1 -0
- package/lib/commonjs/type/Error.js +6 -0
- package/lib/commonjs/type/Error.js.map +1 -0
- package/lib/commonjs/type/NativeModule.js +6 -0
- package/lib/commonjs/type/NativeModule.js.map +1 -0
- package/lib/commonjs/type/RTCStats.js +29 -0
- package/lib/commonjs/type/RTCStats.js.map +1 -0
- package/lib/commonjs/type/Voice.js +6 -0
- package/lib/commonjs/type/Voice.js.map +1 -0
- package/lib/commonjs/type/common.js +2 -0
- package/lib/commonjs/type/common.js.map +1 -0
- package/lib/module/AudioDevice.js +97 -0
- package/lib/module/AudioDevice.js.map +1 -0
- package/lib/module/Call.js +766 -0
- package/lib/module/Call.js.map +1 -0
- package/lib/module/CallInvite.js +450 -0
- package/lib/module/CallInvite.js.map +1 -0
- package/lib/module/CallMessage/CallMessage.js +51 -0
- package/lib/module/CallMessage/CallMessage.js.map +1 -0
- package/lib/module/CallMessage/IncomingCallMessage.js +116 -0
- package/lib/module/CallMessage/IncomingCallMessage.js.map +1 -0
- package/lib/module/CallMessage/OutgoingCallMessage.js +154 -0
- package/lib/module/CallMessage/OutgoingCallMessage.js.map +1 -0
- package/lib/module/ExpoModule.js +58 -0
- package/lib/module/ExpoModule.js.map +1 -0
- package/lib/module/Voice.js +598 -0
- package/lib/module/Voice.js.map +1 -0
- package/lib/module/common.js +11 -0
- package/lib/module/common.js.map +1 -0
- package/lib/module/constants.js +151 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/error/InvalidArgumentError.js +23 -0
- package/lib/module/error/InvalidArgumentError.js.map +1 -0
- package/lib/module/error/InvalidStateError.js +24 -0
- package/lib/module/error/InvalidStateError.js.map +1 -0
- package/lib/module/error/TwilioError.js +29 -0
- package/lib/module/error/TwilioError.js.map +1 -0
- package/lib/module/error/UnsupportedPlatformError.js +24 -0
- package/lib/module/error/UnsupportedPlatformError.js.map +1 -0
- package/lib/module/error/generated.js +2315 -0
- package/lib/module/error/generated.js.map +1 -0
- package/lib/module/error/index.js +6 -0
- package/lib/module/error/index.js.map +1 -0
- package/lib/module/error/utility.js +27 -0
- package/lib/module/error/utility.js.map +1 -0
- package/lib/module/index.js +23 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/type/AudioDevice.js +2 -0
- package/lib/module/type/AudioDevice.js.map +1 -0
- package/lib/module/type/Call.js +2 -0
- package/lib/module/type/Call.js.map +1 -0
- package/lib/module/type/CallInvite.js +2 -0
- package/lib/module/type/CallInvite.js.map +1 -0
- package/lib/module/type/CallKit.js +22 -0
- package/lib/module/type/CallKit.js.map +1 -0
- package/lib/module/type/CallMessage.js +2 -0
- package/lib/module/type/CallMessage.js.map +1 -0
- package/lib/module/type/Error.js +2 -0
- package/lib/module/type/Error.js.map +1 -0
- package/lib/module/type/NativeModule.js +2 -0
- package/lib/module/type/NativeModule.js.map +1 -0
- package/lib/module/type/RTCStats.js +21 -0
- package/lib/module/type/RTCStats.js.map +1 -0
- package/lib/module/type/Voice.js +2 -0
- package/lib/module/type/Voice.js.map +1 -0
- package/lib/module/type/common.js +2 -0
- package/lib/module/type/common.js.map +1 -0
- package/lib/typescript/AudioDevice.d.ts +74 -0
- package/lib/typescript/Call.d.ts +874 -0
- package/lib/typescript/CallInvite.d.ts +484 -0
- package/lib/typescript/CallMessage/CallMessage.d.ts +53 -0
- package/lib/typescript/CallMessage/IncomingCallMessage.d.ts +75 -0
- package/lib/typescript/CallMessage/OutgoingCallMessage.d.ts +198 -0
- package/lib/typescript/ExpoModule.d.ts +13 -0
- package/lib/typescript/Voice.d.ts +620 -0
- package/lib/typescript/common.d.ts +11 -0
- package/lib/typescript/constants.d.ts +148 -0
- package/lib/typescript/error/InvalidArgumentError.d.ts +11 -0
- package/lib/typescript/error/InvalidStateError.d.ts +12 -0
- package/lib/typescript/error/TwilioError.d.ts +14 -0
- package/lib/typescript/error/UnsupportedPlatformError.d.ts +12 -0
- package/lib/typescript/error/generated.d.ts +1558 -0
- package/lib/typescript/error/index.d.ts +5 -0
- package/lib/typescript/error/utility.d.ts +12 -0
- package/lib/typescript/index.d.ts +18 -0
- package/lib/typescript/type/AudioDevice.d.ts +15 -0
- package/lib/typescript/type/Call.d.ts +59 -0
- package/lib/typescript/type/CallInvite.d.ts +40 -0
- package/lib/typescript/type/CallKit.d.ts +60 -0
- package/lib/typescript/type/CallMessage.d.ts +20 -0
- package/lib/typescript/type/Error.d.ts +9 -0
- package/lib/typescript/type/NativeModule.d.ts +59 -0
- package/lib/typescript/type/RTCStats.d.ts +91 -0
- package/lib/typescript/type/Voice.d.ts +16 -0
- package/lib/typescript/type/common.d.ts +15 -0
- package/package.json +167 -0
- package/src/AudioDevice.tsx +88 -0
- package/src/Call.tsx +1343 -0
- package/src/CallInvite.tsx +757 -0
- package/src/CallMessage/CallMessage.ts +83 -0
- package/src/CallMessage/IncomingCallMessage.ts +104 -0
- package/src/CallMessage/OutgoingCallMessage.ts +308 -0
- package/src/ExpoModule.ts +59 -0
- package/src/Voice.tsx +1010 -0
- package/src/common.ts +16 -0
- package/src/constants.ts +193 -0
- package/src/error/InvalidArgumentError.ts +19 -0
- package/src/error/InvalidStateError.ts +19 -0
- package/src/error/TwilioError.ts +22 -0
- package/src/error/UnsupportedPlatformError.ts +19 -0
- package/src/error/generated.ts +2277 -0
- package/src/error/index.ts +18 -0
- package/src/error/utility.ts +36 -0
- package/src/index.tsx +24 -0
- package/src/type/AudioDevice.ts +18 -0
- package/src/type/Call.ts +102 -0
- package/src/type/CallInvite.ts +59 -0
- package/src/type/CallKit.ts +61 -0
- package/src/type/CallMessage.ts +31 -0
- package/src/type/Error.ts +11 -0
- package/src/type/NativeModule.ts +93 -0
- package/src/type/RTCStats.ts +99 -0
- package/src/type/Voice.ts +31 -0
- package/src/type/common.ts +16 -0
- package/twilio-voice-react-native.podspec +22 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
package com.twiliovoicereactnative;
|
|
2
|
+
|
|
3
|
+
public class CommonConstants {
|
|
4
|
+
// React Native Voice SDK
|
|
5
|
+
public static final String ReactNativeVoiceSDK = "react-native";
|
|
6
|
+
public static final String ReactNativeVoiceSDKVer = "1.6.2-dev";
|
|
7
|
+
|
|
8
|
+
// Scope names
|
|
9
|
+
public static final String ScopeVoice = "scopeVoice";
|
|
10
|
+
public static final String ScopeCall = "scopeCall";
|
|
11
|
+
public static final String ScopeCallMessage = "scopeCallMessage";
|
|
12
|
+
public static final String ScopeCallInvite = "scopeCallInvite";
|
|
13
|
+
|
|
14
|
+
// Voice events
|
|
15
|
+
// Common
|
|
16
|
+
public static final String VoiceEventError = "voiceEventError";
|
|
17
|
+
public static final String VoiceEventType = "type";
|
|
18
|
+
|
|
19
|
+
// Error
|
|
20
|
+
public static final String VoiceErrorKeyError = "error";
|
|
21
|
+
public static final String VoiceErrorKeyCode = "code";
|
|
22
|
+
public static final String VoiceErrorKeyMessage = "message";
|
|
23
|
+
|
|
24
|
+
// Registration
|
|
25
|
+
public static final String VoiceEventRegistered = "voiceEventRegistered";
|
|
26
|
+
public static final String VoiceEventUnregistered = "voiceEventUnregistered";
|
|
27
|
+
|
|
28
|
+
// Call Info
|
|
29
|
+
public static final String CallInfoUuid = "uuid";
|
|
30
|
+
public static final String CallInfoSid = "sid";
|
|
31
|
+
public static final String CallInfoFrom = "from";
|
|
32
|
+
public static final String CallInfoTo = "to";
|
|
33
|
+
public static final String CallInfoIsMuted = "isMuted";
|
|
34
|
+
public static final String CallInfoIsOnHold = "isOnHold";
|
|
35
|
+
public static final String CallInfoState = "state";
|
|
36
|
+
public static final String CallInfoInitialConnectedTimestamp = "initialConnectedTimestamp";
|
|
37
|
+
|
|
38
|
+
// Call States
|
|
39
|
+
public static final String CallStateConnected = "connected";
|
|
40
|
+
public static final String CallStateConnecting = "connecting";
|
|
41
|
+
public static final String CallStateDisconnected = "disconnected";
|
|
42
|
+
public static final String CallStateReconnecting = "reconnecting";
|
|
43
|
+
public static final String CallStateRinging = "ringing";
|
|
44
|
+
|
|
45
|
+
// Call Invite Info
|
|
46
|
+
public static final String CallInviteInfoUuid = "uuid";
|
|
47
|
+
public static final String CallInviteInfoCallSid = "callSid";
|
|
48
|
+
public static final String CallInviteInfoFrom = "from";
|
|
49
|
+
public static final String CallInviteInfoTo = "to";
|
|
50
|
+
public static final String CallInviteInfoCustomParameters = "customParameters";
|
|
51
|
+
|
|
52
|
+
// Cancelled Call Invite Info
|
|
53
|
+
public static final String CancelledCallInviteInfoUuid = "uuid";
|
|
54
|
+
public static final String CancelledCallInviteInfoCallSid = "callSid";
|
|
55
|
+
public static final String CancelledCallInviteInfoFrom = "from";
|
|
56
|
+
public static final String CancelledCallInviteInfoTo = "to";
|
|
57
|
+
public static final String CancelledCallInviteInfoCustomParameters = "customParameters";
|
|
58
|
+
|
|
59
|
+
// Incoming Call Invite event
|
|
60
|
+
public static final String VoiceEventTypeValueIncomingCallInvite = "voiceEventTypeValueIncomingCallInvite";
|
|
61
|
+
|
|
62
|
+
// Call Message
|
|
63
|
+
public static final String VoiceEventSid = "voiceEventSid";
|
|
64
|
+
public static final String CallMessage = "callMessage";
|
|
65
|
+
public static final String CallMessageContent = "content";
|
|
66
|
+
public static final String CallMessageContentType = "contentType";
|
|
67
|
+
public static final String CallMessageMessageType = "messageType";
|
|
68
|
+
public static final String JSEventKeyCallMessageInfo = "callMessage";
|
|
69
|
+
|
|
70
|
+
// Audio Devices Updated Event
|
|
71
|
+
public static final String VoiceEventAudioDevicesUpdated = "voiceEventAudioDevicesUpdated";
|
|
72
|
+
|
|
73
|
+
// Audio Device
|
|
74
|
+
public static final String AudioDeviceKeyUuid = "uuid";
|
|
75
|
+
public static final String AudioDeviceKeyName = "name";
|
|
76
|
+
public static final String AudioDeviceKeyType = "type";
|
|
77
|
+
public static final String AudioDeviceKeyAudioDevices = "audioDevices";
|
|
78
|
+
public static final String AudioDeviceKeySelectedDevice = "selectedDevice";
|
|
79
|
+
public static final String AudioDeviceKeyEarpiece = "earpiece";
|
|
80
|
+
public static final String AudioDeviceKeySpeaker = "speaker";
|
|
81
|
+
public static final String AudioDeviceKeyBluetooth = "bluetooth";
|
|
82
|
+
|
|
83
|
+
// CallInvite events
|
|
84
|
+
public static final String CallInviteEventKeyType = "type";
|
|
85
|
+
public static final String CallInviteEventTypeValueAccepted = "callInviteEventTypeValueCallInviteAccepted";
|
|
86
|
+
public static final String CallInviteEventTypeValueNotificationTapped = "callInviteEventTypeValueCallInviteNotificationTapped";
|
|
87
|
+
public static final String CallInviteEventTypeValueRejected = "callInviteEventTypeValueCallInviteRejected";
|
|
88
|
+
public static final String CallInviteEventTypeValueCancelled = "callInviteEventTypeValueCallInviteCancelled";
|
|
89
|
+
public static final String CallInviteEventKeyCallSid = "callSid";
|
|
90
|
+
|
|
91
|
+
// Call events
|
|
92
|
+
// State
|
|
93
|
+
public static final String CallEventConnected = "callEventConnected";
|
|
94
|
+
public static final String CallEventConnectFailure = "callEventConnectFailure";
|
|
95
|
+
public static final String CallEventDisconnected = "callEventDisconnected";
|
|
96
|
+
public static final String CallEventReconnecting = "callEventReconnecting";
|
|
97
|
+
public static final String CallEventReconnected = "callEventReconnected";
|
|
98
|
+
public static final String CallEventRinging = "callEventRinging";
|
|
99
|
+
|
|
100
|
+
// Quality warnings
|
|
101
|
+
public static final String CallEventQualityWarningsChanged = "callEventQualityWarningsChanged";
|
|
102
|
+
public static final String CallEventCurrentWarnings = "callEventCurrentWarnings";
|
|
103
|
+
public static final String CallEventPreviousWarnings = "callEventPreviousWarnings";
|
|
104
|
+
|
|
105
|
+
// Call message events
|
|
106
|
+
public static final String CallEventMessageFailure = "callEventMessageFailure";
|
|
107
|
+
public static final String CallEventMessageReceived = "callEventMessageReceived";
|
|
108
|
+
public static final String CallEventMessageSent = "callEventMessageSent";
|
|
109
|
+
|
|
110
|
+
// Call feedback score
|
|
111
|
+
public static final String CallFeedbackScoreNotReported = "callFeedbackScoreNotReported";
|
|
112
|
+
public static final String CallFeedbackScoreOne = "callFeedbackScoreOne";
|
|
113
|
+
public static final String CallFeedbackScoreTwo = "callFeedbackScoreTwo";
|
|
114
|
+
public static final String CallFeedbackScoreThree = "callFeedbackScoreThree";
|
|
115
|
+
public static final String CallFeedbackScoreFour = "callFeedbackScoreFour";
|
|
116
|
+
public static final String CallFeedbackScoreFive = "callFeedbackScoreFive";
|
|
117
|
+
|
|
118
|
+
// Call feedback issue
|
|
119
|
+
public static final String CallFeedbackIssueNotReported = "callFeedbackIssueNotReported";
|
|
120
|
+
public static final String CallFeedbackIssueDroppedCall = "callFeedbackIssueDroppedCall";
|
|
121
|
+
public static final String CallFeedbackIssueAudioLatency = "callFeedbackIssueAudioLatency";
|
|
122
|
+
public static final String CallFeedbackIssueOneWayAudio = "callFeedbackIssueOneWayAudio";
|
|
123
|
+
public static final String CallFeedbackIssueChoppyAudio = "callFeedbackIssueChoppyAudio";
|
|
124
|
+
public static final String CallFeedbackIssueNoisyCall = "callFeedbackIssueNoisyCall";
|
|
125
|
+
public static final String CallFeedbackIssueEcho = "callFeedbackIssueEcho";
|
|
126
|
+
|
|
127
|
+
// StatsReport
|
|
128
|
+
public static final String PeerConnectionId = "peerConnectionId";
|
|
129
|
+
public static final String LocalAudioTrackStats = "localAudioTrackStats";
|
|
130
|
+
public static final String RemoteAudioTrackStats = "remoteAudioTrackStats";
|
|
131
|
+
public static final String IceCandidatePairStats = "iceCandidatePairStats";
|
|
132
|
+
public static final String IceCandidateStats = "iceCandidateStats";
|
|
133
|
+
public static final String Codec = "codec";
|
|
134
|
+
public static final String PacketsLost = "packetsLost";
|
|
135
|
+
public static final String Ssrc = "ssrc";
|
|
136
|
+
public static final String TrackId = "trackId";
|
|
137
|
+
public static final String Timestamp = "timestamp";
|
|
138
|
+
public static final String BytesSent = "bytesSent";
|
|
139
|
+
public static final String PacketsSent = "packetsSent";
|
|
140
|
+
public static final String RoundTripTime = "roundTripTime";
|
|
141
|
+
public static final String AudioLevel = "audioLevel";
|
|
142
|
+
public static final String Jitter = "jitter";
|
|
143
|
+
public static final String BytesReceived = "bytesReceived";
|
|
144
|
+
public static final String Mos = "mos";
|
|
145
|
+
public static final String TransportId = "transportId";
|
|
146
|
+
public static final String LocalCandidateId = "localCandidateId";
|
|
147
|
+
public static final String RemoteCandidateId = "remoteCandidateId";
|
|
148
|
+
public static final String State = "state";
|
|
149
|
+
public static final String LocalCandidateIp = "localCandidateIp";
|
|
150
|
+
public static final String RemoteCandidateIp = "remoteCandidateIp";
|
|
151
|
+
public static final String Nominated = "nominated";
|
|
152
|
+
public static final String Writeable = "writeable";
|
|
153
|
+
public static final String Readable = "readable";
|
|
154
|
+
public static final String TotalRoundTripTime = "totalRoundTripTime";
|
|
155
|
+
public static final String CurrentRoundTripTime = "currentRoundTripTime";
|
|
156
|
+
public static final String AvailableOutgoingBitrate = "availableOutgoingBitrate";
|
|
157
|
+
public static final String AvailableIncomingBitrate = "availableIncomingBitrate";
|
|
158
|
+
public static final String RequestsReceived = "requestsReceived";
|
|
159
|
+
public static final String RequestsSent = "requestsSent";
|
|
160
|
+
public static final String ResponsesReceived = "responsesReceived";
|
|
161
|
+
public static final String ResponsesSent = "responsesSent";
|
|
162
|
+
public static final String RetransmissionsReceived = "retransmissionsReceived";
|
|
163
|
+
public static final String RetransmissionsSent = "retransmissionsSent";
|
|
164
|
+
public static final String ConsentRequestsReceived = "consentRequestsReceived";
|
|
165
|
+
public static final String ConsentRequestsSent = "consentRequestsSent";
|
|
166
|
+
public static final String ConsentResponsesReceived = "consentResponsesReceived";
|
|
167
|
+
public static final String ConsentResponsesSent = "consentResponsesSent";
|
|
168
|
+
public static final String ActiveCandidatePair = "activeCandidatePair";
|
|
169
|
+
public static final String RelayProtocol = "relayProtocol";
|
|
170
|
+
public static final String IsRemote = "isRemote";
|
|
171
|
+
public static final String Ip = "ip";
|
|
172
|
+
public static final String Port = "port";
|
|
173
|
+
public static final String Protocol = "protocol";
|
|
174
|
+
public static final String CandidateType = "candidateType";
|
|
175
|
+
public static final String Priority = "priority";
|
|
176
|
+
public static final String Url = "url";
|
|
177
|
+
public static final String Deleted = "deleted";
|
|
178
|
+
public static final String PacketsReceived = "packetsReceived";
|
|
179
|
+
|
|
180
|
+
// IceCandidatePairState
|
|
181
|
+
public static final String StateFailed = "stateFailed";
|
|
182
|
+
public static final String StateFrozen = "stateFrozen";
|
|
183
|
+
public static final String StateInProgress = "stateInProgress";
|
|
184
|
+
public static final String StateSucceeded = "stateSucceeded";
|
|
185
|
+
public static final String StateWaiting = "stateWaiting";
|
|
186
|
+
public static final String StateUnknown = "stateUnknown";
|
|
187
|
+
|
|
188
|
+
// iOS CallKit configuration
|
|
189
|
+
public static final String CallKitMaximumCallsPerCallGroup = "callKitMaximumCallsPerCallGroup";
|
|
190
|
+
public static final String CallKitMaximumCallGroups = "callKitMaximumCallGroups";
|
|
191
|
+
public static final String CallKitIncludesCallsInRecents = "callKitIncludesCallsInRecents";
|
|
192
|
+
public static final String CallKitSupportedHandleTypes = "callKitSupportedHandleTypes";
|
|
193
|
+
public static final String CallKitIconTemplateImageData = "callKitIconTemplateImageData";
|
|
194
|
+
public static final String CallKitRingtoneSound = "callKitRingtoneSound";
|
|
195
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package com.twiliovoicereactnative;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.content.SharedPreferences;
|
|
5
|
+
|
|
6
|
+
class ConfigurationProperties {
|
|
7
|
+
public static void setIncomingCallContactHandleTemplate(Context ctx, String template) {
|
|
8
|
+
SharedPreferences sharedPreferences = ctx.getSharedPreferences(Constants.PREFERENCES_FILE, Context.MODE_PRIVATE);
|
|
9
|
+
sharedPreferences
|
|
10
|
+
.edit()
|
|
11
|
+
.putString(Constants.INCOMING_CALL_CONTACT_HANDLE_TEMPLATE_PREFERENCES_KEY, template)
|
|
12
|
+
.apply();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public static String getIncomingCallContactHandleTemplate(Context ctx) {
|
|
16
|
+
SharedPreferences sharedPreferences = ctx.getSharedPreferences(Constants.PREFERENCES_FILE, Context.MODE_PRIVATE);
|
|
17
|
+
return sharedPreferences.getString(Constants.INCOMING_CALL_CONTACT_HANDLE_TEMPLATE_PREFERENCES_KEY, null);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Get configuration boolean, used to determine if the built-in Firebase service should be enabled
|
|
22
|
+
* or not.
|
|
23
|
+
* @param context the application context
|
|
24
|
+
* @return a boolean read from the application resources
|
|
25
|
+
*/
|
|
26
|
+
public static boolean isFirebaseServiceEnabled(Context context) {
|
|
27
|
+
return context.getResources()
|
|
28
|
+
.getBoolean(R.bool.twiliovoicereactnative_firebasemessagingservice_enabled);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Get configuration boolean, used to determine if full screen notifications are enabled
|
|
33
|
+
* or not.
|
|
34
|
+
* @param context the application context
|
|
35
|
+
* @return a boolean read from the application resources
|
|
36
|
+
*/
|
|
37
|
+
public static boolean isFullScreenNotificationEnabled(Context context) {
|
|
38
|
+
return context.getResources()
|
|
39
|
+
.getBoolean(R.bool.twiliovoicereactnative_fullscreennotification_enabled);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
package com.twiliovoicereactnative;
|
|
2
|
+
|
|
3
|
+
class Constants {
|
|
4
|
+
public static final String VOICE_CHANNEL_GROUP = "notification-group";
|
|
5
|
+
public static final String VOICE_CHANNEL_LOW_IMPORTANCE = "notification-channel-low-importance";
|
|
6
|
+
public static final String VOICE_CHANNEL_HIGH_IMPORTANCE = "notification-channel-high-importance";
|
|
7
|
+
public static final String VOICE_CHANNEL_DEFAULT_IMPORTANCE = "notification-channel-normal-importance";
|
|
8
|
+
public static final String ACTION_ACCEPT_CALL = "ACTION_ACCEPT_CALL";
|
|
9
|
+
public static final String ACTION_REJECT_CALL = "ACTION_REJECT_CALL";
|
|
10
|
+
public static final String ACTION_CANCEL_ACTIVE_CALL_NOTIFICATION = "ACTION_CANCEL_ACTIVE_CALL_NOTIFICATION";
|
|
11
|
+
public static final String ACTION_INCOMING_CALL = "ACTION_INCOMING_CALL";
|
|
12
|
+
public static final String ACTION_CANCEL_CALL = "ACTION_CANCEL_CALL";
|
|
13
|
+
public static final String ACTION_CALL_DISCONNECT = "ACTION_CALL_DISCONNECT";
|
|
14
|
+
public static final String ACTION_RAISE_OUTGOING_CALL_NOTIFICATION = "ACTION_RAISE_OUTGOING_CALL_NOTIFICATION";
|
|
15
|
+
public static final String ACTION_PUSH_APP_TO_FOREGROUND = "ACTION_PUSH_APP_TO_FOREGROUND";
|
|
16
|
+
public static final String ACTION_FOREGROUND_AND_DEPRIORITIZE_INCOMING_CALL_NOTIFICATION = "ACTION_FOREGROUND_AND_DEPRIORITIZE_INCOMING_CALL_NOTIFICATION";
|
|
17
|
+
public static final String MSG_KEY_UUID = "UUID";
|
|
18
|
+
public static final String JS_EVENT_KEY_CALL_INFO = "call";
|
|
19
|
+
public static final String JS_EVENT_KEY_CALL_INVITE_INFO = "callInvite";
|
|
20
|
+
public static final String JS_EVENT_KEY_CANCELLED_CALL_INVITE_INFO = "cancelledCallInvite";
|
|
21
|
+
public static final String PREFERENCES_FILE = "com.twilio.twiliovoicereactnative.preferences";
|
|
22
|
+
public static final String INCOMING_CALL_CONTACT_HANDLE_TEMPLATE_PREFERENCES_KEY = "incomingCallContactHandleTemplatePreferenceKey";
|
|
23
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
package com.twiliovoicereactnative;
|
|
2
|
+
|
|
3
|
+
import android.app.Activity;
|
|
4
|
+
import android.content.Intent;
|
|
5
|
+
import android.os.Bundle;
|
|
6
|
+
import expo.modules.core.interfaces.ReactActivityLifecycleListener;
|
|
7
|
+
|
|
8
|
+
public class ExpoActivityLifecycleListener implements ReactActivityLifecycleListener {
|
|
9
|
+
VoiceActivityProxy voiceActivityProxy;
|
|
10
|
+
|
|
11
|
+
@Override
|
|
12
|
+
public void onCreate(Activity activity, Bundle savedInstanceState) {
|
|
13
|
+
this.voiceActivityProxy = new VoiceActivityProxy(activity, null);
|
|
14
|
+
this.voiceActivityProxy.onCreate(savedInstanceState);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@Override
|
|
18
|
+
public boolean onNewIntent(Intent intent) {
|
|
19
|
+
this.voiceActivityProxy.onNewIntent(intent);
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@Override
|
|
24
|
+
public void onDestroy(Activity activity) {
|
|
25
|
+
this.voiceActivityProxy.onDestroy();
|
|
26
|
+
}
|
|
27
|
+
}
|
package/android/src/main/java/com/twiliovoicereactnative/ExpoApplicationLifecycleListener.java
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.twiliovoicereactnative;
|
|
2
|
+
|
|
3
|
+
import android.app.Application;
|
|
4
|
+
import expo.modules.core.interfaces.ApplicationLifecycleListener;
|
|
5
|
+
|
|
6
|
+
public class ExpoApplicationLifecycleListener implements ApplicationLifecycleListener {
|
|
7
|
+
VoiceApplicationProxy voiceApplicationProxy;
|
|
8
|
+
|
|
9
|
+
@Override
|
|
10
|
+
public void onCreate(Application application) {
|
|
11
|
+
this.voiceApplicationProxy = new VoiceApplicationProxy(application);
|
|
12
|
+
this.voiceApplicationProxy.onCreate();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
package com.twiliovoicereactnative
|
|
2
|
+
|
|
3
|
+
import expo.modules.kotlin.modules.Module
|
|
4
|
+
import expo.modules.kotlin.modules.ModuleDefinition
|
|
5
|
+
import com.twilio.voice.ConnectOptions
|
|
6
|
+
import java.util.UUID
|
|
7
|
+
|
|
8
|
+
class ExpoModule : Module() {
|
|
9
|
+
private val log = SDKLog(this.javaClass)
|
|
10
|
+
|
|
11
|
+
override fun definition() = ModuleDefinition {
|
|
12
|
+
Name("TwilioVoiceReactNative")
|
|
13
|
+
|
|
14
|
+
Function("voice_connect") { accessToken: String ->
|
|
15
|
+
val context = appContext.reactContext ?: return@Function
|
|
16
|
+
|
|
17
|
+
val connectOptions = ConnectOptions.Builder(accessToken).build()
|
|
18
|
+
val uuid = UUID.randomUUID()
|
|
19
|
+
val callListenerProxy = CallListenerProxy(uuid, context)
|
|
20
|
+
|
|
21
|
+
val callRecord = CallRecordDatabase.CallRecord(
|
|
22
|
+
uuid,
|
|
23
|
+
VoiceApplicationProxy.getVoiceServiceApi().connect(
|
|
24
|
+
connectOptions,
|
|
25
|
+
callListenerProxy
|
|
26
|
+
),
|
|
27
|
+
"Callee", // provide a mechanism for determining the name of the callee
|
|
28
|
+
HashMap(), // provide a mechanism for passing custom TwiML parameters
|
|
29
|
+
CallRecord.Direction.OUTGOING,
|
|
30
|
+
"Display Name" // provide a mechanism for determining the notification display name of the callee
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
VoiceApplicationProxy.getCallRecordDatabase().add(callRecord)
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
package com.twiliovoicereactnative;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import expo.modules.core.interfaces.Package;
|
|
5
|
+
import expo.modules.core.interfaces.ReactActivityLifecycleListener;
|
|
6
|
+
import expo.modules.core.interfaces.ApplicationLifecycleListener;
|
|
7
|
+
import java.util.Collections;
|
|
8
|
+
import java.util.List;
|
|
9
|
+
|
|
10
|
+
public class ExpoPackage implements Package {
|
|
11
|
+
@Override
|
|
12
|
+
public List<? extends ReactActivityLifecycleListener> createReactActivityLifecycleListeners(Context activityContext) {
|
|
13
|
+
return Collections.singletonList(new ExpoActivityLifecycleListener());
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Override
|
|
17
|
+
public List<? extends ApplicationLifecycleListener> createApplicationLifecycleListeners(Context applicationContext) {
|
|
18
|
+
return Collections.singletonList(new ExpoApplicationLifecycleListener());
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
package com.twiliovoicereactnative;
|
|
2
|
+
|
|
3
|
+
import android.util.Pair;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.NonNull;
|
|
6
|
+
import androidx.annotation.Nullable;
|
|
7
|
+
|
|
8
|
+
import com.facebook.react.bridge.Arguments;
|
|
9
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
10
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
11
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
12
|
+
import com.facebook.react.bridge.WritableArray;
|
|
13
|
+
import com.facebook.react.bridge.WritableMap;
|
|
14
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
15
|
+
|
|
16
|
+
import java.lang.ref.WeakReference;
|
|
17
|
+
|
|
18
|
+
class JSEventEmitter {
|
|
19
|
+
private static final SDKLog logger = new SDKLog(JSEventEmitter.class);
|
|
20
|
+
private WeakReference<ReactApplicationContext> context = new WeakReference<>(null);
|
|
21
|
+
|
|
22
|
+
public void setContext(ReactApplicationContext context) {
|
|
23
|
+
this.context = new WeakReference<>(context);
|
|
24
|
+
}
|
|
25
|
+
public void sendEvent(String eventName, @Nullable WritableMap params) {
|
|
26
|
+
logger.debug("sendEvent " + eventName + " params " + params);
|
|
27
|
+
if ((null != context.get()) &&
|
|
28
|
+
context.get().hasActiveReactInstance()) {
|
|
29
|
+
context.get()
|
|
30
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
31
|
+
.emit(eventName, params);
|
|
32
|
+
} else {
|
|
33
|
+
logger.warning(
|
|
34
|
+
String.format(
|
|
35
|
+
"attempt to sendEvent without context {%s} or Catalyst instance not active",
|
|
36
|
+
context.get()));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public static WritableArray constructJSArray(@NonNull Object...entries) {
|
|
41
|
+
WritableArray params = Arguments.createArray();
|
|
42
|
+
for (Object entry: entries) {
|
|
43
|
+
if ((entry instanceof String)) {
|
|
44
|
+
params.pushString((String)entry);
|
|
45
|
+
} else if (entry instanceof ReadableMap) {
|
|
46
|
+
params.pushMap((ReadableMap) entry);
|
|
47
|
+
} else if (entry instanceof ReadableArray) {
|
|
48
|
+
params.pushArray((ReadableArray) entry);
|
|
49
|
+
} else if (entry instanceof Boolean) {
|
|
50
|
+
params.pushBoolean((Boolean) entry);
|
|
51
|
+
} else if (entry instanceof Integer) {
|
|
52
|
+
params.pushInt((Integer) entry);
|
|
53
|
+
} else if (entry instanceof Float) {
|
|
54
|
+
params.pushDouble((Float) entry);
|
|
55
|
+
} else if (entry instanceof Double) {
|
|
56
|
+
params.pushDouble((Double) entry);
|
|
57
|
+
} else if (entry instanceof Long) {
|
|
58
|
+
params.pushDouble((Long) entry);
|
|
59
|
+
} else if (entry == null) {
|
|
60
|
+
logger.debug("constructJSArray: filtering null value");
|
|
61
|
+
} else {
|
|
62
|
+
logger.debug(String.format("constructJSArray: unexpected type %s", entry.getClass()));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return params;
|
|
66
|
+
}
|
|
67
|
+
@SafeVarargs
|
|
68
|
+
public static WritableMap constructJSMap(@NonNull Pair<String, Object>...entries) {
|
|
69
|
+
WritableMap params = Arguments.createMap();
|
|
70
|
+
for (Pair<String, Object> entry: entries) {
|
|
71
|
+
if ((entry.second instanceof String)) {
|
|
72
|
+
params.putString(entry.first, (String) entry.second);
|
|
73
|
+
} else if (entry.second instanceof ReadableMap) {
|
|
74
|
+
params.putMap(entry.first, (ReadableMap) entry.second);
|
|
75
|
+
} else if (entry.second instanceof ReadableArray) {
|
|
76
|
+
params.putArray(entry.first, (ReadableArray) entry.second);
|
|
77
|
+
} else if (entry.second instanceof Boolean) {
|
|
78
|
+
params.putBoolean(entry.first, (Boolean) entry.second);
|
|
79
|
+
} else if (entry.second instanceof Integer) {
|
|
80
|
+
params.putInt(entry.first, (Integer) entry.second);
|
|
81
|
+
} else if (entry.second instanceof Float) {
|
|
82
|
+
params.putDouble(entry.first, (Float) entry.second);
|
|
83
|
+
} else if (entry.second instanceof Double) {
|
|
84
|
+
params.putDouble(entry.first, (Double) entry.second);
|
|
85
|
+
} else if (entry.second instanceof Long) {
|
|
86
|
+
params.putDouble(entry.first, (Long) entry.second);
|
|
87
|
+
} else if (entry.second == null) {
|
|
88
|
+
logger.debug("constructJSMap: filtering null value");
|
|
89
|
+
} else {
|
|
90
|
+
logger.debug(String.format(
|
|
91
|
+
"constructJSMap: unexpected type %s",
|
|
92
|
+
entry.second.getClass()
|
|
93
|
+
));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return params;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
package com.twiliovoicereactnative;
|
|
2
|
+
|
|
3
|
+
import android.content.Context;
|
|
4
|
+
import android.media.AudioAttributes;
|
|
5
|
+
import android.media.SoundPool;
|
|
6
|
+
|
|
7
|
+
import java.util.HashMap;
|
|
8
|
+
import java.util.Map;
|
|
9
|
+
|
|
10
|
+
class MediaPlayerManager {
|
|
11
|
+
public enum SoundTable {
|
|
12
|
+
INCOMING,
|
|
13
|
+
OUTGOING,
|
|
14
|
+
DISCONNECT,
|
|
15
|
+
RINGTONE
|
|
16
|
+
}
|
|
17
|
+
private final SoundPool soundPool;
|
|
18
|
+
private final Map<SoundTable, Integer> soundMap;
|
|
19
|
+
private int activeStream;
|
|
20
|
+
|
|
21
|
+
MediaPlayerManager(Context context) {
|
|
22
|
+
soundPool = (new SoundPool.Builder())
|
|
23
|
+
.setMaxStreams(2)
|
|
24
|
+
.setAudioAttributes(
|
|
25
|
+
new AudioAttributes.Builder()
|
|
26
|
+
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
|
27
|
+
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
|
|
28
|
+
.build())
|
|
29
|
+
.build();
|
|
30
|
+
activeStream = 0;
|
|
31
|
+
soundMap = new HashMap<>();
|
|
32
|
+
soundMap.put(SoundTable.INCOMING, soundPool.load(context, R.raw.incoming, 1));
|
|
33
|
+
soundMap.put(SoundTable.OUTGOING, soundPool.load(context, R.raw.outgoing, 1));
|
|
34
|
+
soundMap.put(SoundTable.DISCONNECT, soundPool.load(context, R.raw.disconnect, 1));
|
|
35
|
+
soundMap.put(SoundTable.RINGTONE, soundPool.load(context, R.raw.ringtone, 1));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public void play(final SoundTable sound) {
|
|
39
|
+
activeStream = soundPool.play(
|
|
40
|
+
soundMap.get(sound),
|
|
41
|
+
1.f,
|
|
42
|
+
1.f,
|
|
43
|
+
1,
|
|
44
|
+
(SoundTable.DISCONNECT== sound) ? 0 : -1,
|
|
45
|
+
1.f);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public void stop() {
|
|
49
|
+
soundPool.stop(activeStream);
|
|
50
|
+
activeStream = 0;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@Override
|
|
54
|
+
protected void finalize() throws Throwable {
|
|
55
|
+
soundPool.release();
|
|
56
|
+
super.finalize();
|
|
57
|
+
}
|
|
58
|
+
}
|