@@ -12,8 +12,7 @@ import android.view.WindowManager
12
12
import androidx.annotation.Keep
13
13
import androidx.annotation.NonNull
14
14
import androidx.localbroadcastmanager.content.LocalBroadcastManager
15
- import com.connectycube.flutter.connectycube_flutter_call_kit.utils.getString
16
- import com.connectycube.flutter.connectycube_flutter_call_kit.utils.putString
15
+ import com.connectycube.flutter.connectycube_flutter_call_kit.utils.*
17
16
import io.flutter.embedding.engine.plugins.FlutterPlugin
18
17
import io.flutter.embedding.engine.plugins.activity.ActivityAware
19
18
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
@@ -27,14 +26,18 @@ import io.flutter.plugin.common.PluginRegistry
27
26
28
27
/* * ConnectycubeFlutterCallKitPlugin */
29
28
@Keep
30
- class ConnectycubeFlutterCallKitPlugin : FlutterPlugin , MethodCallHandler , PluginRegistry .NewIntentListener , ActivityAware , BroadcastReceiver () {
29
+ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin , MethodCallHandler ,
30
+ PluginRegistry .NewIntentListener , ActivityAware , BroadcastReceiver () {
31
31
private var applicationContext: Context ? = null
32
32
private var mainActivity: Activity ? = null
33
33
private lateinit var channel: MethodChannel
34
34
private lateinit var localBroadcastManager: LocalBroadcastManager
35
35
36
36
override fun onAttachedToEngine (@NonNull flutterPluginBinding : FlutterPlugin .FlutterPluginBinding ) {
37
- onAttachedToEngine(flutterPluginBinding.applicationContext, flutterPluginBinding.binaryMessenger)
37
+ onAttachedToEngine(
38
+ flutterPluginBinding.applicationContext,
39
+ flutterPluginBinding.binaryMessenger
40
+ )
38
41
registerCallStateReceiver()
39
42
}
40
43
@@ -48,7 +51,8 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
48
51
when (call.method) {
49
52
" showCallNotification" -> {
50
53
try {
51
- @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > = call.arguments as Map <String , Any >
54
+ @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > =
55
+ call.arguments as Map <String , Any >
52
56
val callId = arguments[" session_id" ] as String
53
57
54
58
if (CALL_STATE_UNKNOWN != getCallState(callId)) {
@@ -60,11 +64,23 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
60
64
val callInitiatorId = arguments[" caller_id" ] as Int
61
65
val callInitiatorName = arguments[" caller_name" ] as String
62
66
val callOpponents = ArrayList ((arguments[" call_opponents" ] as String )
63
- .split(' ,' )
64
- .map { it.toInt() })
65
- showCallNotification(applicationContext!! , callId, callType, callInitiatorId, callInitiatorName, callOpponents)
67
+ .split(' ,' )
68
+ .map { it.toInt() })
69
+ val userInfo = arguments[" user_info" ] as String
70
+
71
+ showCallNotification(
72
+ applicationContext!! ,
73
+ callId,
74
+ callType,
75
+ callInitiatorId,
76
+ callInitiatorName,
77
+ callOpponents,
78
+ userInfo
79
+ )
66
80
67
81
saveCallState(callId, CALL_STATE_PENDING )
82
+ saveCallData(callId, arguments)
83
+ saveCallId(callId)
68
84
69
85
result.success(null )
70
86
} catch (e: Exception ) {
@@ -74,7 +90,8 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
74
90
75
91
" reportCallAccepted" -> {
76
92
try {
77
- @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > = call.arguments as Map <String , Any >
93
+ @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > =
94
+ call.arguments as Map <String , Any >
78
95
val callId = arguments[" session_id" ] as String
79
96
cancelCallNotification(applicationContext!! , callId)
80
97
@@ -88,7 +105,8 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
88
105
89
106
" reportCallEnded" -> {
90
107
try {
91
- @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > = call.arguments as Map <String , Any >
108
+ @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > =
109
+ call.arguments as Map <String , Any >
92
110
val callId = arguments[" session_id" ] as String
93
111
94
112
processCallEnded(callId)
@@ -102,7 +120,8 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
102
120
103
121
" getCallState" -> {
104
122
try {
105
- @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > = call.arguments as Map <String , Any >
123
+ @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > =
124
+ call.arguments as Map <String , Any >
106
125
val callId = arguments[" session_id" ] as String
107
126
108
127
result.success(getCallState(callId))
@@ -113,7 +132,8 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
113
132
114
133
" setCallState" -> {
115
134
try {
116
- @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > = call.arguments as Map <String , Any >
135
+ @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > =
136
+ call.arguments as Map <String , Any >
117
137
val callId = arguments[" session_id" ] as String
118
138
val callState = arguments[" call_state" ] as String
119
139
@@ -125,9 +145,22 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
125
145
}
126
146
}
127
147
148
+ " getCallData" -> {
149
+ try {
150
+ @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > =
151
+ call.arguments as Map <String , Any >
152
+ val callId = arguments[" session_id" ] as String
153
+
154
+ result.success(getCallData(callId))
155
+ } catch (e: Exception ) {
156
+ result.error(" ERROR" , e.message, " " )
157
+ }
158
+ }
159
+
128
160
" setOnLockScreenVisibility" -> {
129
161
try {
130
- @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > = call.arguments as Map <String , Any >
162
+ @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > =
163
+ call.arguments as Map <String , Any >
131
164
val isVisible = arguments[" is_visible" ] as Boolean
132
165
133
166
setOnLockScreenVisibility(isVisible)
@@ -137,6 +170,27 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
137
170
}
138
171
}
139
172
173
+ " clearCallData" -> {
174
+ try {
175
+ @Suppress(" UNCHECKED_CAST" ) val arguments: Map <String , Any > =
176
+ call.arguments as Map <String , Any >
177
+ val callId = arguments[" session_id" ] as String
178
+
179
+ clearCallData(callId)
180
+ result.success(null )
181
+ } catch (e: Exception ) {
182
+ result.error(" ERROR" , e.message, " " )
183
+ }
184
+ }
185
+
186
+ " getLastCallId" -> {
187
+ try {
188
+ result.success(getLastCallId())
189
+ } catch (e: Exception ) {
190
+ result.error(" ERROR" , e.message, " " )
191
+ }
192
+ }
193
+
140
194
else ->
141
195
result.notImplemented()
142
196
@@ -196,7 +250,9 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
196
250
parameters[" call_type" ] = intent.getIntExtra(EXTRA_CALL_TYPE , - 1 )
197
251
parameters[" caller_id" ] = intent.getIntExtra(EXTRA_CALL_INITIATOR_ID , - 1 )
198
252
parameters[" caller_name" ] = intent.getStringExtra(EXTRA_CALL_INITIATOR_NAME )
199
- parameters[" call_opponents" ] = intent.getIntegerArrayListExtra(EXTRA_CALL_OPPONENTS )?.joinToString(separator = " ," )
253
+ parameters[" call_opponents" ] =
254
+ intent.getIntegerArrayListExtra(EXTRA_CALL_OPPONENTS )?.joinToString(separator = " ," )
255
+ parameters[" user_info" ] = intent.getStringExtra(EXTRA_CALL_USER_INFO )
200
256
201
257
when (action) {
202
258
ACTION_CALL_REJECT -> {
@@ -242,19 +298,66 @@ class ConnectycubeFlutterCallKitPlugin : FlutterPlugin, MethodCallHandler, Plugi
242
298
private fun saveCallState (callId : String , callState : String ) {
243
299
if (applicationContext == null ) return
244
300
245
- putString(applicationContext!! , callId, callState)
301
+ putString(applicationContext!! , callId + " _state " , callState)
246
302
}
247
303
248
304
private fun getCallState (callId : String ): String {
249
305
if (applicationContext == null ) return CALL_STATE_UNKNOWN
250
306
251
- val callState: String? = getString(applicationContext!! , callId)
307
+ val callState: String? = getString(applicationContext!! , callId + " _state " )
252
308
253
309
if (TextUtils .isEmpty(callState)) return CALL_STATE_UNKNOWN
254
310
255
311
return callState!!
256
312
}
257
313
314
+ private fun getCallData (callId : String ): Map <String , * >? {
315
+ if (applicationContext == null ) return null
316
+
317
+ val callDataString: String? = getString(applicationContext!! , callId + " _data" )
318
+
319
+ if (TextUtils .isEmpty(callDataString)) return null
320
+
321
+ return getMapFromJsonString(callDataString!! )
322
+ }
323
+
324
+ private fun saveCallData (callId : String , callData : Map <String , * >) {
325
+ if (applicationContext == null ) return
326
+
327
+ try {
328
+ putString(applicationContext!! , callId + " _data" , mapToJsonString(callData))
329
+ } catch (e: Exception ) {
330
+ // ignore
331
+ }
332
+ }
333
+
334
+ private fun clearCallData (callId : String ) {
335
+ if (applicationContext == null ) return
336
+
337
+ try {
338
+ remove(applicationContext!! , callId + " _state" )
339
+ remove(applicationContext!! , callId + " _data" )
340
+ } catch (e: Exception ) {
341
+ // ignore
342
+ }
343
+ }
344
+
345
+ private fun saveCallId (callId : String ) {
346
+ if (applicationContext == null ) return
347
+
348
+ try {
349
+ putString(applicationContext!! , " last_call_id" , callId)
350
+ } catch (e: Exception ) {
351
+ // ignore
352
+ }
353
+ }
354
+
355
+ private fun getLastCallId (): String? {
356
+ if (applicationContext == null ) return null
357
+
358
+ return getString(applicationContext!! , " last_call_id" )
359
+ }
360
+
258
361
private fun processCallEnded (sessionId : String ) {
259
362
if (applicationContext == null ) return
260
363
0 commit comments