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.
Files changed (227) hide show
  1. package/LICENSE +206 -0
  2. package/README.md +179 -0
  3. package/android/build.gradle +113 -0
  4. package/android/gradle.properties +29 -0
  5. package/android/src/main/AndroidManifest.xml +30 -0
  6. package/android/src/main/java/com/twiliovoicereactnative/AudioSwitchManager.java +141 -0
  7. package/android/src/main/java/com/twiliovoicereactnative/CallListenerProxy.java +186 -0
  8. package/android/src/main/java/com/twiliovoicereactnative/CallMessageListenerProxy.java +103 -0
  9. package/android/src/main/java/com/twiliovoicereactnative/CallRecordDatabase.java +183 -0
  10. package/android/src/main/java/com/twiliovoicereactnative/CommonConstants.java +195 -0
  11. package/android/src/main/java/com/twiliovoicereactnative/ConfigurationProperties.java +41 -0
  12. package/android/src/main/java/com/twiliovoicereactnative/Constants.java +23 -0
  13. package/android/src/main/java/com/twiliovoicereactnative/ExpoActivityLifecycleListener.java +27 -0
  14. package/android/src/main/java/com/twiliovoicereactnative/ExpoApplicationLifecycleListener.java +14 -0
  15. package/android/src/main/java/com/twiliovoicereactnative/ExpoModule.kt +36 -0
  16. package/android/src/main/java/com/twiliovoicereactnative/ExpoPackage.java +20 -0
  17. package/android/src/main/java/com/twiliovoicereactnative/JSEventEmitter.java +98 -0
  18. package/android/src/main/java/com/twiliovoicereactnative/MediaPlayerManager.java +58 -0
  19. package/android/src/main/java/com/twiliovoicereactnative/NotificationUtility.java +363 -0
  20. package/android/src/main/java/com/twiliovoicereactnative/ReactNativeArgumentsSerializer.java +276 -0
  21. package/android/src/main/java/com/twiliovoicereactnative/SDKLog.java +74 -0
  22. package/android/src/main/java/com/twiliovoicereactnative/StatsListenerProxy.java +178 -0
  23. package/android/src/main/java/com/twiliovoicereactnative/TwilioVoiceReactNativeModule.java +778 -0
  24. package/android/src/main/java/com/twiliovoicereactnative/TwilioVoiceReactNativePackage.java +28 -0
  25. package/android/src/main/java/com/twiliovoicereactnative/VoiceActivityProxy.java +101 -0
  26. package/android/src/main/java/com/twiliovoicereactnative/VoiceApplicationProxy.java +133 -0
  27. package/android/src/main/java/com/twiliovoicereactnative/VoiceFirebaseMessagingService.java +88 -0
  28. package/android/src/main/java/com/twiliovoicereactnative/VoiceService.java +403 -0
  29. package/android/src/main/res/drawable/answered_call_small_icon.png +0 -0
  30. package/android/src/main/res/drawable/ic_launcher_round.png +0 -0
  31. package/android/src/main/res/drawable/ic_launcher_sdk.png +0 -0
  32. package/android/src/main/res/drawable/incoming_call_small_icon.png +0 -0
  33. package/android/src/main/res/drawable/outgoing_call_small_icon.png +0 -0
  34. package/android/src/main/res/raw/disconnect.wav +0 -0
  35. package/android/src/main/res/raw/incoming.wav +0 -0
  36. package/android/src/main/res/raw/outgoing.wav +0 -0
  37. package/android/src/main/res/raw/ringtone.wav +0 -0
  38. package/android/src/main/res/raw/silent.wav +0 -0
  39. package/android/src/main/res/values/colors.xml +11 -0
  40. package/android/src/main/res/values/config.xml +5 -0
  41. package/android/src/main/res/values/dimens.xml +7 -0
  42. package/android/src/main/res/values/strings.xml +25 -0
  43. package/android/src/main/res/values/styles.xml +10 -0
  44. package/android/src/main/res/values-night/colors.xml +11 -0
  45. package/expo-config-plugin/android.js +191 -0
  46. package/expo-config-plugin/ios.js +22 -0
  47. package/expo-module.config.json +6 -0
  48. package/ios/TwilioVoicePushRegistry.h +19 -0
  49. package/ios/TwilioVoicePushRegistry.m +72 -0
  50. package/ios/TwilioVoiceReactNative+CallInvite.m +56 -0
  51. package/ios/TwilioVoiceReactNative+CallKit.m +533 -0
  52. package/ios/TwilioVoiceReactNative+CallMessage.m +81 -0
  53. package/ios/TwilioVoiceReactNative.h +74 -0
  54. package/ios/TwilioVoiceReactNative.m +1046 -0
  55. package/ios/TwilioVoiceReactNative.xcodeproj/project.pbxproj +328 -0
  56. package/ios/TwilioVoiceReactNativeConstants.h +200 -0
  57. package/ios/Utilities/TwilioVoiceStatsReport.h +175 -0
  58. package/lib/commonjs/AudioDevice.js +101 -0
  59. package/lib/commonjs/AudioDevice.js.map +1 -0
  60. package/lib/commonjs/Call.js +765 -0
  61. package/lib/commonjs/Call.js.map +1 -0
  62. package/lib/commonjs/CallInvite.js +452 -0
  63. package/lib/commonjs/CallInvite.js.map +1 -0
  64. package/lib/commonjs/CallMessage/CallMessage.js +54 -0
  65. package/lib/commonjs/CallMessage/CallMessage.js.map +1 -0
  66. package/lib/commonjs/CallMessage/IncomingCallMessage.js +120 -0
  67. package/lib/commonjs/CallMessage/IncomingCallMessage.js.map +1 -0
  68. package/lib/commonjs/CallMessage/OutgoingCallMessage.js +148 -0
  69. package/lib/commonjs/CallMessage/OutgoingCallMessage.js.map +1 -0
  70. package/lib/commonjs/ExpoModule.js +69 -0
  71. package/lib/commonjs/ExpoModule.js.map +1 -0
  72. package/lib/commonjs/Voice.js +611 -0
  73. package/lib/commonjs/Voice.js.map +1 -0
  74. package/lib/commonjs/common.js +26 -0
  75. package/lib/commonjs/common.js.map +1 -0
  76. package/lib/commonjs/constants.js +158 -0
  77. package/lib/commonjs/constants.js.map +1 -0
  78. package/lib/commonjs/error/InvalidArgumentError.js +32 -0
  79. package/lib/commonjs/error/InvalidArgumentError.js.map +1 -0
  80. package/lib/commonjs/error/InvalidStateError.js +33 -0
  81. package/lib/commonjs/error/InvalidStateError.js.map +1 -0
  82. package/lib/commonjs/error/TwilioError.js +38 -0
  83. package/lib/commonjs/error/TwilioError.js.map +1 -0
  84. package/lib/commonjs/error/UnsupportedPlatformError.js +33 -0
  85. package/lib/commonjs/error/UnsupportedPlatformError.js.map +1 -0
  86. package/lib/commonjs/error/generated.js +2343 -0
  87. package/lib/commonjs/error/generated.js.map +1 -0
  88. package/lib/commonjs/error/index.js +112 -0
  89. package/lib/commonjs/error/index.js.map +1 -0
  90. package/lib/commonjs/error/utility.js +37 -0
  91. package/lib/commonjs/error/utility.js.map +1 -0
  92. package/lib/commonjs/index.js +95 -0
  93. package/lib/commonjs/index.js.map +1 -0
  94. package/lib/commonjs/type/AudioDevice.js +6 -0
  95. package/lib/commonjs/type/AudioDevice.js.map +1 -0
  96. package/lib/commonjs/type/Call.js +6 -0
  97. package/lib/commonjs/type/Call.js.map +1 -0
  98. package/lib/commonjs/type/CallInvite.js +6 -0
  99. package/lib/commonjs/type/CallInvite.js.map +1 -0
  100. package/lib/commonjs/type/CallKit.js +30 -0
  101. package/lib/commonjs/type/CallKit.js.map +1 -0
  102. package/lib/commonjs/type/CallMessage.js +6 -0
  103. package/lib/commonjs/type/CallMessage.js.map +1 -0
  104. package/lib/commonjs/type/Error.js +6 -0
  105. package/lib/commonjs/type/Error.js.map +1 -0
  106. package/lib/commonjs/type/NativeModule.js +6 -0
  107. package/lib/commonjs/type/NativeModule.js.map +1 -0
  108. package/lib/commonjs/type/RTCStats.js +29 -0
  109. package/lib/commonjs/type/RTCStats.js.map +1 -0
  110. package/lib/commonjs/type/Voice.js +6 -0
  111. package/lib/commonjs/type/Voice.js.map +1 -0
  112. package/lib/commonjs/type/common.js +2 -0
  113. package/lib/commonjs/type/common.js.map +1 -0
  114. package/lib/module/AudioDevice.js +97 -0
  115. package/lib/module/AudioDevice.js.map +1 -0
  116. package/lib/module/Call.js +766 -0
  117. package/lib/module/Call.js.map +1 -0
  118. package/lib/module/CallInvite.js +450 -0
  119. package/lib/module/CallInvite.js.map +1 -0
  120. package/lib/module/CallMessage/CallMessage.js +51 -0
  121. package/lib/module/CallMessage/CallMessage.js.map +1 -0
  122. package/lib/module/CallMessage/IncomingCallMessage.js +116 -0
  123. package/lib/module/CallMessage/IncomingCallMessage.js.map +1 -0
  124. package/lib/module/CallMessage/OutgoingCallMessage.js +154 -0
  125. package/lib/module/CallMessage/OutgoingCallMessage.js.map +1 -0
  126. package/lib/module/ExpoModule.js +58 -0
  127. package/lib/module/ExpoModule.js.map +1 -0
  128. package/lib/module/Voice.js +598 -0
  129. package/lib/module/Voice.js.map +1 -0
  130. package/lib/module/common.js +11 -0
  131. package/lib/module/common.js.map +1 -0
  132. package/lib/module/constants.js +151 -0
  133. package/lib/module/constants.js.map +1 -0
  134. package/lib/module/error/InvalidArgumentError.js +23 -0
  135. package/lib/module/error/InvalidArgumentError.js.map +1 -0
  136. package/lib/module/error/InvalidStateError.js +24 -0
  137. package/lib/module/error/InvalidStateError.js.map +1 -0
  138. package/lib/module/error/TwilioError.js +29 -0
  139. package/lib/module/error/TwilioError.js.map +1 -0
  140. package/lib/module/error/UnsupportedPlatformError.js +24 -0
  141. package/lib/module/error/UnsupportedPlatformError.js.map +1 -0
  142. package/lib/module/error/generated.js +2315 -0
  143. package/lib/module/error/generated.js.map +1 -0
  144. package/lib/module/error/index.js +6 -0
  145. package/lib/module/error/index.js.map +1 -0
  146. package/lib/module/error/utility.js +27 -0
  147. package/lib/module/error/utility.js.map +1 -0
  148. package/lib/module/index.js +23 -0
  149. package/lib/module/index.js.map +1 -0
  150. package/lib/module/type/AudioDevice.js +2 -0
  151. package/lib/module/type/AudioDevice.js.map +1 -0
  152. package/lib/module/type/Call.js +2 -0
  153. package/lib/module/type/Call.js.map +1 -0
  154. package/lib/module/type/CallInvite.js +2 -0
  155. package/lib/module/type/CallInvite.js.map +1 -0
  156. package/lib/module/type/CallKit.js +22 -0
  157. package/lib/module/type/CallKit.js.map +1 -0
  158. package/lib/module/type/CallMessage.js +2 -0
  159. package/lib/module/type/CallMessage.js.map +1 -0
  160. package/lib/module/type/Error.js +2 -0
  161. package/lib/module/type/Error.js.map +1 -0
  162. package/lib/module/type/NativeModule.js +2 -0
  163. package/lib/module/type/NativeModule.js.map +1 -0
  164. package/lib/module/type/RTCStats.js +21 -0
  165. package/lib/module/type/RTCStats.js.map +1 -0
  166. package/lib/module/type/Voice.js +2 -0
  167. package/lib/module/type/Voice.js.map +1 -0
  168. package/lib/module/type/common.js +2 -0
  169. package/lib/module/type/common.js.map +1 -0
  170. package/lib/typescript/AudioDevice.d.ts +74 -0
  171. package/lib/typescript/Call.d.ts +874 -0
  172. package/lib/typescript/CallInvite.d.ts +484 -0
  173. package/lib/typescript/CallMessage/CallMessage.d.ts +53 -0
  174. package/lib/typescript/CallMessage/IncomingCallMessage.d.ts +75 -0
  175. package/lib/typescript/CallMessage/OutgoingCallMessage.d.ts +198 -0
  176. package/lib/typescript/ExpoModule.d.ts +13 -0
  177. package/lib/typescript/Voice.d.ts +620 -0
  178. package/lib/typescript/common.d.ts +11 -0
  179. package/lib/typescript/constants.d.ts +148 -0
  180. package/lib/typescript/error/InvalidArgumentError.d.ts +11 -0
  181. package/lib/typescript/error/InvalidStateError.d.ts +12 -0
  182. package/lib/typescript/error/TwilioError.d.ts +14 -0
  183. package/lib/typescript/error/UnsupportedPlatformError.d.ts +12 -0
  184. package/lib/typescript/error/generated.d.ts +1558 -0
  185. package/lib/typescript/error/index.d.ts +5 -0
  186. package/lib/typescript/error/utility.d.ts +12 -0
  187. package/lib/typescript/index.d.ts +18 -0
  188. package/lib/typescript/type/AudioDevice.d.ts +15 -0
  189. package/lib/typescript/type/Call.d.ts +59 -0
  190. package/lib/typescript/type/CallInvite.d.ts +40 -0
  191. package/lib/typescript/type/CallKit.d.ts +60 -0
  192. package/lib/typescript/type/CallMessage.d.ts +20 -0
  193. package/lib/typescript/type/Error.d.ts +9 -0
  194. package/lib/typescript/type/NativeModule.d.ts +59 -0
  195. package/lib/typescript/type/RTCStats.d.ts +91 -0
  196. package/lib/typescript/type/Voice.d.ts +16 -0
  197. package/lib/typescript/type/common.d.ts +15 -0
  198. package/package.json +167 -0
  199. package/src/AudioDevice.tsx +88 -0
  200. package/src/Call.tsx +1343 -0
  201. package/src/CallInvite.tsx +757 -0
  202. package/src/CallMessage/CallMessage.ts +83 -0
  203. package/src/CallMessage/IncomingCallMessage.ts +104 -0
  204. package/src/CallMessage/OutgoingCallMessage.ts +308 -0
  205. package/src/ExpoModule.ts +59 -0
  206. package/src/Voice.tsx +1010 -0
  207. package/src/common.ts +16 -0
  208. package/src/constants.ts +193 -0
  209. package/src/error/InvalidArgumentError.ts +19 -0
  210. package/src/error/InvalidStateError.ts +19 -0
  211. package/src/error/TwilioError.ts +22 -0
  212. package/src/error/UnsupportedPlatformError.ts +19 -0
  213. package/src/error/generated.ts +2277 -0
  214. package/src/error/index.ts +18 -0
  215. package/src/error/utility.ts +36 -0
  216. package/src/index.tsx +24 -0
  217. package/src/type/AudioDevice.ts +18 -0
  218. package/src/type/Call.ts +102 -0
  219. package/src/type/CallInvite.ts +59 -0
  220. package/src/type/CallKit.ts +61 -0
  221. package/src/type/CallMessage.ts +31 -0
  222. package/src/type/Error.ts +11 -0
  223. package/src/type/NativeModule.ts +93 -0
  224. package/src/type/RTCStats.ts +99 -0
  225. package/src/type/Voice.ts +31 -0
  226. package/src/type/common.ts +16 -0
  227. 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
+ }
@@ -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
+ }