omikit-plugin 0.3.0 → 1.0.0

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.
@@ -70,19 +70,6 @@ android {
70
70
 
71
71
  }
72
72
 
73
- repositories {
74
- mavenCentral()
75
- google()
76
- jcenter() // Warning: this repository is going to shut down soon
77
- maven {
78
- url("https://vihatgroup.jfrog.io/artifactory/omi-voice/")
79
- credentials {
80
- username = "downloader"
81
- password = "Omi@2022"
82
- }
83
- }
84
- }
85
-
86
73
  allprojects {
87
74
  repositories {
88
75
  google()
@@ -109,7 +96,7 @@ dependencies {
109
96
  implementation "com.facebook.react:react-native:+" // From node_modules
110
97
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
111
98
 
112
- api 'vn.vihat.omicall:omi-sdk:0.9.12'
99
+ api 'vn.vihat.omicall:omi-sdk:1.0.10'
113
100
 
114
101
  implementation 'androidx.core:core-ktx:1.7.0'
115
102
  implementation 'androidx.fragment:fragment-ktx:1.4.0'
@@ -124,6 +111,14 @@ dependencies {
124
111
  implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
125
112
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'
126
113
  implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0"
114
+ implementation 'androidx.databinding:viewbinding:7.1.2'
115
+ implementation("com.squareup.retrofit2:retrofit:2.9.0") {
116
+ exclude module: 'okhttp'
117
+ }
118
+ implementation "com.squareup.retrofit2:converter-gson:2.9.0"
119
+ implementation "com.squareup.okhttp3:okhttp:4.9.1"
120
+ implementation "com.squareup.okhttp3:okhttp-urlconnection:4.9.1"
121
+ implementation "com.squareup.okhttp3:logging-interceptor:4.9.1"
127
122
  }
128
123
 
129
124
  if (isNewArchitectureEnabled()) {
@@ -1,46 +1,160 @@
1
1
  package com.omikitplugin
2
2
 
3
3
  import android.Manifest
4
+ import android.content.Context
5
+ import android.hardware.camera2.CameraManager
6
+ import android.os.Build
7
+ import android.util.Log
4
8
  import androidx.core.app.ActivityCompat
5
9
  import com.facebook.react.ReactActivity
6
10
  import com.facebook.react.bridge.*
7
11
  import com.facebook.react.modules.core.RCTNativeAppEventEmitter
12
+ import com.omikitplugin.constants.*
8
13
  import vn.vihat.omicall.omisdk.OmiClient
9
14
  import vn.vihat.omicall.omisdk.OmiListener
10
- import vn.vihat.omicall.omisdk.OmiSDKUtils
15
+ import vn.vihat.omicall.omisdk.utils.OmiSDKUtils
11
16
 
12
17
 
13
18
  class OmikitPluginModule(reactContext: ReactApplicationContext?) :
14
- ReactContextBaseJavaModule(reactContext), OmiListener {
19
+ ReactContextBaseJavaModule(reactContext) {
20
+
21
+
22
+ private var icSpeaker = false
23
+ private var isMute = false
24
+
25
+ private val callListener = object : OmiListener {
26
+
27
+ override fun incomingReceived(callerId: Int, phoneNumber: String?, isVideo: Boolean?) {
28
+ val map: WritableMap = WritableNativeMap()
29
+ map.putBoolean("isVideo", isVideo ?: true)
30
+ map.putString("callerNumber", phoneNumber)
31
+ sendEvent(INCOMING_RECEIVED, map)
32
+ Log.d("omikit", "incomingReceived: ")
33
+ }
34
+
35
+ override fun onCallEnd() {
36
+ sendEvent(CALL_END, null)
37
+ }
38
+
39
+ override fun onCallEstablished(
40
+ callerId: Int,
41
+ phoneNumber: String?,
42
+ isVideo: Boolean?,
43
+ startTime: Long,
44
+ ) {
45
+ val map: WritableMap = WritableNativeMap()
46
+ val sipNumber = OmiClient.instance.callUUID
47
+ map.putString("callerNumber", sipNumber)
48
+ map.putBoolean("isVideo", isVideo ?: true)
49
+ sendEvent(CALL_ESTABLISHED, map)
50
+ }
51
+
52
+ override fun onConnectionTimeout() {
53
+ // sendEvent("onConnectionTimeout", null)
54
+ }
55
+
56
+ override fun onHold(isHold: Boolean) {
57
+ val map: WritableMap = WritableNativeMap()
58
+ map.putBoolean("isHold", isHold)
59
+ sendEvent(HOLD, map)
60
+ }
61
+
62
+ override fun onMuted(isMuted: Boolean) {
63
+ // val map: WritableMap = WritableNativeMap()
64
+ // map.putBoolean("isMuted", isMuted)
65
+ // sendEvent(MUTED, map)
66
+ }
67
+
68
+ override fun onOutgoingStarted(callerId: Int, phoneNumber: String?, isVideo: Boolean?) {
69
+
70
+ }
71
+
72
+ override fun onRinging() {
73
+ // sendEvent("onRinging", null)
74
+ }
75
+
76
+ override fun onVideoSize(width: Int, height: Int) {
77
+
78
+ }
79
+ }
15
80
 
16
81
  override fun getName(): String {
17
82
  return NAME
18
83
  }
19
84
 
85
+ override fun initialize() {
86
+ super.initialize()
87
+ OmiClient(reactApplicationContext!!)
88
+ OmiClient.instance.setListener(callListener)
89
+ }
90
+
20
91
  @ReactMethod
21
92
  fun initCall(data: ReadableMap, promise: Promise) {
22
93
  currentActivity?.runOnUiThread {
23
- val userName = data.getString("userName") as String
24
- val password = data.getString("password") as String
25
- val realm = data.getString("realm") as String
26
- OmiClient.register(reactApplicationContext, userName, password, realm)
27
- ActivityCompat.requestPermissions(
28
- currentActivity!!,
29
- arrayOf(
30
- Manifest.permission.USE_SIP,
31
- Manifest.permission.CALL_PHONE,
32
- Manifest.permission.POST_NOTIFICATIONS,
33
- Manifest.permission.CAMERA,
34
- Manifest.permission.MODIFY_AUDIO_SETTINGS,
35
- Manifest.permission.RECORD_AUDIO,
36
- ),
37
- 0,
38
- )
39
- OmiClient.instance.setListener(this)
94
+ val userName = data.getString("userName")
95
+ val password = data.getString("password")
96
+ val realm = data.getString("realm")
97
+ val host = data.getString("host")
98
+ val isVideo = data.getBoolean("isVideo")
99
+ if (userName != null && password != null && realm != null && host != null) {
100
+ OmiClient.register(
101
+ reactApplicationContext!!,
102
+ userName,
103
+ password,
104
+ isVideo,
105
+ realm,
106
+ host = host,
107
+ customUI = true,
108
+ isTcp = true
109
+ )
110
+ }
111
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
112
+ ActivityCompat.requestPermissions(
113
+ currentActivity!!,
114
+ arrayOf(
115
+ Manifest.permission.USE_SIP,
116
+ Manifest.permission.CALL_PHONE,
117
+ Manifest.permission.CAMERA,
118
+ Manifest.permission.MODIFY_AUDIO_SETTINGS,
119
+ Manifest.permission.RECORD_AUDIO,
120
+ Manifest.permission.POST_NOTIFICATIONS,
121
+ ),
122
+ 0,
123
+ )
124
+ } else {
125
+ ActivityCompat.requestPermissions(
126
+ currentActivity!!,
127
+ arrayOf(
128
+ Manifest.permission.USE_SIP,
129
+ Manifest.permission.CALL_PHONE,
130
+ Manifest.permission.CAMERA,
131
+ Manifest.permission.MODIFY_AUDIO_SETTINGS,
132
+ Manifest.permission.RECORD_AUDIO,
133
+ ),
134
+ 0,
135
+ )
136
+ }
137
+ if (isVideo) {
138
+ val cm = currentActivity!!.getSystemService(Context.CAMERA_SERVICE) as CameraManager
139
+ OmiClient.instance.setCameraManager(cm)
140
+ }
40
141
  promise.resolve(true)
41
142
  }
42
143
  }
43
144
 
145
+ @ReactMethod
146
+ fun getInitialCall(promise: Promise) {
147
+ currentActivity?.runOnUiThread {
148
+ promise.resolve(false)
149
+ }
150
+ }
151
+
152
+ @ReactMethod
153
+ fun joinCall(promise: Promise) {
154
+ OmiClient.instance.pickUp(true)
155
+ promise.resolve(true)
156
+ }
157
+
44
158
  @ReactMethod
45
159
  fun updateToken(data: ReadableMap, promise: Promise) {
46
160
  currentActivity?.runOnUiThread {
@@ -51,21 +165,18 @@ class OmikitPluginModule(reactContext: ReactApplicationContext?) :
51
165
  "",
52
166
  deviceTokenAndroid,
53
167
  deviceId,
54
- appId
168
+ appId,
55
169
  )
56
170
  promise.resolve(true)
57
171
  }
58
172
  }
59
173
 
60
-
61
174
  @ReactMethod
62
175
  fun startCall(data: ReadableMap, promise: Promise) {
63
176
  val phoneNumber = data.getString("phoneNumber") as String
64
177
  val isVideo = data.getBoolean("isVideo")
65
- if (!isVideo) {
66
- OmiClient.instance.startCall(phoneNumber)
67
- promise.resolve(true)
68
- }
178
+ OmiClient.instance.startCall(phoneNumber, isVideo)
179
+ promise.resolve(true)
69
180
  }
70
181
 
71
182
  @ReactMethod
@@ -78,48 +189,16 @@ class OmikitPluginModule(reactContext: ReactApplicationContext?) :
78
189
  fun toggleMute(promise: Promise) {
79
190
  OmiClient.instance.toggleMute()
80
191
  promise.resolve(true)
192
+ isMute = !isMute
193
+ sendEvent(MUTED, isMute)
81
194
  }
82
195
 
83
196
  @ReactMethod
84
- fun toggleSpeak(data: ReadableMap, promise: Promise) {
85
- val useSpeaker = data.getBoolean("useSpeaker")
86
- OmiClient.instance.toggleSpeaker(useSpeaker)
87
- promise.resolve(true)
88
- }
89
-
90
- @ReactMethod
91
- fun decline(promise: Promise) {
92
- OmiClient.instance.decline()
93
- promise.resolve(true)
94
- }
95
-
96
- @ReactMethod
97
- fun hangup(data: ReadableMap, promise: Promise) {
98
- val callId = data.getInt("callId")
99
- OmiClient.instance.hangUp(callId)
100
- promise.resolve(true)
101
- }
102
-
103
-
104
- @ReactMethod
105
- fun onCallStart(data: ReadableMap, promise: Promise) {
106
- val callId = data.getInt("callId")
107
- OmiClient.instance.onCallStarted(callId)
108
- promise.resolve(true)
109
- }
110
-
111
- @ReactMethod
112
- fun onHold(data: ReadableMap, promise: Promise) {
113
- val isHold = data.getBoolean("isHold")
114
- OmiClient.instance.onHold(isHold)
115
- promise.resolve(true)
116
- }
117
-
118
- @ReactMethod
119
- fun onMute(data: ReadableMap, promise: Promise) {
120
- val isMute = data.getBoolean("isMute")
121
- OmiClient.instance.onMuted(isMute)
197
+ fun toggleSpeak(promise: Promise) {
198
+ icSpeaker = !icSpeaker
199
+ OmiClient.instance.toggleSpeaker(icSpeaker)
122
200
  promise.resolve(true)
201
+ sendEvent(SPEAKER, icSpeaker)
123
202
  }
124
203
 
125
204
  @ReactMethod
@@ -141,7 +220,7 @@ class OmikitPluginModule(reactContext: ReactApplicationContext?) :
141
220
  companion object {
142
221
  const val NAME = "OmikitPlugin"
143
222
  fun onDestroy() {
144
- OmiClient.instance.disconnect()
223
+
145
224
  }
146
225
 
147
226
  fun onRequestPermissionsResult(
@@ -156,38 +235,6 @@ class OmikitPluginModule(reactContext: ReactApplicationContext?) :
156
235
  }
157
236
  }
158
237
 
159
- override fun incomingReceived(callerId: Int, phoneNumber: String?) {
160
- val map: WritableMap = WritableNativeMap()
161
- map.putInt("callerId", callerId)
162
- sendEvent("phoneNumber", phoneNumber)
163
- }
164
-
165
- override fun onCallEnd() {
166
- sendEvent("onCallEnd", false)
167
- }
168
-
169
- override fun onCallEstablished() {
170
- sendEvent("onCallEstablished", null)
171
- }
172
-
173
- override fun onConnectionTimeout() {
174
- sendEvent("onConnectionTimeout", null)
175
- }
176
-
177
- override fun onHold(isHold: Boolean) {
178
- sendEvent("onHold", null)
179
- }
180
-
181
- override fun onMuted(isMuted: Boolean) {
182
- val map: WritableMap = WritableNativeMap()
183
- map.putBoolean("isMuted", isMuted)
184
- sendEvent("onMuted", map)
185
- }
186
-
187
- override fun onRinging() {
188
- sendEvent("onRinging", null)
189
- }
190
-
191
238
  private fun sendEvent(eventName: String?, params: Any?) {
192
239
  currentActivity?.runOnUiThread {
193
240
  reactApplicationContext.getJSModule(RCTNativeAppEventEmitter::class.java)
@@ -3,29 +3,18 @@ package com.omikitplugin.constants
3
3
  //EVENT
4
4
  const val INIT_CALL = "INIT_CALL";
5
5
  const val UPDATE_TOKEN = "UPDATE_TOKEN";
6
- const val START_OMI_SERVICE = "START_OMI_SERVICE";
7
6
  const val START_CALL = "START_CALL";
8
7
  const val END_CALL = "END_CALL";
9
8
  const val TOGGLE_MUTE = "TOGGLE_MUTE";
10
9
  const val TOGGLE_SPEAK = "TOGGLE_SPEAK";
11
- const val CHECK_ON_GOING_CALL = "CHECK_ON_GOING_CALL";
12
- const val DECLINE = "DECLINE";
13
- const val FORWARD_CALL_TO = "FORWARD_CALL_TO";
14
- const val HANGUP = "HANGUP";
15
- const val ON_CALL_STARTED = "ON_CALL_STARTED";
16
- const val ON_HOLD = "ON_HOLD";
17
- const val ON_IN_COMING_RECEIVE = "ON_IN_COMING_RECEIVE";
18
- const val ON_MUTE = "ON_MUTE";
19
- const val ON_OUT_GOING = "ON_OUT_GOING";
20
10
  const val REGISTER = "REGISTER";
21
11
  const val SEND_DTMF = "SEND_DTMF";
22
12
 
23
13
  //LISTENER
24
- const val onCallEstablished = "CALL_ESTABLISHED"
25
- const val onCallEnd = "CALL_END"
26
- const val incomingReceived = "INCOMING_RECEIVED"
27
- const val onRinging = "RINGING"
28
- const val onConnectionTimeout = "CONNECTION_TIMEOUT"
29
- const val onHold = "HOLD"
30
- const val onMuted = "MUTED"
31
-
14
+ const val CALL_ESTABLISHED = "CALL_ESTABLISHED"
15
+ const val CALL_END = "CALL_END"
16
+ const val INCOMING_RECEIVED = "INCOMING_RECEIVED"
17
+ //const val CONNECTION_TIMEOUT = "CONNECTION_TIMEOUT"
18
+ const val HOLD = "HOLD"
19
+ const val MUTED = "MUTED"
20
+ const val SPEAKER = "SPEAKER"
@@ -15,15 +15,10 @@ import AVFoundation
15
15
  class CallManager {
16
16
 
17
17
  static private var instance: CallManager? = nil // Instance
18
- var call: OMICall? // Call
19
- private var numberRetry: Int = 0
20
- var isCallError: Bool = false // check when call error
21
18
  private let omiLib = OMISIPLib.sharedInstance()
22
- private var isSpeaker = false
23
- var currentConfirmedCall : OMICall?
19
+ var isSpeaker = false
24
20
  var videoManager: OMIVideoViewManager?
25
21
 
26
-
27
22
  /// Get instance
28
23
  static func shareInstance() -> CallManager {
29
24
  if (instance == nil) {
@@ -32,6 +27,14 @@ class CallManager {
32
27
  return instance!
33
28
  }
34
29
 
30
+ func getAvailableCall() -> OMICall? {
31
+ var currentCall = omiLib.getCurrentConfirmCall()
32
+ if (currentCall == nil) {
33
+ currentCall = omiLib.getNewestCall()
34
+ }
35
+ return currentCall
36
+ }
37
+
35
38
  func updateToken(params: [String: Any]) {
36
39
  if let apnsToken = params["apnsToken"] as? String {
37
40
  OmiClient.setUserPushNotificationToken(apnsToken)
@@ -39,19 +42,14 @@ class CallManager {
39
42
  }
40
43
 
41
44
  func initEndpoint(params: [String: Any]){
42
- var isSupportVideoCall = false
43
45
  if let userName = params["userName"] as? String, let password = params["password"] as? String, let realm = params["realm"] as? String {
44
46
  OmiClient.initWithUsername(userName, password: password, realm: realm)
45
- if let isVideoCall = params["isVideo"] as? Bool {
46
- isSupportVideoCall = isVideoCall
47
- }
48
- OmiClient.startOmiService(isSupportVideoCall)
49
- if (isSupportVideoCall) {
50
- OmiClient.registerAccount()
51
- videoManager = OMIVideoViewManager.init()
52
- }
53
- registerNotificationCenter()
54
47
  }
48
+ if let isVideoCall = params["isVideo"] as? Bool, isVideoCall == true {
49
+ OmiClient.startOmiService(true)
50
+ videoManager = OMIVideoViewManager.init()
51
+ }
52
+ registerNotificationCenter()
55
53
  }
56
54
 
57
55
  func registerNotificationCenter() {
@@ -70,7 +68,7 @@ class CallManager {
70
68
  )
71
69
  }
72
70
  }
73
-
71
+
74
72
  @objc func callDealloc(_ notification: NSNotification) {
75
73
  guard let userInfo = notification.userInfo,
76
74
  let call = userInfo[OMINotificationUserInfoCallKey] as? OMICall else {
@@ -79,7 +77,6 @@ class CallManager {
79
77
  if (call.callState == .disconnected) {
80
78
  DispatchQueue.main.async {
81
79
  OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
82
- self.currentConfirmedCall = nil
83
80
  }
84
81
  }
85
82
  }
@@ -95,7 +92,6 @@ class CallManager {
95
92
  case .calling:
96
93
  if (!call.isIncoming) {
97
94
  NSLog("Outgoing call, in CALLING state, with UUID \(call.uuid)")
98
- OmikitPlugin.instance.sendEvent(withName: onRinging, body: [:])
99
95
  }
100
96
  break
101
97
  case .early:
@@ -109,19 +105,10 @@ class CallManager {
109
105
  }
110
106
  break
111
107
  case .confirmed:
112
- DispatchQueue.main.async {
113
- if (!call.isIncoming) {
114
- NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call.uuid)")
115
- OmikitPlugin.instance.sendEvent(withName: onCallEstablished, body: [:])
116
- OmikitPlugin.instance.sendEvent(withName: onMuted, body: ["isMuted": call.muted])
117
- self.currentConfirmedCall = call
118
- return
119
- }
120
- NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call.uuid)")
121
- OmikitPlugin.instance.sendEvent(withName: onCallEstablished, body: [:])
122
- OmikitPlugin.instance.sendEvent(withName: onMuted, body: ["isMuted": call.muted])
123
- self.currentConfirmedCall = call
124
- }
108
+ NSLog("Outgoing call, in CONFIRMED state, with UUID: \(call.uuid)")
109
+ OmikitPlugin.instance.sendEvent(withName: onCallEstablished, body: ["isVideo": call.isVideo, "callerNumber": call.callerNumber])
110
+ print(call.muted)
111
+ OmikitPlugin.instance.sendOnMuteStatus()
125
112
  break
126
113
  case .disconnected:
127
114
  if (!call.connected) {
@@ -129,36 +116,26 @@ class CallManager {
129
116
  } else if (!call.userDidHangUp) {
130
117
  NSLog("Call remotly ended, in DISCONNECTED state, with UUID: \(call.uuid)")
131
118
  }
132
- print(omiLib.getCurrentCall()?.uuid.uuidString)
133
119
  print(call.uuid.uuidString)
134
- if let currentActiveCall = currentConfirmedCall, currentActiveCall.uuid.uuidString == call.uuid.uuidString {
135
- OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
136
- currentConfirmedCall = nil
137
- break
138
- }
139
- if currentConfirmedCall == nil {
140
- OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
141
- break
142
- }
143
- print(omiLib.getNewestCall()?.uuid.uuidString)
120
+ OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
144
121
  break
145
122
  case .incoming:
146
- OmikitPlugin.instance.sendEvent(withName: incomingReceived, body: ["callerId": call.callId,"phoneNumber": call.callerNumber])
123
+ OmikitPlugin.instance.sendEvent(withName: incomingReceived, body: ["isVideo": call.isVideo, "callerNumber": call.callerNumber ?? ""])
147
124
  break
148
125
  case .muted:
149
- OmikitPlugin.instance.sendEvent(withName: onMuted, body: ["isMuted": call.muted])
126
+ print("muteddddddd")
150
127
  break
151
128
  case .hold:
152
- OmikitPlugin.instance.sendEvent(withName: onHold, body: ["isHold": call.onHold])
129
+ print("holdddddddd")
153
130
  break
154
- @unknown default:
131
+ default:
155
132
  NSLog("Default call state")
133
+ break
156
134
  }
157
135
  }
158
136
 
159
137
  /// Start call
160
138
  func startCall(_ phoneNumber: String, isVideo: Bool) {
161
- registerNotificationCenter()
162
139
  if (isVideo) {
163
140
  OmiClient.startVideoCall(phoneNumber)
164
141
  return
@@ -166,82 +143,49 @@ class CallManager {
166
143
  OmiClient.startCall(phoneNumber)
167
144
  }
168
145
 
169
- /// End call
170
- func endNewestCall() {
171
- guard let call = omiLib.getNewestCall() else {
146
+ func endAvailableCall() {
147
+ guard let call = getAvailableCall() else {
148
+ OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
172
149
  return
173
150
  }
174
- omiLib.callManager.end(call) { error in
175
- if error != nil {
176
- NSLog("error hanging up call(\(call.uuid.uuidString)): \(error!)")
177
- }
178
- }
179
- OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
180
- NotificationCenter.default.removeObserver(self)
181
- }
182
-
183
- func endCurrentConfirmCall() {
184
- guard let call = omiLib.getCurrentCall() else {
185
- endNewestCall()
186
- return
187
- }
188
- omiLib.callManager.end(call) { error in
189
- if error != nil {
190
- NSLog("error hanging up call(\(call.uuid.uuidString)): \(error!)")
191
- }
192
- }
193
- OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
194
- NotificationCenter.default.removeObserver(self)
151
+ omiLib.callManager.end(call)
195
152
  }
196
153
 
197
154
 
198
155
  func endAllCalls() {
199
156
  omiLib.callManager.endAllCalls()
200
- OmikitPlugin.instance.sendEvent(withName: onCallEnd, body: [:])
201
- NotificationCenter.default.removeObserver(self)
157
+ }
158
+
159
+ func joinCall() {
160
+ guard let call = getAvailableCall() else {
161
+ return
162
+ }
163
+ OmiClient.answerIncommingCall(call.uuid)
202
164
  }
203
165
 
204
166
  func sendDTMF(character: String) {
205
- guard let call = omiLib.getCurrentCall() else {
167
+ guard let call = getAvailableCall() else {
206
168
  return
207
169
  }
208
170
  try? call.sendDTMF(character)
209
171
  }
210
172
 
211
-
212
173
  /// Toogle mtue
213
- func toggleMute(completion: @escaping () -> Void?) {
214
- guard let omicall = OMISIPLib.sharedInstance().getCurrentCall() else {
215
- return
216
- }
217
-
218
- omiLib.callManager.toggleMute(for: omicall) { error in
219
- if error != nil {
220
- NSLog("toggle mute error: \(error))")
221
- }
174
+ func toggleMute() {
175
+ guard let call = getAvailableCall() else {
176
+ return
222
177
  }
223
-
178
+ try? call.toggleMute()
224
179
  }
225
180
 
226
181
  /// Toogle hold
227
- func toggleHold(completion: @escaping () -> Void?) {
228
- guard let omicall = OMISIPLib.sharedInstance().getCurrentCall() else {
182
+ func toggleHold() {
183
+ guard let call = getAvailableCall() else {
229
184
  return
230
185
  }
231
- DispatchQueue.main.async {[weak self] in
232
- guard let self = self else { return }
233
- self.omiLib.callManager.toggleHold(for: omicall) { error in
234
- if error != nil {
235
- NSLog("Error holding current call: \(error!)")
236
- return
237
- } else {
238
- completion()
239
- }
240
- }
241
- }
186
+ try? call.toggleHold()
242
187
  }
243
188
 
244
-
245
189
  /// Toogle speaker
246
190
  func toogleSpeaker() {
247
191
  do {
@@ -255,22 +199,21 @@ class CallManager {
255
199
  }
256
200
  } catch (let error){
257
201
  NSLog("Error toogleSpeaker current call: \(error)")
258
-
202
+
259
203
  }
260
204
  }
261
205
 
262
-
263
206
  func inputs() -> [[String: String]] {
264
- let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
265
- let results = inputs.map { item in
266
- return [
267
- "name": item.portName,
268
- "id": item.uid,
269
- ]
270
- }
271
- return results
207
+ let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
208
+ let results = inputs.map { item in
209
+ return [
210
+ "name": item.portName,
211
+ "id": item.uid,
212
+ ]
213
+ }
214
+ return results
272
215
  }
273
-
216
+
274
217
  func setInput(id: String) {
275
218
  let inputs = AVAudioSession.sharedInstance().availableInputs ?? []
276
219
  if let newOutput = inputs.first(where: {$0.uid == id}) {
@@ -281,10 +224,10 @@ class CallManager {
281
224
  func outputs() -> [[String: String]] {
282
225
  let outputs = AVAudioSession.sharedInstance().currentRoute.outputs
283
226
  var results = outputs.map { item in
284
- return [
285
- "name": item.portName,
286
- "id": item.uid,
287
- ]
227
+ return [
228
+ "name": item.portName,
229
+ "id": item.uid,
230
+ ]
288
231
  }
289
232
  let hasSpeaker = results.contains{ $0["name"] == "Speaker" }
290
233
  if (!hasSpeaker) {
@@ -334,29 +277,29 @@ class CallManager {
334
277
  }
335
278
  }
336
279
 
337
- // func getLocalPreviewView(callback: @escaping (UIView) -> Void) {
338
- // guard let videoManager = videoManager else { return }
339
- // videoManager.localView {previewView in
340
- // DispatchQueue.main.async {
341
- // if (previewView != nil) {
342
- // previewView!.contentMode = .scaleAspectFill
343
- // callback(previewView!)
344
- // }
345
- // }
346
- // }
347
- // }
348
- //
349
- // func getRemotePreviewView(callback: @escaping (UIView) -> Void) {
350
- // guard let videoManager = videoManager else { return }
351
- // videoManager.remoteView { previewView in
352
- // DispatchQueue.main.async {
353
- // if (previewView != nil) {
354
- // previewView!.contentMode = .scaleAspectFill
355
- // callback(previewView!)
356
- // }
357
- // }
358
- // }
359
- // }
280
+ // func getLocalPreviewView(callback: @escaping (UIView) -> Void) {
281
+ // guard let videoManager = videoManager else { return }
282
+ // videoManager.localView {previewView in
283
+ // DispatchQueue.main.async {
284
+ // if (previewView != nil) {
285
+ // previewView!.contentMode = .scaleAspectFill
286
+ // callback(previewView!)
287
+ // }
288
+ // }
289
+ // }
290
+ // }
291
+ //
292
+ // func getRemotePreviewView(callback: @escaping (UIView) -> Void) {
293
+ // guard let videoManager = videoManager else { return }
294
+ // videoManager.remoteView { previewView in
295
+ // DispatchQueue.main.async {
296
+ // if (previewView != nil) {
297
+ // previewView!.contentMode = .scaleAspectFill
298
+ // callback(previewView!)
299
+ // }
300
+ // }
301
+ // }
302
+ // }
360
303
  }
361
304
 
362
305
 
@@ -10,21 +10,11 @@ import Foundation
10
10
 
11
11
  let INIT_CALL = "INIT_CALL"
12
12
  let UPDATE_TOKEN = "UPDATE_TOKEN"
13
- let START_OMI_SERVICE = "START_OMI_SERVICE"
14
13
  let START_CALL = "START_CALL"
14
+ let JOIN_CALL = "JOIN_CALL"
15
15
  let END_CALL = "END_CALL"
16
16
  let TOGGLE_MUTE = "TOGGLE_MUTE"
17
17
  let TOGGLE_SPEAK = "TOGGLE_SPEAK"
18
- let CHECK_ON_GOING_CALL = "CHECK_ON_GOING_CALL"
19
- let DECLINE = "DECLINE"
20
- let FORWARD_CALL_TO = "FORWARD_CALL_TO"
21
- let HANGUP = "HANGUP"
22
- let ON_CALL_STARTED = "ON_CALL_STARTED"
23
- let ON_HOLD = "ON_HOLD"
24
- let ON_IN_COMING_RECEIVE = "ON_IN_COMING_RECEIVE"
25
- let ON_MUTE = "ON_MUTE"
26
- let ON_OUT_GOING = "ON_OUT_GOING"
27
- let ON_OUT_GOING_STARTED = "ON_OUT_GOING"
28
18
  let REGISTER = "REGISTER"
29
19
  let SEND_DTMF = "SEND_DTMF"
30
20
  let SWITCH_CAMERA = "SWITCH_CAMERA"
@@ -36,12 +26,11 @@ let SETINPUT = "SET_INPUT"
36
26
  let SETOUTPUT = "SET_OUTPUT"
37
27
 
38
28
  //LISTENER
39
- let onCallEstablished = "onCallEstablished"
40
- let onCallEnd = "onCallEnd"
41
- let incomingReceived = "incomingReceived"
42
- let onRinging = "onRinging"
43
- let onConnectionTimeout = "onConnectionTimeout"
44
- let onHold = "onHold"
45
- let onMuted = "onMuted"
29
+ let onCallEstablished = "CALL_ESTABLISHED"
30
+ let onCallEnd = "CALL_END"
31
+ let incomingReceived = "INCOMING_RECEIVED"
32
+ let onConnectionTimeout = "CONNECTION_TIMEOUT"
33
+ let onSpeaker = "SPEAKER"
34
+ let onMuted = "MUTED"
46
35
 
47
36
 
@@ -2,22 +2,28 @@
2
2
 
3
3
  @interface RCT_EXTERN_MODULE(OmikitPlugin, NSObject)
4
4
 
5
- RCT_EXTERN_METHOD(updateToken:(id)data
6
- withResolver:(RCTPromiseResolveBlock)resolve
5
+ RCT_EXTERN_METHOD(getInitialCall:
6
+ (RCTPromiseResolveBlock)resolve
7
7
  withRejecter:(RCTPromiseRejectBlock)reject)
8
8
  RCT_EXTERN_METHOD(initCall:(id)data
9
9
  withResolver:(RCTPromiseResolveBlock)resolve
10
10
  withRejecter:(RCTPromiseRejectBlock)reject)
11
+ RCT_EXTERN_METHOD(updateToken:(id)data
12
+ withResolver:(RCTPromiseResolveBlock)resolve
13
+ withRejecter:(RCTPromiseRejectBlock)reject)
11
14
  RCT_EXTERN_METHOD(startCall:(id)data
12
15
  withResolver:(RCTPromiseResolveBlock)resolve
13
16
  withRejecter:(RCTPromiseRejectBlock)reject)
17
+ RCT_EXTERN_METHOD(joinCall:
18
+ (RCTPromiseResolveBlock)resolve
19
+ withRejecter:(RCTPromiseRejectBlock)reject)
14
20
  RCT_EXTERN_METHOD(endCall:(RCTPromiseResolveBlock)resolve
15
21
  withRejecter:(RCTPromiseRejectBlock)reject)
16
22
  RCT_EXTERN_METHOD(toggleMute:
17
23
  (RCTPromiseResolveBlock)resolve
18
24
  withRejecter:(RCTPromiseRejectBlock)reject)
19
- RCT_EXTERN_METHOD(toggleSpeak:(id)data
20
- withResolver: (RCTPromiseResolveBlock)resolve
25
+ RCT_EXTERN_METHOD(toggleSpeak:
26
+ (RCTPromiseResolveBlock)resolve
21
27
  withRejecter:(RCTPromiseRejectBlock)reject)
22
28
  RCT_EXTERN_METHOD(sendDTMF:(id)data
23
29
  withResolver: (RCTPromiseResolveBlock)resolve
@@ -1,5 +1,6 @@
1
1
  import Foundation
2
2
  import React
3
+ import OmiKit
3
4
 
4
5
  @objc(OmikitPlugin)
5
6
  class OmikitPlugin: RCTEventEmitter {
@@ -10,7 +11,23 @@ class OmikitPlugin: RCTEventEmitter {
10
11
  super.init()
11
12
  OmikitPlugin.instance = self
12
13
  }
13
-
14
+
15
+ @objc(getInitialCall:withRejecter:)
16
+ func getInitialCall(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
17
+ if let call = CallManager.shareInstance().getAvailableCall() {
18
+ let callerNumber = call.callerNumber
19
+ let status = call.lastStatus
20
+ let muted = call.muted
21
+ let data : [String: Any] = [
22
+ "callerNumber" : callerNumber,
23
+ "status": status,
24
+ "muted": muted
25
+ ]
26
+ resolve(data)
27
+ return
28
+ }
29
+ resolve(false)
30
+ }
14
31
 
15
32
  @objc(initCall:withResolver:withRejecter:)
16
33
  func initCall(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
@@ -32,32 +49,36 @@ class OmikitPlugin: RCTEventEmitter {
32
49
  func startCall(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
33
50
  if let dataOmi = data as? [String: Any] {
34
51
  let phoneNumber = dataOmi["phoneNumber"] as! String
35
- var isVideo = false
36
- if let isVideoCall = dataOmi["isVideo"] as? Bool {
37
- isVideo = isVideoCall
38
- }
39
- CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo)
52
+ let isVideo = dataOmi["isVideo"] as? Bool
53
+ CallManager.shareInstance().startCall(phoneNumber, isVideo: isVideo ?? false)
54
+ sendOnMuteStatus()
40
55
  resolve(true)
41
56
  }
42
57
  }
43
58
 
59
+ @objc(joinCall:withRejecter:)
60
+ func joinCall(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
61
+ CallManager.shareInstance().joinCall()
62
+ resolve(true)
63
+ }
64
+
44
65
  @objc(endCall:withRejecter:)
45
66
  func endCall(resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
46
- CallManager.shareInstance().endCurrentConfirmCall()
67
+ CallManager.shareInstance().endAvailableCall()
47
68
  resolve(true)
48
69
  }
49
70
 
50
71
  @objc(toggleMute:withRejecter:)
51
72
  func toggleMute(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
52
- CallManager.shareInstance().toggleMute {
53
- NSLog("done toggle mute")
54
- }
73
+ CallManager.shareInstance().toggleMute()
74
+ sendOnMuteStatus()
55
75
  resolve(true)
56
76
  }
57
77
 
58
- @objc(toggleSpeak:withResolver:withRejecter:)
59
- func toggleSpeak(data: Any, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
78
+ @objc(toggleSpeak:withRejecter:)
79
+ func toggleSpeak(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
60
80
  CallManager.shareInstance().toogleSpeaker()
81
+ sendOnSpeakerStatus()
61
82
  resolve(true)
62
83
  }
63
84
 
@@ -69,14 +90,26 @@ class OmikitPlugin: RCTEventEmitter {
69
90
  }
70
91
  }
71
92
 
93
+ func sendOnMuteStatus() {
94
+ if let call = CallManager.shareInstance().getAvailableCall() {
95
+ if let isMuted = call.muted as? Bool {
96
+ print("muteeeeed \(isMuted)")
97
+ sendEvent(withName: onMuted, body: isMuted)
98
+ }
99
+ }
100
+ }
101
+
102
+ func sendOnSpeakerStatus() {
103
+ sendEvent(withName: onSpeaker, body: CallManager.shareInstance().isSpeaker)
104
+ }
105
+
72
106
  override func supportedEvents() -> [String]! {
73
107
  return [
74
- "incomingReceived",
75
- "onCallEnd",
76
- "onCallEstablished",
77
- "onConnectionTimeout",
78
- "onMuted",
79
- "onRinging"
108
+ incomingReceived,
109
+ onCallEstablished,
110
+ onCallEnd,
111
+ onMuted,
112
+ onSpeaker
80
113
  ]
81
114
  }
82
115
  }
@@ -3,8 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.OmiCallEvent = void 0;
6
7
  exports.endCall = endCall;
8
+ exports.getInitialCall = getInitialCall;
7
9
  exports.initCall = initCall;
10
+ exports.joinCall = joinCall;
8
11
  exports.omiEmitter = void 0;
9
12
  exports.onHold = onHold;
10
13
  exports.sendDTMF = sendDTMF;
@@ -22,6 +25,9 @@ const OmikitPlugin = _reactNative.NativeModules.OmikitPlugin ? _reactNative.Nati
22
25
  throw new Error(LINKING_ERROR);
23
26
  }
24
27
  });
28
+ function getInitialCall() {
29
+ return OmikitPlugin.getInitialCall();
30
+ }
25
31
  function initCall(data) {
26
32
  console.log(data);
27
33
  return OmikitPlugin.initCall(data);
@@ -34,14 +40,17 @@ function startCall(data) {
34
40
  console.log(data);
35
41
  return OmikitPlugin.startCall(data);
36
42
  }
43
+ function joinCall() {
44
+ return OmikitPlugin.joinCall();
45
+ }
37
46
  function endCall() {
38
47
  return OmikitPlugin.endCall();
39
48
  }
40
49
  function toggleMute() {
41
50
  return OmikitPlugin.toggleMute();
42
51
  }
43
- function toggleSpeak(data) {
44
- return OmikitPlugin.toggleSpeak(data);
52
+ function toggleSpeak() {
53
+ return OmikitPlugin.toggleSpeak();
45
54
  }
46
55
  function onHold(data) {
47
56
  return OmikitPlugin.onHold(data);
@@ -51,4 +60,12 @@ function sendDTMF(data) {
51
60
  }
52
61
  const omiEmitter = new _reactNative.NativeEventEmitter(OmikitPlugin);
53
62
  exports.omiEmitter = omiEmitter;
63
+ const OmiCallEvent = {
64
+ onCallEstablished: 'CALL_ESTABLISHED',
65
+ onCallEnd: 'CALL_END',
66
+ incomingReceived: 'INCOMING_RECEIVED',
67
+ onSpeaker: 'SPEAKER',
68
+ onMuted: 'MUTED'
69
+ };
70
+ exports.OmiCallEvent = OmiCallEvent;
54
71
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","OmikitPlugin","NativeModules","Proxy","get","Error","initCall","data","console","log","updateToken","startCall","endCall","toggleMute","toggleSpeak","onHold","sendDTMF","omiEmitter","NativeEventEmitter","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GAChB,wEAAuE,GACxEC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,YAAY,GAAGC,0BAAa,CAACD,YAAY,GAC3CC,0BAAa,CAACD,YAAY,GAC1B,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEE,SAASU,QAAQA,CAACC,IAAS,EAAoB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACK,QAAQ,CAACC,IAAI,CAAC;AACpC;AAEO,SAASG,WAAWA,CAACH,IAAS,EAAiB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACS,WAAW,CAACH,IAAI,CAAC;AACvC;AAEO,SAASI,SAASA,CAACJ,IAAS,EAAoB;EACrDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACU,SAAS,CAACJ,IAAI,CAAC;AACrC;AAEO,SAASK,OAAOA,CAAA,EAAqB;EAC1C,OAAOX,YAAY,CAACW,OAAO,EAAE;AAC/B;AAEO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOZ,YAAY,CAACY,UAAU,EAAE;AAClC;AAEO,SAASC,WAAWA,CAACP,IAAS,EAAoB;EACvD,OAAON,YAAY,CAACa,WAAW,CAACP,IAAI,CAAC;AACvC;AAEO,SAASQ,MAAMA,CAACR,IAAS,EAAoB;EAClD,OAAON,YAAY,CAACc,MAAM,CAACR,IAAI,CAAC;AAClC;AAEO,SAASS,QAAQA,CAACT,IAAS,EAAoB;EACpD,OAAON,YAAY,CAACe,QAAQ,CAACT,IAAI,CAAC;AACpC;AAEO,MAAMU,UAAU,GAAG,IAAIC,+BAAkB,CAACjB,YAAY,CAAC;AAACkB,OAAA,CAAAF,UAAA,GAAAA,UAAA"}
1
+ {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","OmikitPlugin","NativeModules","Proxy","get","Error","getInitialCall","initCall","data","console","log","updateToken","startCall","joinCall","endCall","toggleMute","toggleSpeak","onHold","sendDTMF","omiEmitter","NativeEventEmitter","exports","OmiCallEvent","onCallEstablished","onCallEnd","incomingReceived","onSpeaker","onMuted"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GAChB,wEAAuE,GACxEC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,YAAY,GAAGC,0BAAa,CAACD,YAAY,GAC3CC,0BAAa,CAACD,YAAY,GAC1B,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEE,SAASU,cAAcA,CAAA,EAAiB;EAC7C,OAAOL,YAAY,CAACK,cAAc,EAAE;AACtC;AAEO,SAASC,QAAQA,CAACC,IAAS,EAAoB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOP,YAAY,CAACM,QAAQ,CAACC,IAAI,CAAC;AACpC;AAEO,SAASG,WAAWA,CAACH,IAAS,EAAiB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOP,YAAY,CAACU,WAAW,CAACH,IAAI,CAAC;AACvC;AAEO,SAASI,SAASA,CAACJ,IAAS,EAAoB;EACrDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOP,YAAY,CAACW,SAAS,CAACJ,IAAI,CAAC;AACrC;AAEO,SAASK,QAAQA,CAAA,EAAqB;EAC3C,OAAOZ,YAAY,CAACY,QAAQ,EAAE;AAChC;AAEO,SAASC,OAAOA,CAAA,EAAqB;EAC1C,OAAOb,YAAY,CAACa,OAAO,EAAE;AAC/B;AAEO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOd,YAAY,CAACc,UAAU,EAAE;AAClC;AAEO,SAASC,WAAWA,CAAA,EAAqB;EAC9C,OAAOf,YAAY,CAACe,WAAW,EAAE;AACnC;AAEO,SAASC,MAAMA,CAACT,IAAS,EAAoB;EAClD,OAAOP,YAAY,CAACgB,MAAM,CAACT,IAAI,CAAC;AAClC;AAEO,SAASU,QAAQA,CAACV,IAAS,EAAoB;EACpD,OAAOP,YAAY,CAACiB,QAAQ,CAACV,IAAI,CAAC;AACpC;AAEO,MAAMW,UAAU,GAAG,IAAIC,+BAAkB,CAACnB,YAAY,CAAC;AAACoB,OAAA,CAAAF,UAAA,GAAAA,UAAA;AAExD,MAAMG,YAAY,GAAG;EAC1BC,iBAAiB,EAAE,kBAAkB;EACrCC,SAAS,EAAE,UAAU;EACrBC,gBAAgB,EAAE,mBAAmB;EACrCC,SAAS,EAAE,SAAS;EACpBC,OAAO,EAAE;AACX,CAAC;AAACN,OAAA,CAAAC,YAAA,GAAAA,YAAA"}
@@ -8,6 +8,9 @@ const OmikitPlugin = NativeModules.OmikitPlugin ? NativeModules.OmikitPlugin : n
8
8
  throw new Error(LINKING_ERROR);
9
9
  }
10
10
  });
11
+ export function getInitialCall() {
12
+ return OmikitPlugin.getInitialCall();
13
+ }
11
14
  export function initCall(data) {
12
15
  console.log(data);
13
16
  return OmikitPlugin.initCall(data);
@@ -20,14 +23,17 @@ export function startCall(data) {
20
23
  console.log(data);
21
24
  return OmikitPlugin.startCall(data);
22
25
  }
26
+ export function joinCall() {
27
+ return OmikitPlugin.joinCall();
28
+ }
23
29
  export function endCall() {
24
30
  return OmikitPlugin.endCall();
25
31
  }
26
32
  export function toggleMute() {
27
33
  return OmikitPlugin.toggleMute();
28
34
  }
29
- export function toggleSpeak(data) {
30
- return OmikitPlugin.toggleSpeak(data);
35
+ export function toggleSpeak() {
36
+ return OmikitPlugin.toggleSpeak();
31
37
  }
32
38
  export function onHold(data) {
33
39
  return OmikitPlugin.onHold(data);
@@ -36,4 +42,11 @@ export function sendDTMF(data) {
36
42
  return OmikitPlugin.sendDTMF(data);
37
43
  }
38
44
  export const omiEmitter = new NativeEventEmitter(OmikitPlugin);
45
+ export const OmiCallEvent = {
46
+ onCallEstablished: 'CALL_ESTABLISHED',
47
+ onCallEnd: 'CALL_END',
48
+ incomingReceived: 'INCOMING_RECEIVED',
49
+ onSpeaker: 'SPEAKER',
50
+ onMuted: 'MUTED'
51
+ };
39
52
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","OmikitPlugin","Proxy","get","Error","initCall","data","console","log","updateToken","startCall","endCall","toggleMute","toggleSpeak","onHold","sendDTMF","omiEmitter"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,EAAEC,kBAAkB,QAAQ,cAAc;AAE1E,MAAMC,aAAa,GAChB,wEAAuE,GACxEF,QAAQ,CAACG,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,YAAY,GAAGP,aAAa,CAACO,YAAY,GAC3CP,aAAa,CAACO,YAAY,GAC1B,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEL,OAAO,SAASQ,QAAQA,CAACC,IAAS,EAAoB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOL,YAAY,CAACI,QAAQ,CAACC,IAAI,CAAC;AACpC;AAEA,OAAO,SAASG,WAAWA,CAACH,IAAS,EAAiB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOL,YAAY,CAACQ,WAAW,CAACH,IAAI,CAAC;AACvC;AAEA,OAAO,SAASI,SAASA,CAACJ,IAAS,EAAoB;EACrDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAOL,YAAY,CAACS,SAAS,CAACJ,IAAI,CAAC;AACrC;AAEA,OAAO,SAASK,OAAOA,CAAA,EAAqB;EAC1C,OAAOV,YAAY,CAACU,OAAO,EAAE;AAC/B;AAEA,OAAO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOX,YAAY,CAACW,UAAU,EAAE;AAClC;AAEA,OAAO,SAASC,WAAWA,CAACP,IAAS,EAAoB;EACvD,OAAOL,YAAY,CAACY,WAAW,CAACP,IAAI,CAAC;AACvC;AAEA,OAAO,SAASQ,MAAMA,CAACR,IAAS,EAAoB;EAClD,OAAOL,YAAY,CAACa,MAAM,CAACR,IAAI,CAAC;AAClC;AAEA,OAAO,SAASS,QAAQA,CAACT,IAAS,EAAoB;EACpD,OAAOL,YAAY,CAACc,QAAQ,CAACT,IAAI,CAAC;AACpC;AAEA,OAAO,MAAMU,UAAU,GAAG,IAAIpB,kBAAkB,CAACK,YAAY,CAAC"}
1
+ {"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","OmikitPlugin","Proxy","get","Error","getInitialCall","initCall","data","console","log","updateToken","startCall","joinCall","endCall","toggleMute","toggleSpeak","onHold","sendDTMF","omiEmitter","OmiCallEvent","onCallEstablished","onCallEnd","incomingReceived","onSpeaker","onMuted"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,EAAEC,kBAAkB,QAAQ,cAAc;AAE1E,MAAMC,aAAa,GAChB,wEAAuE,GACxEF,QAAQ,CAACG,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,YAAY,GAAGP,aAAa,CAACO,YAAY,GAC3CP,aAAa,CAACO,YAAY,GAC1B,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEL,OAAO,SAASQ,cAAcA,CAAA,EAAiB;EAC7C,OAAOJ,YAAY,CAACI,cAAc,EAAE;AACtC;AAEA,OAAO,SAASC,QAAQA,CAACC,IAAS,EAAoB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACK,QAAQ,CAACC,IAAI,CAAC;AACpC;AAEA,OAAO,SAASG,WAAWA,CAACH,IAAS,EAAiB;EACpDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACS,WAAW,CAACH,IAAI,CAAC;AACvC;AAEA,OAAO,SAASI,SAASA,CAACJ,IAAS,EAAoB;EACrDC,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;EACjB,OAAON,YAAY,CAACU,SAAS,CAACJ,IAAI,CAAC;AACrC;AAEA,OAAO,SAASK,QAAQA,CAAA,EAAqB;EAC3C,OAAOX,YAAY,CAACW,QAAQ,EAAE;AAChC;AAEA,OAAO,SAASC,OAAOA,CAAA,EAAqB;EAC1C,OAAOZ,YAAY,CAACY,OAAO,EAAE;AAC/B;AAEA,OAAO,SAASC,UAAUA,CAAA,EAAqB;EAC7C,OAAOb,YAAY,CAACa,UAAU,EAAE;AAClC;AAEA,OAAO,SAASC,WAAWA,CAAA,EAAqB;EAC9C,OAAOd,YAAY,CAACc,WAAW,EAAE;AACnC;AAEA,OAAO,SAASC,MAAMA,CAACT,IAAS,EAAoB;EAClD,OAAON,YAAY,CAACe,MAAM,CAACT,IAAI,CAAC;AAClC;AAEA,OAAO,SAASU,QAAQA,CAACV,IAAS,EAAoB;EACpD,OAAON,YAAY,CAACgB,QAAQ,CAACV,IAAI,CAAC;AACpC;AAEA,OAAO,MAAMW,UAAU,GAAG,IAAItB,kBAAkB,CAACK,YAAY,CAAC;AAE9D,OAAO,MAAMkB,YAAY,GAAG;EAC1BC,iBAAiB,EAAE,kBAAkB;EACrCC,SAAS,EAAE,UAAU;EACrBC,gBAAgB,EAAE,mBAAmB;EACrCC,SAAS,EAAE,SAAS;EACpBC,OAAO,EAAE;AACX,CAAC"}
@@ -1,11 +1,20 @@
1
1
  import { NativeEventEmitter } from 'react-native';
2
+ export declare function getInitialCall(): Promise<any>;
2
3
  export declare function initCall(data: any): Promise<boolean>;
3
4
  export declare function updateToken(data: any): Promise<void>;
4
5
  export declare function startCall(data: any): Promise<boolean>;
6
+ export declare function joinCall(): Promise<boolean>;
5
7
  export declare function endCall(): Promise<boolean>;
6
8
  export declare function toggleMute(): Promise<boolean>;
7
- export declare function toggleSpeak(data: any): Promise<boolean>;
9
+ export declare function toggleSpeak(): Promise<boolean>;
8
10
  export declare function onHold(data: any): Promise<boolean>;
9
11
  export declare function sendDTMF(data: any): Promise<boolean>;
10
12
  export declare const omiEmitter: NativeEventEmitter;
13
+ export declare const OmiCallEvent: {
14
+ onCallEstablished: string;
15
+ onCallEnd: string;
16
+ incomingReceived: string;
17
+ onSpeaker: string;
18
+ onMuted: string;
19
+ };
11
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmB3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrD;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAE1C;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEvD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAElD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpD;AAED,eAAO,MAAM,UAAU,oBAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmB3E,wBAAgB,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,CAE7C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrD;AAED,wBAAgB,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAE3C;AAED,wBAAgB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAE1C;AAED,wBAAgB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7C;AAED,wBAAgB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAE9C;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAElD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEpD;AAED,eAAO,MAAM,UAAU,oBAAuC,CAAC;AAE/D,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omikit-plugin",
3
- "version": "0.3.0",
3
+ "version": "1.0.0",
4
4
  "description": "Omikit Plugin by ViHAT",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/index.tsx CHANGED
@@ -17,6 +17,10 @@ const OmikitPlugin = NativeModules.OmikitPlugin
17
17
  }
18
18
  );
19
19
 
20
+ export function getInitialCall(): Promise<any> {
21
+ return OmikitPlugin.getInitialCall();
22
+ }
23
+
20
24
  export function initCall(data: any): Promise<boolean> {
21
25
  console.log(data);
22
26
  return OmikitPlugin.initCall(data);
@@ -32,6 +36,10 @@ export function startCall(data: any): Promise<boolean> {
32
36
  return OmikitPlugin.startCall(data);
33
37
  }
34
38
 
39
+ export function joinCall(): Promise<boolean> {
40
+ return OmikitPlugin.joinCall();
41
+ }
42
+
35
43
  export function endCall(): Promise<boolean> {
36
44
  return OmikitPlugin.endCall();
37
45
  }
@@ -40,8 +48,8 @@ export function toggleMute(): Promise<boolean> {
40
48
  return OmikitPlugin.toggleMute();
41
49
  }
42
50
 
43
- export function toggleSpeak(data: any): Promise<boolean> {
44
- return OmikitPlugin.toggleSpeak(data);
51
+ export function toggleSpeak(): Promise<boolean> {
52
+ return OmikitPlugin.toggleSpeak();
45
53
  }
46
54
 
47
55
  export function onHold(data: any): Promise<boolean> {
@@ -53,3 +61,11 @@ export function sendDTMF(data: any): Promise<boolean> {
53
61
  }
54
62
 
55
63
  export const omiEmitter = new NativeEventEmitter(OmikitPlugin);
64
+
65
+ export const OmiCallEvent = {
66
+ onCallEstablished: 'CALL_ESTABLISHED',
67
+ onCallEnd: 'CALL_END',
68
+ incomingReceived: 'INCOMING_RECEIVED',
69
+ onSpeaker: 'SPEAKER',
70
+ onMuted: 'MUTED',
71
+ };
@@ -1,58 +0,0 @@
1
- //
2
- // NSUserActivity.swift
3
- // Runner
4
- //
5
- // Created by Hien Nguyen on 20/02/2022.
6
- //
7
-
8
- import Foundation
9
- import Intents
10
-
11
- extension NSUserActivity: StartCallConvertible {
12
-
13
- public var handle: String? {
14
- guard
15
- let interaction = interaction,
16
- let startCallIntent = interaction.intent as? SupportedStartCallIntent,
17
- let contact = startCallIntent.contacts?.first
18
- else {
19
- return nil
20
- }
21
- print(interaction.intent)
22
- return contact.personHandle?.value
23
- }
24
-
25
- public var isVideo: Bool? {
26
- guard
27
- let interaction = interaction,
28
- let startCallIntent = interaction.intent as? SupportedStartCallIntent
29
- else {
30
- return nil
31
- }
32
-
33
- return startCallIntent is INStartVideoCallIntent
34
- }
35
-
36
- }
37
-
38
-
39
- protocol StartCallConvertible {
40
- var handle: String? { get }
41
- var isVideo: Bool? { get }
42
- }
43
-
44
- extension StartCallConvertible {
45
-
46
- var isVideo: Bool? {
47
- return nil
48
- }
49
-
50
- }
51
-
52
-
53
- protocol SupportedStartCallIntent {
54
- var contacts: [INPerson]? { get }
55
- }
56
-
57
- extension INStartAudioCallIntent: SupportedStartCallIntent {}
58
- extension INStartVideoCallIntent: SupportedStartCallIntent {}
@@ -1,18 +0,0 @@
1
-
2
- import Foundation
3
-
4
- extension String {
5
-
6
- func fromBase64() -> String {
7
- guard let data = Foundation.Data(base64Encoded: self) else {
8
- return ""
9
- }
10
-
11
- return String(data: data, encoding: .utf8)!
12
- }
13
-
14
- func toBase64() -> String {
15
- return Foundation.Data(self.utf8).base64EncodedString()
16
- }
17
-
18
- }