From 2a81e7176749a94a4e60b5caba616eb172d63fe2 Mon Sep 17 00:00:00 2001 From: AnhNQK Date: Thu, 1 Jul 2021 18:02:09 +0700 Subject: [PATCH 01/26] fix bug registerpush and switch camera in android --- android/build.gradle | 4 +- .../StringeeFlutterPlugin.java | 1 - example/android/build.gradle | 2 - example/lib/main.dart | 2 +- lib/src/StringeeClient.dart | 184 +++++++++--------- lib/src/call/StringeeCall2.dart | 2 +- 6 files changed, 95 insertions(+), 100 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index bfc8d11..e40b9f9 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -4,7 +4,7 @@ version '1.0-SNAPSHOT' buildscript { repositories { google() - jcenter() + mavenCentral() } dependencies { @@ -15,7 +15,7 @@ buildscript { rootProject.allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java index 111c147..c5da1a1 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java @@ -289,7 +289,6 @@ public void onMethodCall(MethodCall call, final Result result) { break; case "switchCamera2": if (Utils.isCall2WrapperAvaiable(call.method, callId, result)) { - clientWrapper.call2Wrapper(callId).switchCamera(result); if (call.hasArgument("cameraId")) { clientWrapper.call2Wrapper(callId).switchCamera((int) call.argument("cameraId"), result); } else { diff --git a/example/android/build.gradle b/example/android/build.gradle index ab2c189..328175b 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,7 +1,6 @@ buildscript { repositories { google() - jcenter() mavenCentral() } @@ -13,7 +12,6 @@ buildscript { allprojects { repositories { google() - jcenter() mavenCentral() } } diff --git a/example/lib/main.dart b/example/lib/main.dart index 3639e38..19db3ed 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -8,7 +8,7 @@ import 'package:stringee_flutter_plugin_example/Chat.dart'; import 'Call.dart'; -var user2 = 'eyJjdHkiOiJzdHJpbmdlZS1hcGk7dj0xIiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJqdGkiOiJTS0xIb2NCdDl6Qk5qc1pLeThZaUVkSzRsU3NBZjhCSHpyLTE2MjQ4NTQzODYiLCJpc3MiOiJTS0xIb2NCdDl6Qk5qc1pLeThZaUVkSzRsU3NBZjhCSHpyIiwiZXhwIjoxNjI3NDQ2Mzg2LCJ1c2VySWQiOiJ1c2VyMiJ9.ARSD5PS1wFGjNT447SOY3Z-PGm0Qtgvfqj3nt0t8zmc'; +var user2 = 'eyJjdHkiOiJzdHJpbmdlZS1hcGk7dj0xIiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJqdGkiOiJTS0UxUmRVdFVhWXhOYVFRNFdyMTVxRjF6VUp1UWRBYVZULTE2MjUxMzQ3NTAiLCJpc3MiOiJTS0UxUmRVdFVhWXhOYVFRNFdyMTVxRjF6VUp1UWRBYVZUIiwiZXhwIjoxNjI3NzI2NzUwLCJ1c2VySWQiOiJ1c2VyMiJ9.Ll4bfqF2XZwpQPen-P4KLkdWTmuBbMG_akLsnIDsvM0'; var user1 = 'eyJjdHkiOiJzdHJpbmdlZS1hcGk7dj0xIiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJqdGkiOiJTS0xIb2NCdDl6Qk5qc1pLeThZaUVkSzRsU3NBZjhCSHpyLTE2MjQ4NTMwMjciLCJpc3MiOiJTS0xIb2NCdDl6Qk5qc1pLeThZaUVkSzRsU3NBZjhCSHpyIiwiZXhwIjoxNjI3NDQ1MDI3LCJ1c2VySWQiOiJ1c2VyMSJ9.9wrpbsDPM2-OpR4Sq5yOutacNlo9bYy78htcRDpPjCo'; StringeeClient client = StringeeClient(); diff --git a/lib/src/StringeeClient.dart b/lib/src/StringeeClient.dart index 07d7e36..50cd833 100644 --- a/lib/src/StringeeClient.dart +++ b/lib/src/StringeeClient.dart @@ -13,11 +13,14 @@ import 'call/StringeeCall2.dart'; class StringeeClient { // Native - static const MethodChannel methodChannel = MethodChannel('com.stringee.flutter.methodchannel'); - static const EventChannel eventChannel = EventChannel('com.stringee.flutter.eventchannel'); + static const MethodChannel methodChannel = + MethodChannel('com.stringee.flutter.methodchannel'); + static const EventChannel eventChannel = + EventChannel('com.stringee.flutter.eventchannel'); // Flutter - StreamController _eventStreamController = StreamController.broadcast(); + StreamController _eventStreamController = + StreamController.broadcast(); // static final StringeeClient _instance = StringeeClient._internal(); @@ -27,24 +30,26 @@ class StringeeClient { bool _isReconnecting = false; String get userId => _userId; + String get projectId => _projectId; + bool get hasConnected => _hasConnected; + bool get isReconnecting => _isReconnecting; StreamController get eventStreamController => _eventStreamController; + String get uuid => _uuid; // Multi Client List _serverAddresses = null; final String _uuid = GUIDGen.generate(); - StringeeClient({List serverAddresses, String baseAPIUrl}) { + StringeeClient( + {List serverAddresses, String baseAPIUrl}) { _serverAddresses = serverAddresses; - final params = { - 'uuid': _uuid, - 'baseAPIUrl': baseAPIUrl - }; + final params = {'uuid': _uuid, 'baseAPIUrl': baseAPIUrl}; // Config client methodChannel.invokeMapMethod('setupClient', params); @@ -61,7 +66,8 @@ class StringeeClient { void _listener(dynamic event) { assert(event != null); final Map map = event; - if (map['nativeEventType'] == StringeeObjectEventType.client.index && map['uuid'] == _uuid) { + if (map['nativeEventType'] == StringeeObjectEventType.client.index && + map['uuid'] == _uuid) { switch (map['event']) { case 'didConnect': _handleDidConnectEvent(map['body']); @@ -95,10 +101,12 @@ class StringeeClient { /// Connect to [StringeeClient] by [token] Future> connect(String token) async { - if (token == null || token.trim().isEmpty) return await reportInvalidValue('token'); + if (token == null || token.trim().isEmpty) + return await reportInvalidValue('token'); final params = { - 'serverAddresses': _serverAddresses != null ? json.encode(_serverAddresses) : null, + 'serverAddresses': + _serverAddresses != null ? json.encode(_serverAddresses) : null, 'token': token.trim(), 'uuid': _uuid }; @@ -108,9 +116,7 @@ class StringeeClient { /// Disconnect from [StringeeCLient] Future> disconnect() async { - final params = { - 'uuid': _uuid - }; + final params = {'uuid': _uuid}; return await methodChannel.invokeMethod('disconnect', params); } @@ -123,20 +129,17 @@ class StringeeClient { }) async { if (deviceToken == null || deviceToken.trim().isEmpty) return await reportInvalidValue('deviceToken'); + Map params = { + 'deviceToken': deviceToken.trim(), + 'uuid': _uuid + }; if (Platform.isIOS) { bool paramIsProduction = isProduction != null ? isProduction : false; bool paramsIsVoip = isVoip != null ? isVoip : true; - - final params = { - 'deviceToken': deviceToken.trim(), - 'isProduction': paramIsProduction, - 'isVoip': paramsIsVoip, - 'uuid': _uuid - }; - return await methodChannel.invokeMethod('registerPush', params); - } else { - return await methodChannel.invokeMethod('registerPush', deviceToken.trim()); + params['isProduction'] = paramIsProduction; + params['isVoip'] = paramsIsVoip; } + return await methodChannel.invokeMethod('registerPush', params); } /// Unregister push from Stringee by [deviceToken[ @@ -144,10 +147,7 @@ class StringeeClient { if (deviceToken == null || deviceToken.trim().isEmpty) return await reportInvalidValue('deviceToken'); - final params = { - 'deviceToken': deviceToken.trim(), - 'uuid': _uuid - }; + final params = {'deviceToken': deviceToken.trim(), 'uuid': _uuid}; return await methodChannel.invokeMethod('unregisterPush', params); } @@ -155,19 +155,17 @@ class StringeeClient { /// Send a [customData] to [userId] Future> sendCustomMessage( String userId, Map customData) async { - if (userId == null || userId.trim().isEmpty) return await reportInvalidValue('userId'); + if (userId == null || userId.trim().isEmpty) + return await reportInvalidValue('userId'); if (customData == null) return await reportInvalidValue('customData'); - final params = { - 'userId': userId.trim(), - 'msg': customData, - 'uuid': _uuid - }; + final params = {'userId': userId.trim(), 'msg': customData, 'uuid': _uuid}; return await methodChannel.invokeMethod('sendCustomMessage', params); } /// Create new [StringeeConversation] with [options] and [participants] Future> createConversation( - StringeeConversationOption options, List participants) async { + StringeeConversationOption options, + List participants) async { if (participants == null || participants.length == 0) return await reportInvalidValue('participants'); if (options == null) return await reportInvalidValue('options'); @@ -176,49 +174,47 @@ class StringeeClient { 'option': json.encode(options), 'uuid': _uuid }; - Map result = await methodChannel.invokeMethod('createConversation', params); - if (result['status']) result['body'] = StringeeConversation.fromJson(result['body'], this); + Map result = + await methodChannel.invokeMethod('createConversation', params); + if (result['status']) + result['body'] = StringeeConversation.fromJson(result['body'], this); return result; } /// Get [StringeeConversation] with [StringeeConversation.id] = [convId] Future> getConversationById(String convId) async { - if (convId == null || convId.trim().isEmpty) return await reportInvalidValue('convId'); + if (convId == null || convId.trim().isEmpty) + return await reportInvalidValue('convId'); - final params = { - 'convId': convId.trim(), - 'uuid': _uuid - }; + final params = {'convId': convId.trim(), 'uuid': _uuid}; Map result = await methodChannel.invokeMethod('getConversationById', params); - if (result['status']) result['body'] = StringeeConversation.fromJson(result['body'], this); + if (result['status']) + result['body'] = StringeeConversation.fromJson(result['body'], this); return result; } /// Get [StringeeConversation] by [userId] from Stringee server Future> getConversationByUserId(String userId) async { - if (userId == null || userId.trim().isEmpty) return await reportInvalidValue('convId'); + if (userId == null || userId.trim().isEmpty) + return await reportInvalidValue('convId'); - final params = { - 'userId': userId.trim(), - 'uuid': _uuid - }; + final params = {'userId': userId.trim(), 'uuid': _uuid}; Map result = await methodChannel.invokeMethod('getConversationByUserId', params); - if (result['status']) result['body'] = StringeeConversation.fromJson(result['body'], this); + if (result['status']) + result['body'] = StringeeConversation.fromJson(result['body'], this); return result; } /// Get local [StringeeConversation] Future> getLocalConversations() async { + final params = {'uuid': _uuid}; - final params = { - 'uuid': _uuid - }; - - Map result = await methodChannel.invokeMethod('getLocalConversations', params); + Map result = + await methodChannel.invokeMethod('getLocalConversations', params); if (result['status']) { List list = result['body']; List conversations = []; @@ -234,12 +230,10 @@ class StringeeClient { Future> getLastConversation(int count) async { if (count == null || count <= 0) return await reportInvalidValue('count'); - final param = { - 'count': count, - 'uuid': _uuid - }; + final param = {'count': count, 'uuid': _uuid}; - Map result = await methodChannel.invokeMethod('getLastConversation', param); + Map result = + await methodChannel.invokeMethod('getLastConversation', param); if (result['status']) { List list = result['body']; List conversations = []; @@ -252,14 +246,12 @@ class StringeeClient { } /// Get [count] of [StringeeConversation] before [datetime] from Stringee server - Future> getConversationsBefore(int count, int datetime) async { + Future> getConversationsBefore( + int count, int datetime) async { if (count == null || count <= 0) return await reportInvalidValue('count'); - if (datetime == null || datetime <= 0) return await reportInvalidValue('datetime'); - final param = { - 'count': count, - 'datetime': datetime, - 'uuid': _uuid - }; + if (datetime == null || datetime <= 0) + return await reportInvalidValue('datetime'); + final param = {'count': count, 'datetime': datetime, 'uuid': _uuid}; Map result = await methodChannel.invokeMethod('getConversationsBefore', param); if (result['status']) { @@ -274,15 +266,14 @@ class StringeeClient { } /// Get [count] of [StringeeConversation] after [datetime] from Stringee server - Future> getConversationsAfter(int count, int datetime) async { + Future> getConversationsAfter( + int count, int datetime) async { if (count == null || count <= 0) return await reportInvalidValue('count'); - if (datetime == null || datetime <= 0) return await reportInvalidValue('datetime'); - final param = { - 'count': count, - 'datetime': datetime, - 'uuid': _uuid - }; - Map result = await methodChannel.invokeMethod('getConversationsAfter', param); + if (datetime == null || datetime <= 0) + return await reportInvalidValue('datetime'); + final param = {'count': count, 'datetime': datetime, 'uuid': _uuid}; + Map result = + await methodChannel.invokeMethod('getConversationsAfter', param); if (result['status']) { List list = result['body']; List conversations = []; @@ -296,18 +287,14 @@ class StringeeClient { /// Clear local database Future> clearDb() async { - final param = { - 'uuid': _uuid - }; + final param = {'uuid': _uuid}; return await methodChannel.invokeMethod('clearDb', param); } /// Get total of unread [StringeeConversation] Future> getTotalUnread() async { - final param = { - 'uuid': _uuid - }; + final param = {'uuid': _uuid}; return await methodChannel.invokeMethod('getTotalUnread', param); } @@ -317,7 +304,8 @@ class StringeeClient { _projectId = map['projectId']; _hasConnected = true; _isReconnecting = map['isReconnecting']; - _eventStreamController.add({"eventType": StringeeClientEvents.didConnect, "body": null}); + _eventStreamController + .add({"eventType": StringeeClientEvents.didConnect, "body": null}); } void _handleDidDisconnectEvent(Map map) { @@ -325,7 +313,8 @@ class StringeeClient { _projectId = map['projectId']; _hasConnected = false; _isReconnecting = map['isReconnecting']; - _eventStreamController.add({"eventType": StringeeClientEvents.didDisconnect, "body": null}); + _eventStreamController + .add({"eventType": StringeeClientEvents.didDisconnect, "body": null}); } void _handleDidFailWithErrorEvent(Map map) { @@ -342,23 +331,27 @@ class StringeeClient { void _handleRequestAccessTokenEvent(Map map) { _userId = map['userId']; - _eventStreamController - .add({"eventType": StringeeClientEvents.requestAccessToken, "body": null}); + _eventStreamController.add( + {"eventType": StringeeClientEvents.requestAccessToken, "body": null}); } void _handleDidReceiveCustomMessageEvent(Map map) { - _eventStreamController - .add({"eventType": StringeeClientEvents.didReceiveCustomMessage, "body": map}); + _eventStreamController.add({ + "eventType": StringeeClientEvents.didReceiveCustomMessage, + "body": map + }); } void _handleIncomingCallEvent(Map map) { StringeeCall call = StringeeCall.fromCallInfo(map, this); - _eventStreamController.add({"eventType": StringeeClientEvents.incomingCall, "body": call}); + _eventStreamController + .add({"eventType": StringeeClientEvents.incomingCall, "body": call}); } void _handleIncomingCall2Event(Map map) { StringeeCall2 call = StringeeCall2.fromCallInfo(map, this); - _eventStreamController.add({"eventType": StringeeClientEvents.incomingCall2, "body": call}); + _eventStreamController + .add({"eventType": StringeeClientEvents.incomingCall2, "body": call}); } void _handleReceiveChangeEvent(Map map) { @@ -370,19 +363,24 @@ class StringeeClient { switch (objectType) { case ObjectType.conversation: for (int i = 0; i < objectDatas.length; i++) { - StringeeConversation conv = new StringeeConversation.fromJson(objectDatas[i], this); + StringeeConversation conv = + new StringeeConversation.fromJson(objectDatas[i], this); objects.add(conv); } break; case ObjectType.message: for (int i = 0; i < objectDatas.length; i++) { - StringeeMessage msg = new StringeeMessage.fromJson(objectDatas[i], this); + StringeeMessage msg = + new StringeeMessage.fromJson(objectDatas[i], this); objects.add(msg); } break; } - StringeeObjectChange stringeeChange = new StringeeObjectChange(changeType, objectType, objects); - _eventStreamController - .add({"eventType": StringeeClientEvents.didReceiveObjectChange, "body": stringeeChange}); + StringeeObjectChange stringeeChange = + new StringeeObjectChange(changeType, objectType, objects); + _eventStreamController.add({ + "eventType": StringeeClientEvents.didReceiveObjectChange, + "body": stringeeChange + }); } } diff --git a/lib/src/call/StringeeCall2.dart b/lib/src/call/StringeeCall2.dart index 47fcb8e..b404ff7 100644 --- a/lib/src/call/StringeeCall2.dart +++ b/lib/src/call/StringeeCall2.dart @@ -350,7 +350,7 @@ class StringeeCall2 { }; if (Platform.isAndroid) { if (cameraId != null) { - params['cameraId'] = cameraId.toString(); + params['cameraId'] = cameraId; } } return await StringeeClient.methodChannel From 6cf407e2a6bd0931ab8166b6e5386eac78a1e51c Mon Sep 17 00:00:00 2001 From: AnhNQK Date: Fri, 2 Jul 2021 09:19:53 +0700 Subject: [PATCH 02/26] clean --- .../java/com/stringee/stringeeflutterplugin/ClientWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java index eb8584c..010b78e 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java @@ -390,7 +390,7 @@ public void onSuccess() { @Override public void onError(final StringeeError error) { _handler.post(() -> { - Log.d(TAG, "initAnswer: false - " + error.getCode() + " - " + error.getMessage()); + Log.d(TAG, "registerPush: false - " + error.getCode() + " - " + error.getMessage()); Map map = new HashMap(); map.put("status", false); map.put("code", error.getCode()); From 66669920229ce6273b4cdca8cb5e6f8272e70eae Mon Sep 17 00:00:00 2001 From: AnhNQK Date: Wed, 4 Aug 2021 18:19:19 +0700 Subject: [PATCH 03/26] remove lamdba (cherry picked from commit 67defaa083db929e435e5ce826f6c92d43307294) --- .../stringeeflutterplugin/Call2Wrapper.java | 526 ++++++------ .../stringeeflutterplugin/CallWrapper.java | 568 +++++++------ .../stringeeflutterplugin/ClientWrapper.java | 738 +++++++++-------- .../ConversationManager.java | 770 ++++++++++-------- .../stringeeflutterplugin/MessageManager.java | 102 ++- 5 files changed, 1543 insertions(+), 1161 deletions(-) diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java index 8e0c4f8..a22693f 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java @@ -1,13 +1,19 @@ package com.stringee.stringeeflutterplugin; +import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.Call2Event; +import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.CallEvent; + import android.os.Handler; import android.util.Log; import android.widget.FrameLayout; import com.stringee.call.StringeeCall2; +import com.stringee.call.StringeeCall2.CallStatsListener; import com.stringee.call.StringeeCall2.MediaState; import com.stringee.call.StringeeCall2.SignalingState; +import com.stringee.call.StringeeCall2.StringeeCallStats; import com.stringee.common.StringeeAudioManager.AudioDevice; +import com.stringee.common.StringeeAudioManager.AudioManagerEvents; import com.stringee.exception.StringeeError; import com.stringee.listener.StatusListener; @@ -20,12 +26,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import io.flutter.plugin.common.MethodChannel.Result; -import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.Call2Event; -import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.CallEvent; - public class Call2Wrapper implements StringeeCall2.StringeeCallListener { private ClientWrapper _clientWrapper; private StringeeCall2 _call; @@ -55,24 +59,32 @@ public Call2Wrapper(ClientWrapper clientWrapper, StringeeCall2 call, Result resu } public void prepareCall() { - _manager.startAudioManager(_manager.getContext(), (selectedAudioDevice, availableAudioDevices) -> _handler.post(() -> { - Log.d(TAG, "onAudioManagerDevicesChanged: " + availableAudioDevices + ", " + "selected: " + selectedAudioDevice); - List audioDeviceList = new ArrayList(); - audioDeviceList.addAll(availableAudioDevices); - List codeList = new ArrayList(); - for (int i = 0; i < audioDeviceList.size(); i++) { - codeList.add(audioDeviceList.get(i).ordinal()); + _manager.startAudioManager(_manager.getContext(), new AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(AudioDevice selectedAudioDevice, Set availableAudioDevices) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onAudioManagerDevicesChanged: " + availableAudioDevices + ", " + "selected: " + selectedAudioDevice); + List audioDeviceList = new ArrayList(); + audioDeviceList.addAll(availableAudioDevices); + List codeList = new ArrayList(); + for (int i = 0; i < audioDeviceList.size(); i++) { + codeList.add(audioDeviceList.get(i).ordinal()); + } + Map map = new HashMap(); + map.put("nativeEventType", CallEvent.getValue()); + map.put("event", "didChangeAudioDevice"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("code", selectedAudioDevice.ordinal()); + bodyMap.put("codeList", codeList); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } + }); } - Map map = new HashMap(); - map.put("nativeEventType", CallEvent.getValue()); - map.put("event", "didChangeAudioDevice"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("code", selectedAudioDevice.ordinal()); - bodyMap.put("codeList", codeList); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); - })); + }); _mediaState = null; hasRemoteStream = false; @@ -99,25 +111,31 @@ public void initAnswer(final Result result) { _call.ringing(new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "initAnswer: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "initAnswer: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "initAnswer: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "initAnswer: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -194,37 +212,46 @@ public void sendCallInfo(final Map callInfo, final Result result) { _call.sendCallInfo(jsonObject, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "sendCallInfo: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendCallInfo: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "sendCallInfo: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendCallInfo: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); } catch (final JSONException e) { e.printStackTrace(); - _handler.post(() -> { - Log.d(TAG, "sendCallInfo: false - -2 - " + e.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", -2); - map.put("message", e.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendCallInfo: false - -2 - " + e.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -2); + map.put("message", e.getMessage()); + result.success(map); + } }); } } @@ -270,26 +297,32 @@ public void switchCamera(final Result result) { _call.switchCamera(new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "switchCamera: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "switchCamera: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "switchCamera: false - code: " + stringeeError.getCode() + " - message: " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "switchCamera: false - code: " + stringeeError.getCode() + " - message: " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -305,26 +338,32 @@ public void switchCamera(int cameraId, final Result result) { _call.switchCamera(new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "switchCamera: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "switchCamera: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "switchCamera: false - code: " + stringeeError.getCode() + " - message: " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "switchCamera: false - code: " + stringeeError.getCode() + " - message: " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }, cameraId); @@ -352,23 +391,31 @@ public void resumeVideo(final Result result) { * @param result */ public void getCallStats(final Result result) { - _call.getStats(stringeeCallStats -> _handler.post(() -> { - Log.d(TAG, "getCallStats: callBytesReceived: " + stringeeCallStats.callBytesReceived + - " - callPacketsLost: " + stringeeCallStats.callPacketsLost + - " - callPacketsReceived: " + stringeeCallStats.callPacketsReceived + - " - timeStamp: " + stringeeCallStats.timeStamp); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - Map dataMap = new HashMap(); - dataMap.put("bytesReceived", stringeeCallStats.callBytesReceived); - dataMap.put("packetsLost", stringeeCallStats.callPacketsLost); - dataMap.put("packetsReceived", stringeeCallStats.callPacketsReceived); - dataMap.put("timeStamp", stringeeCallStats.timeStamp); - map.put("stats", dataMap); - result.success(map); - })); + _call.getStats(new CallStatsListener() { + @Override + public void onCallStats(StringeeCallStats stringeeCallStats) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getCallStats: callBytesReceived: " + stringeeCallStats.callBytesReceived + + " - callPacketsLost: " + stringeeCallStats.callPacketsLost + + " - callPacketsReceived: " + stringeeCallStats.callPacketsReceived + + " - timeStamp: " + stringeeCallStats.timeStamp); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + Map dataMap = new HashMap(); + dataMap.put("bytesReceived", stringeeCallStats.callBytesReceived); + dataMap.put("packetsLost", stringeeCallStats.callPacketsLost); + dataMap.put("packetsReceived", stringeeCallStats.callPacketsReceived); + dataMap.put("timeStamp", stringeeCallStats.timeStamp); + map.put("stats", dataMap); + result.success(map); + } + }); + } + }); } /** @@ -409,158 +456,176 @@ public void renderRemoteView(boolean isOverlay) { @Override public void onSignalingStateChange(final StringeeCall2 stringeeCall, final StringeeCall2.SignalingState signalingState, final String s, final int i, final String s1) { - _handler.post(() -> { - if (signalingState == SignalingState.CALLING) { - Log.d(TAG, "makeCall: success"); - _manager.getCall2sMap().put(stringeeCall.getCallId(), Call2Wrapper.this); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - Map callInfoMap = new HashMap(); - callInfoMap.put("callId", stringeeCall.getCallId()); - callInfoMap.put("from", stringeeCall.getFrom()); - callInfoMap.put("to", stringeeCall.getTo()); - callInfoMap.put("fromAlias", stringeeCall.getFromAlias()); - callInfoMap.put("toAlias", stringeeCall.getToAlias()); - callInfoMap.put("isVideocall", stringeeCall.isVideoCall()); - int callType = 0; - if (!stringeeCall.getFrom().equals(_clientWrapper.getClient().getUserId())) { - callType = 1; - } - callInfoMap.put("callType", callType); - callInfoMap.put("isVideoCall", stringeeCall.isVideoCall()); - callInfoMap.put("customDataFromYourServer", stringeeCall.getCustomDataFromYourServer()); - map.put("callInfo", callInfoMap); - if (_makeCallResult != null) { - _makeCallResult.success(map); - _makeCallResult = null; + _handler.post(new Runnable() { + @Override + public void run() { + if (signalingState == SignalingState.CALLING) { + Log.d(TAG, "makeCall: success"); + _manager.getCall2sMap().put(stringeeCall.getCallId(), Call2Wrapper.this); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + Map callInfoMap = new HashMap(); + callInfoMap.put("callId", stringeeCall.getCallId()); + callInfoMap.put("from", stringeeCall.getFrom()); + callInfoMap.put("to", stringeeCall.getTo()); + callInfoMap.put("fromAlias", stringeeCall.getFromAlias()); + callInfoMap.put("toAlias", stringeeCall.getToAlias()); + callInfoMap.put("isVideocall", stringeeCall.isVideoCall()); + int callType = 0; + if (!stringeeCall.getFrom().equals(_clientWrapper.getClient().getUserId())) { + callType = 1; + } + callInfoMap.put("callType", callType); + callInfoMap.put("isVideoCall", stringeeCall.isVideoCall()); + callInfoMap.put("customDataFromYourServer", stringeeCall.getCustomDataFromYourServer()); + map.put("callInfo", callInfoMap); + if (_makeCallResult != null) { + _makeCallResult.success(map); + _makeCallResult = null; + } } - } - Log.d(TAG, "onSignalingStateChange2: " + signalingState); - Map map = new HashMap(); - map.put("nativeEventType", Call2Event.getValue()); - map.put("event", "didChangeSignalingState"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("callId", stringeeCall.getCallId()); - bodyMap.put("code", signalingState.getValue()); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); + Log.d(TAG, "onSignalingStateChange2: " + signalingState); + Map map = new HashMap(); + map.put("nativeEventType", Call2Event.getValue()); + map.put("event", "didChangeSignalingState"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("callId", stringeeCall.getCallId()); + bodyMap.put("code", signalingState.getValue()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @Override public void onError(final StringeeCall2 stringeeCall, final int code, final String message) { - _handler.post(() -> { - Log.d(TAG, "onError2: code: " + code + " -message: " + message); - Map map = new HashMap(); - map.put("status", false); - map.put("code", code); - map.put("message", message); - if (_makeCallResult != null) { - _makeCallResult.success(map); - _makeCallResult = null; + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onError2: code: " + code + " -message: " + message); + Map map = new HashMap(); + map.put("status", false); + map.put("code", code); + map.put("message", message); + if (_makeCallResult != null) { + _makeCallResult.success(map); + _makeCallResult = null; + } } }); } @Override public void onHandledOnAnotherDevice(final StringeeCall2 stringeeCall, final StringeeCall2.SignalingState signalingState, final String description) { - _handler.post(() -> { - Log.d(TAG, "onHandledOnAnotherDevice2:" + "\nsignalingState: " + signalingState + " - description: " + description); - Map map = new HashMap(); - map.put("nativeEventType", Call2Event.getValue()); - map.put("event", "didHandleOnAnotherDevice"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("callId", stringeeCall.getCallId()); - bodyMap.put("code", signalingState.getValue()); - bodyMap.put("description", description); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); - }); - } - - @Override - public void onMediaStateChange(final StringeeCall2 stringeeCall, final StringeeCall2.MediaState mediaState) { - _handler.post(() -> { - _mediaState = mediaState; - Log.d(TAG, "onMediaStateChange2: " + mediaState); - Map map = new HashMap(); - map.put("nativeEventType", Call2Event.getValue()); - map.put("event", "didChangeMediaState"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("callId", stringeeCall.getCallId()); - bodyMap.put("code", mediaState.getValue()); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); - - if (_mediaState == MediaState.CONNECTED && hasRemoteStream && !remoteStreamShowed && stringeeCall.isVideoCall()) { - remoteStreamShowed = true; - Map map1 = new HashMap(); - map1.put("nativeEventType", Call2Event.getValue()); - map1.put("event", "didReceiveRemoteStream"); - map1.put("uuid", _clientWrapper.getId()); - Map bodyMap1 = new HashMap(); - bodyMap1.put("callId", stringeeCall.getCallId()); - map1.put("body", bodyMap1); - StringeeFlutterPlugin._eventSink.success(map1); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onHandledOnAnotherDevice2:" + "\nsignalingState: " + signalingState + " - description: " + description); + Map map = new HashMap(); + map.put("nativeEventType", Call2Event.getValue()); + map.put("event", "didHandleOnAnotherDevice"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("callId", stringeeCall.getCallId()); + bodyMap.put("code", signalingState.getValue()); + bodyMap.put("description", description); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); } }); } @Override - public void onLocalStream(final StringeeCall2 stringeeCall) { - _handler.post(() -> { - if (stringeeCall.isVideoCall()) { - Log.d(TAG, "onLocalStream2"); + public void onMediaStateChange(final StringeeCall2 stringeeCall, final StringeeCall2.MediaState mediaState) { + _handler.post(new Runnable() { + @Override + public void run() { + _mediaState = mediaState; + Log.d(TAG, "onMediaStateChange2: " + mediaState); Map map = new HashMap(); map.put("nativeEventType", Call2Event.getValue()); - map.put("event", "didReceiveLocalStream"); + map.put("event", "didChangeMediaState"); map.put("uuid", _clientWrapper.getId()); Map bodyMap = new HashMap(); bodyMap.put("callId", stringeeCall.getCallId()); + bodyMap.put("code", mediaState.getValue()); map.put("body", bodyMap); - if (isResumeVideo) { - Map localViewOptions = _manager.getLocalViewOptions().get(stringeeCall.getCallId()); - FrameLayout localView = (FrameLayout) localViewOptions.get("layout"); - boolean isMirror = (Boolean) localViewOptions.get("isMirror"); - boolean isOverlay = (Boolean) localViewOptions.get("isOverlay"); - ScalingType scalingType = (ScalingType) localViewOptions.get("scalingType"); - - localView.removeAllViews(); - stringeeCall.getLocalView().setScalingType(scalingType); - localView.addView(stringeeCall.getLocalView()); - stringeeCall.renderLocalView(isOverlay); - stringeeCall.getLocalView().setMirror(isMirror); - - isResumeVideo = false; - } StringeeFlutterPlugin._eventSink.success(map); + + if (_mediaState == MediaState.CONNECTED && hasRemoteStream && !remoteStreamShowed && stringeeCall.isVideoCall()) { + remoteStreamShowed = true; + Map map1 = new HashMap(); + map1.put("nativeEventType", Call2Event.getValue()); + map1.put("event", "didReceiveRemoteStream"); + map1.put("uuid", _clientWrapper.getId()); + Map bodyMap1 = new HashMap(); + bodyMap1.put("callId", stringeeCall.getCallId()); + map1.put("body", bodyMap1); + StringeeFlutterPlugin._eventSink.success(map1); + } } }); } @Override - public void onRemoteStream(final StringeeCall2 stringeeCall) { - _handler.post(() -> { - if (stringeeCall.isVideoCall()) { - Log.d(TAG, "onRemoteStream2"); - if (_mediaState == MediaState.CONNECTED && !remoteStreamShowed) { - remoteStreamShowed = true; + public void onLocalStream(final StringeeCall2 stringeeCall) { + _handler.post(new Runnable() { + @Override + public void run() { + if (stringeeCall.isVideoCall()) { + Log.d(TAG, "onLocalStream2"); Map map = new HashMap(); map.put("nativeEventType", Call2Event.getValue()); - map.put("event", "didReceiveRemoteStream"); + map.put("event", "didReceiveLocalStream"); map.put("uuid", _clientWrapper.getId()); Map bodyMap = new HashMap(); bodyMap.put("callId", stringeeCall.getCallId()); map.put("body", bodyMap); + if (isResumeVideo) { + Map localViewOptions = _manager.getLocalViewOptions().get(stringeeCall.getCallId()); + FrameLayout localView = (FrameLayout) localViewOptions.get("layout"); + boolean isMirror = (Boolean) localViewOptions.get("isMirror"); + boolean isOverlay = (Boolean) localViewOptions.get("isOverlay"); + ScalingType scalingType = (ScalingType) localViewOptions.get("scalingType"); + + localView.removeAllViews(); + stringeeCall.getLocalView().setScalingType(scalingType); + localView.addView(stringeeCall.getLocalView()); + stringeeCall.renderLocalView(isOverlay); + stringeeCall.getLocalView().setMirror(isMirror); + + isResumeVideo = false; + } StringeeFlutterPlugin._eventSink.success(map); - } else { - hasRemoteStream = true; + } + } + }); + } + + @Override + public void onRemoteStream(final StringeeCall2 stringeeCall) { + _handler.post(new Runnable() { + @Override + public void run() { + if (stringeeCall.isVideoCall()) { + Log.d(TAG, "onRemoteStream2"); + if (_mediaState == MediaState.CONNECTED && !remoteStreamShowed) { + remoteStreamShowed = true; + Map map = new HashMap(); + map.put("nativeEventType", Call2Event.getValue()); + map.put("event", "didReceiveRemoteStream"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("callId", stringeeCall.getCallId()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } else { + hasRemoteStream = true; + } } } }); @@ -568,20 +633,23 @@ public void onRemoteStream(final StringeeCall2 stringeeCall) { @Override public void onCallInfo(final StringeeCall2 stringeeCall, final JSONObject jsonObject) { - _handler.post(() -> { - try { - Log.d(TAG, "onCallInfo2: " + jsonObject.toString()); - Map map = new HashMap(); - map.put("nativeEventType", Call2Event.getValue()); - map.put("event", "didReceiveCallInfo"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("callId", stringeeCall.getCallId()); - bodyMap.put("info", Utils.convertJsonToMap(jsonObject)); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); - } catch (JSONException e) { - e.printStackTrace(); + _handler.post(new Runnable() { + @Override + public void run() { + try { + Log.d(TAG, "onCallInfo2: " + jsonObject.toString()); + Map map = new HashMap(); + map.put("nativeEventType", Call2Event.getValue()); + map.put("event", "didReceiveCallInfo"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("callId", stringeeCall.getCallId()); + bodyMap.put("info", Utils.convertJsonToMap(jsonObject)); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } catch (JSONException e) { + e.printStackTrace(); + } } }); } diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java index 08e5f05..614a2c2 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java @@ -1,13 +1,18 @@ package com.stringee.stringeeflutterplugin; +import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.CallEvent; + import android.os.Handler; import android.util.Log; import android.widget.FrameLayout; import com.stringee.call.StringeeCall; +import com.stringee.call.StringeeCall.CallStatsListener; import com.stringee.call.StringeeCall.MediaState; import com.stringee.call.StringeeCall.SignalingState; +import com.stringee.call.StringeeCall.StringeeCallStats; import com.stringee.common.StringeeAudioManager.AudioDevice; +import com.stringee.common.StringeeAudioManager.AudioManagerEvents; import com.stringee.exception.StringeeError; import com.stringee.listener.StatusListener; @@ -20,11 +25,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import io.flutter.plugin.common.MethodChannel.Result; -import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.CallEvent; - public class CallWrapper implements StringeeCall.StringeeCallListener { private ClientWrapper _clientWrapper; private StringeeCall _call; @@ -54,24 +58,32 @@ public CallWrapper(ClientWrapper client, StringeeCall call, Result result) { } public void prepareCall() { - _manager.startAudioManager(_manager.getContext(), (selectedAudioDevice, availableAudioDevices) -> _handler.post(() -> { - Log.d(TAG, "onAudioManagerDevicesChanged: " + availableAudioDevices + ", " + "selected: " + selectedAudioDevice); - List audioDeviceList = new java.util.ArrayList(); - audioDeviceList.addAll(availableAudioDevices); - List codeList = new ArrayList(); - for (int i = 0; i < audioDeviceList.size(); i++) { - codeList.add(audioDeviceList.get(i).ordinal()); + _manager.startAudioManager(_manager.getContext(), new AudioManagerEvents() { + @Override + public void onAudioDeviceChanged(AudioDevice selectedAudioDevice, Set availableAudioDevices) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onAudioManagerDevicesChanged: " + availableAudioDevices + ", " + "selected: " + selectedAudioDevice); + List audioDeviceList = new java.util.ArrayList(); + audioDeviceList.addAll(availableAudioDevices); + List codeList = new ArrayList(); + for (int i = 0; i < audioDeviceList.size(); i++) { + codeList.add(audioDeviceList.get(i).ordinal()); + } + Map map = new HashMap(); + map.put("nativeEventType", CallEvent.getValue()); + map.put("event", "didChangeAudioDevice"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("code", selectedAudioDevice.ordinal()); + bodyMap.put("codeList", codeList); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } + }); } - Map map = new HashMap(); - map.put("nativeEventType", CallEvent.getValue()); - map.put("event", "didChangeAudioDevice"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("code", selectedAudioDevice.ordinal()); - bodyMap.put("codeList", codeList); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); - })); + }); _mediaState = null; hasRemoteStream = false; @@ -98,25 +110,31 @@ public void initAnswer(final Result result) { _call.ringing(new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "initAnswer: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "initAnswer: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "initAnswer: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "initAnswer: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -191,25 +209,31 @@ public void sendDTMF(final String dtmf, final Result result) { _call.sendDTMF(dtmf, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "sendDtmf: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendDtmf: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError error) { - _handler.post(() -> { - Log.d(TAG, "sendDtmf: false - " + error.getCode() + " - " + error.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", error.getCode()); - map.put("message", error.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendDtmf: false - " + error.getCode() + " - " + error.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", error.getCode()); + map.put("message", error.getMessage()); + result.success(map); + } }); } }); @@ -227,37 +251,46 @@ public void sendCallInfo(final Map callInfo, final Result result) { _call.sendCallInfo(jsonObject, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "sendCallInfo: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendCallInfo: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "sendCallInfo: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendCallInfo: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); } catch (final JSONException e) { e.printStackTrace(); - _handler.post(() -> { - Log.d(TAG, "sendCallInfo: false - -2 - " + e.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", -2); - map.put("message", e.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendCallInfo: false - -2 - " + e.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -2); + map.put("message", e.getMessage()); + result.success(map); + } }); } } @@ -303,26 +336,32 @@ public void switchCamera(final Result result) { _call.switchCamera(new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "switchCamera: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "switchCamera: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "switchCamera: false - code: " + stringeeError.getCode() + " - message: " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "switchCamera: false - code: " + stringeeError.getCode() + " - message: " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -338,26 +377,32 @@ public void switchCamera(int cameraId, final Result result) { _call.switchCamera(new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "switchCamera: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "switchCamera: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "switchCamera: false - code: " + stringeeError.getCode() + " - message: " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "switchCamera: false - code: " + stringeeError.getCode() + " - message: " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }, cameraId); @@ -385,23 +430,31 @@ public void resumeVideo(final Result result) { * @param result */ public void getCallStats(final Result result) { - _call.getStats(stringeeCallStats -> _handler.post(() -> { - Log.d(TAG, "getCallStats: callBytesReceived: " + stringeeCallStats.callBytesReceived + - " - callPacketsLost: " + stringeeCallStats.callPacketsLost + - " - callPacketsReceived: " + stringeeCallStats.callPacketsReceived + - " - timeStamp: " + stringeeCallStats.timeStamp); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - Map dataMap = new HashMap(); - dataMap.put("bytesReceived", stringeeCallStats.callBytesReceived); - dataMap.put("packetsLost", stringeeCallStats.callPacketsLost); - dataMap.put("packetsReceived", stringeeCallStats.callPacketsReceived); - dataMap.put("timeStamp", stringeeCallStats.timeStamp); - map.put("stats", dataMap); - result.success(map); - })); + _call.getStats(new CallStatsListener() { + @Override + public void onCallStats(StringeeCallStats stringeeCallStats) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getCallStats: callBytesReceived: " + stringeeCallStats.callBytesReceived + + " - callPacketsLost: " + stringeeCallStats.callPacketsLost + + " - callPacketsReceived: " + stringeeCallStats.callPacketsReceived + + " - timeStamp: " + stringeeCallStats.timeStamp); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + Map dataMap = new HashMap(); + dataMap.put("bytesReceived", stringeeCallStats.callBytesReceived); + dataMap.put("packetsLost", stringeeCallStats.callPacketsLost); + dataMap.put("packetsReceived", stringeeCallStats.callPacketsReceived); + dataMap.put("timeStamp", stringeeCallStats.timeStamp); + map.put("stats", dataMap); + result.success(map); + } + }); + } + }); } /** @@ -442,163 +495,181 @@ public void renderRemoteView(boolean isOverlay) { @Override public void onSignalingStateChange(final StringeeCall stringeeCall, final StringeeCall.SignalingState signalingState, final String s, final int i, final String s1) { - _handler.post(() -> { - if (signalingState == SignalingState.CALLING) { - Log.d(TAG, "makeCall: success"); - _manager.getCallsMap().put(stringeeCall.getCallId(), CallWrapper.this); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - Map callInfoMap = new HashMap(); - callInfoMap.put("callId", stringeeCall.getCallId()); - callInfoMap.put("from", stringeeCall.getFrom()); - callInfoMap.put("to", stringeeCall.getTo()); - callInfoMap.put("fromAlias", stringeeCall.getFromAlias()); - callInfoMap.put("toAlias", stringeeCall.getToAlias()); - callInfoMap.put("isVideocall", stringeeCall.isVideoCall()); - int callType = 0; - if (!stringeeCall.getFrom().equals(_clientWrapper.getClient().getUserId())) { - callType = 1; - } - if (stringeeCall.isAppToPhoneCall()) { - callType = 2; - } else if (stringeeCall.isPhoneToAppCall()) { - callType = 3; - } - callInfoMap.put("callType", callType); - callInfoMap.put("isVideoCall", stringeeCall.isVideoCall()); - callInfoMap.put("customDataFromYourServer", stringeeCall.getCustomDataFromYourServer()); - map.put("callInfo", callInfoMap); - if (_makeCallResult != null) { - _makeCallResult.success(map); - _makeCallResult = null; + _handler.post(new Runnable() { + @Override + public void run() { + if (signalingState == SignalingState.CALLING) { + Log.d(TAG, "makeCall: success"); + _manager.getCallsMap().put(stringeeCall.getCallId(), CallWrapper.this); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + Map callInfoMap = new HashMap(); + callInfoMap.put("callId", stringeeCall.getCallId()); + callInfoMap.put("from", stringeeCall.getFrom()); + callInfoMap.put("to", stringeeCall.getTo()); + callInfoMap.put("fromAlias", stringeeCall.getFromAlias()); + callInfoMap.put("toAlias", stringeeCall.getToAlias()); + callInfoMap.put("isVideocall", stringeeCall.isVideoCall()); + int callType = 0; + if (!stringeeCall.getFrom().equals(_clientWrapper.getClient().getUserId())) { + callType = 1; + } + if (stringeeCall.isAppToPhoneCall()) { + callType = 2; + } else if (stringeeCall.isPhoneToAppCall()) { + callType = 3; + } + callInfoMap.put("callType", callType); + callInfoMap.put("isVideoCall", stringeeCall.isVideoCall()); + callInfoMap.put("customDataFromYourServer", stringeeCall.getCustomDataFromYourServer()); + map.put("callInfo", callInfoMap); + if (_makeCallResult != null) { + _makeCallResult.success(map); + _makeCallResult = null; + } } - } - Log.d(TAG, "onSignalingStateChange: " + signalingState); - Map map = new HashMap(); - map.put("nativeEventType", CallEvent.getValue()); - map.put("event", "didChangeSignalingState"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("callId", stringeeCall.getCallId()); - bodyMap.put("code", signalingState.getValue()); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); + Log.d(TAG, "onSignalingStateChange: " + signalingState); + Map map = new HashMap(); + map.put("nativeEventType", CallEvent.getValue()); + map.put("event", "didChangeSignalingState"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("callId", stringeeCall.getCallId()); + bodyMap.put("code", signalingState.getValue()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @Override public void onError(final StringeeCall stringeeCall, final int code, final String message) { - _handler.post(() -> { - Log.d(TAG, "onError: code: " + code + " -message: " + message); - Map map = new HashMap(); - map.put("status", false); - map.put("code", code); - map.put("message", message); - if (_makeCallResult != null) { - _makeCallResult.success(map); - _makeCallResult = null; + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onError: code: " + code + " -message: " + message); + Map map = new HashMap(); + map.put("status", false); + map.put("code", code); + map.put("message", message); + if (_makeCallResult != null) { + _makeCallResult.success(map); + _makeCallResult = null; + } } }); } @Override public void onHandledOnAnotherDevice(final StringeeCall stringeeCall, final StringeeCall.SignalingState signalingState, final String description) { - _handler.post(() -> { - Log.d(TAG, "onHandledOnAnotherDevice:" + "\nsignalingState: " + signalingState + " - description: " + description); - Map map = new HashMap(); - map.put("nativeEventType", CallEvent.getValue()); - map.put("event", "didHandleOnAnotherDevice"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("callId", stringeeCall.getCallId()); - bodyMap.put("code", signalingState.getValue()); - bodyMap.put("description", description); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); - }); - } - - @Override - public void onMediaStateChange(final StringeeCall stringeeCall, final StringeeCall.MediaState mediaState) { - _handler.post(() -> { - _mediaState = mediaState; - Log.d(TAG, "onMediaStateChange: " + mediaState); - Map map = new HashMap(); - map.put("nativeEventType", CallEvent.getValue()); - map.put("event", "didChangeMediaState"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("callId", stringeeCall.getCallId()); - bodyMap.put("code", mediaState.getValue()); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); - - if (_mediaState == MediaState.CONNECTED && hasRemoteStream && !remoteStreamShowed && stringeeCall.isVideoCall()) { - remoteStreamShowed = true; - Map map1 = new HashMap(); - map1.put("nativeEventType", CallEvent.getValue()); - map1.put("event", "didReceiveRemoteStream"); - map1.put("uuid", _clientWrapper.getId()); - Map bodyMap1 = new HashMap(); - bodyMap1.put("callId", stringeeCall.getCallId()); - map1.put("body", bodyMap1); - StringeeFlutterPlugin._eventSink.success(map1); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onHandledOnAnotherDevice:" + "\nsignalingState: " + signalingState + " - description: " + description); + Map map = new HashMap(); + map.put("nativeEventType", CallEvent.getValue()); + map.put("event", "didHandleOnAnotherDevice"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("callId", stringeeCall.getCallId()); + bodyMap.put("code", signalingState.getValue()); + bodyMap.put("description", description); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); } }); } @Override - public void onLocalStream(final StringeeCall stringeeCall) { - _handler.post(() -> { - if (stringeeCall.isVideoCall()) { - Log.d(TAG, "onLocalStream"); + public void onMediaStateChange(final StringeeCall stringeeCall, final StringeeCall.MediaState mediaState) { + _handler.post(new Runnable() { + @Override + public void run() { + _mediaState = mediaState; + Log.d(TAG, "onMediaStateChange: " + mediaState); Map map = new HashMap(); map.put("nativeEventType", CallEvent.getValue()); - map.put("event", "didReceiveLocalStream"); + map.put("event", "didChangeMediaState"); map.put("uuid", _clientWrapper.getId()); Map bodyMap = new HashMap(); bodyMap.put("callId", stringeeCall.getCallId()); + bodyMap.put("code", mediaState.getValue()); map.put("body", bodyMap); - if (isResumeVideo) { - Map localViewOptions = _manager.getLocalViewOptions().get(stringeeCall.getCallId()); - FrameLayout localView = (FrameLayout) localViewOptions.get("layout"); - boolean isMirror = (Boolean) localViewOptions.get("isMirror"); - boolean isOverlay = (Boolean) localViewOptions.get("isOverlay"); - ScalingType scalingType = (ScalingType) localViewOptions.get("scalingType"); - - localView.removeAllViews(); - stringeeCall.getLocalView().setScalingType(scalingType); - localView.addView(stringeeCall.getLocalView()); - stringeeCall.renderLocalView(isOverlay); - stringeeCall.getLocalView().setMirror(isMirror); - - isResumeVideo = false; - } StringeeFlutterPlugin._eventSink.success(map); + + if (_mediaState == MediaState.CONNECTED && hasRemoteStream && !remoteStreamShowed && stringeeCall.isVideoCall()) { + remoteStreamShowed = true; + Map map1 = new HashMap(); + map1.put("nativeEventType", CallEvent.getValue()); + map1.put("event", "didReceiveRemoteStream"); + map1.put("uuid", _clientWrapper.getId()); + Map bodyMap1 = new HashMap(); + bodyMap1.put("callId", stringeeCall.getCallId()); + map1.put("body", bodyMap1); + StringeeFlutterPlugin._eventSink.success(map1); + } } }); } @Override - public void onRemoteStream(final StringeeCall stringeeCall) { - _handler.post(() -> { - if (stringeeCall.isVideoCall()) { - Log.d(TAG, "onRemoteStream"); - if (_mediaState == MediaState.CONNECTED && !remoteStreamShowed) { - remoteStreamShowed = true; + public void onLocalStream(final StringeeCall stringeeCall) { + _handler.post(new Runnable() { + @Override + public void run() { + if (stringeeCall.isVideoCall()) { + Log.d(TAG, "onLocalStream"); Map map = new HashMap(); map.put("nativeEventType", CallEvent.getValue()); - map.put("event", "didReceiveRemoteStream"); + map.put("event", "didReceiveLocalStream"); map.put("uuid", _clientWrapper.getId()); Map bodyMap = new HashMap(); bodyMap.put("callId", stringeeCall.getCallId()); map.put("body", bodyMap); + if (isResumeVideo) { + Map localViewOptions = _manager.getLocalViewOptions().get(stringeeCall.getCallId()); + FrameLayout localView = (FrameLayout) localViewOptions.get("layout"); + boolean isMirror = (Boolean) localViewOptions.get("isMirror"); + boolean isOverlay = (Boolean) localViewOptions.get("isOverlay"); + ScalingType scalingType = (ScalingType) localViewOptions.get("scalingType"); + + localView.removeAllViews(); + stringeeCall.getLocalView().setScalingType(scalingType); + localView.addView(stringeeCall.getLocalView()); + stringeeCall.renderLocalView(isOverlay); + stringeeCall.getLocalView().setMirror(isMirror); + + isResumeVideo = false; + } StringeeFlutterPlugin._eventSink.success(map); - } else { - hasRemoteStream = true; + } + } + }); + } + + @Override + public void onRemoteStream(final StringeeCall stringeeCall) { + _handler.post(new Runnable() { + @Override + public void run() { + if (stringeeCall.isVideoCall()) { + Log.d(TAG, "onRemoteStream"); + if (_mediaState == MediaState.CONNECTED && !remoteStreamShowed) { + remoteStreamShowed = true; + Map map = new HashMap(); + map.put("nativeEventType", CallEvent.getValue()); + map.put("event", "didReceiveRemoteStream"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("callId", stringeeCall.getCallId()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } else { + hasRemoteStream = true; + } } } }); @@ -606,20 +677,23 @@ public void onRemoteStream(final StringeeCall stringeeCall) { @Override public void onCallInfo(final StringeeCall stringeeCall, final JSONObject jsonObject) { - _handler.post(() -> { - try { - Log.d(TAG, "onCallInfo: " + jsonObject.toString()); - Map map = new HashMap(); - map.put("nativeEventType", CallEvent.getValue()); - map.put("event", "didReceiveCallInfo"); - map.put("uuid", _clientWrapper.getId()); - Map bodyMap = new HashMap(); - bodyMap.put("callId", stringeeCall.getCallId()); - bodyMap.put("info", Utils.convertJsonToMap(jsonObject)); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); - } catch (JSONException e) { - e.printStackTrace(); + _handler.post(new Runnable() { + @Override + public void run() { + try { + Log.d(TAG, "onCallInfo: " + jsonObject.toString()); + Map map = new HashMap(); + map.put("nativeEventType", CallEvent.getValue()); + map.put("event", "didReceiveCallInfo"); + map.put("uuid", _clientWrapper.getId()); + Map bodyMap = new HashMap(); + bodyMap.put("callId", stringeeCall.getCallId()); + bodyMap.put("info", Utils.convertJsonToMap(jsonObject)); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } catch (JSONException e) { + e.printStackTrace(); + } } }); } diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java index 010b78e..1554dcb 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java @@ -142,144 +142,165 @@ public MessageManager message() { @Override public void onConnectionConnected(final StringeeClient stringeeClient, final boolean b) { - _handler.post(() -> { - Log.d(TAG, "onConnectionConnected: " + stringeeClient.getUserId()); - Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); - map.put("event", "didConnect"); - map.put("uuid", _uuid); - Map bodyMap = new HashMap(); - bodyMap.put("userId", stringeeClient.getUserId()); - bodyMap.put("projectId", String.valueOf(stringeeClient.getProjectId())); - bodyMap.put("isReconnecting", b); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onConnectionConnected: " + stringeeClient.getUserId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "didConnect"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("userId", stringeeClient.getUserId()); + bodyMap.put("projectId", String.valueOf(stringeeClient.getProjectId())); + bodyMap.put("isReconnecting", b); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @Override public void onConnectionDisconnected(final StringeeClient stringeeClient, final boolean b) { - _handler.post(() -> { - Log.d(TAG, "onConnectionDisconnected: " + stringeeClient.getUserId()); - Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); - map.put("event", "didDisconnect"); - map.put("uuid", _uuid); - Map bodyMap = new HashMap(); - bodyMap.put("userId", stringeeClient.getUserId()); - bodyMap.put("projectId", String.valueOf(stringeeClient.getProjectId())); - bodyMap.put("isReconnecting", b); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onConnectionDisconnected: " + stringeeClient.getUserId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "didDisconnect"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("userId", stringeeClient.getUserId()); + bodyMap.put("projectId", String.valueOf(stringeeClient.getProjectId())); + bodyMap.put("isReconnecting", b); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @Override public void onIncomingCall(final StringeeCall stringeeCall) { - _handler.post(() -> { - Log.d(TAG, "onIncomingCall: " + stringeeCall.getCallId()); - _manager.getCallsMap().put(stringeeCall.getCallId(), new CallWrapper(this, stringeeCall)); - Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); - map.put("event", "incomingCall"); - map.put("uuid", _uuid); - Map callInfoMap = new HashMap(); - callInfoMap.put("callId", stringeeCall.getCallId()); - callInfoMap.put("from", stringeeCall.getFrom()); - callInfoMap.put("to", stringeeCall.getTo()); - callInfoMap.put("fromAlias", stringeeCall.getFromAlias()); - callInfoMap.put("toAlias", stringeeCall.getToAlias()); - callInfoMap.put("isVideocall", stringeeCall.isVideoCall()); - int callType = StringeeCallType.AppToAppOutgoing.getValue(); - if (!stringeeCall.getFrom().equals(_client.getUserId())) { - callType = StringeeCallType.AppToAppIncoming.getValue(); - } - if (stringeeCall.isAppToPhoneCall()) { - callType = StringeeCallType.AppToPhone.getValue(); - } else if (stringeeCall.isPhoneToAppCall()) { - callType = StringeeCallType.PhoneToApp.getValue(); - } - callInfoMap.put("callType", callType); - callInfoMap.put("isVideoCall", stringeeCall.isVideoCall()); - callInfoMap.put("customDataFromYourServer", stringeeCall.getCustomDataFromYourServer()); - map.put("body", callInfoMap); - StringeeFlutterPlugin._eventSink.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onIncomingCall: " + stringeeCall.getCallId()); + _manager.getCallsMap().put(stringeeCall.getCallId(), new CallWrapper(ClientWrapper.this, stringeeCall)); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "incomingCall"); + map.put("uuid", _uuid); + Map callInfoMap = new HashMap(); + callInfoMap.put("callId", stringeeCall.getCallId()); + callInfoMap.put("from", stringeeCall.getFrom()); + callInfoMap.put("to", stringeeCall.getTo()); + callInfoMap.put("fromAlias", stringeeCall.getFromAlias()); + callInfoMap.put("toAlias", stringeeCall.getToAlias()); + callInfoMap.put("isVideocall", stringeeCall.isVideoCall()); + int callType = StringeeCallType.AppToAppOutgoing.getValue(); + if (!stringeeCall.getFrom().equals(_client.getUserId())) { + callType = StringeeCallType.AppToAppIncoming.getValue(); + } + if (stringeeCall.isAppToPhoneCall()) { + callType = StringeeCallType.AppToPhone.getValue(); + } else if (stringeeCall.isPhoneToAppCall()) { + callType = StringeeCallType.PhoneToApp.getValue(); + } + callInfoMap.put("callType", callType); + callInfoMap.put("isVideoCall", stringeeCall.isVideoCall()); + callInfoMap.put("customDataFromYourServer", stringeeCall.getCustomDataFromYourServer()); + map.put("body", callInfoMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @Override public void onIncomingCall2(final StringeeCall2 stringeeCall2) { - _handler.post(() -> { - Log.d(TAG, "onIncomingCall2: " + stringeeCall2.getCallId()); - _manager.getCall2sMap().put(stringeeCall2.getCallId(), new Call2Wrapper(this, stringeeCall2)); - Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); - map.put("event", "incomingCall2"); - map.put("uuid", _uuid); - Map callInfoMap = new HashMap(); - callInfoMap.put("callId", stringeeCall2.getCallId()); - callInfoMap.put("from", stringeeCall2.getFrom()); - callInfoMap.put("to", stringeeCall2.getTo()); - callInfoMap.put("fromAlias", stringeeCall2.getFromAlias()); - callInfoMap.put("toAlias", stringeeCall2.getToAlias()); - callInfoMap.put("isVideocall", stringeeCall2.isVideoCall()); - int callType = StringeeCallType.AppToAppOutgoing.getValue(); - if (!stringeeCall2.getFrom().equals(_client.getUserId())) { - callType = StringeeCallType.AppToAppIncoming.getValue(); - } - callInfoMap.put("callType", callType); - callInfoMap.put("isVideoCall", stringeeCall2.isVideoCall()); - callInfoMap.put("customDataFromYourServer", stringeeCall2.getCustomDataFromYourServer()); - map.put("body", callInfoMap); - StringeeFlutterPlugin._eventSink.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onIncomingCall2: " + stringeeCall2.getCallId()); + _manager.getCall2sMap().put(stringeeCall2.getCallId(), new Call2Wrapper(ClientWrapper.this, stringeeCall2)); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "incomingCall2"); + map.put("uuid", _uuid); + Map callInfoMap = new HashMap(); + callInfoMap.put("callId", stringeeCall2.getCallId()); + callInfoMap.put("from", stringeeCall2.getFrom()); + callInfoMap.put("to", stringeeCall2.getTo()); + callInfoMap.put("fromAlias", stringeeCall2.getFromAlias()); + callInfoMap.put("toAlias", stringeeCall2.getToAlias()); + callInfoMap.put("isVideocall", stringeeCall2.isVideoCall()); + int callType = StringeeCallType.AppToAppOutgoing.getValue(); + if (!stringeeCall2.getFrom().equals(_client.getUserId())) { + callType = StringeeCallType.AppToAppIncoming.getValue(); + } + callInfoMap.put("callType", callType); + callInfoMap.put("isVideoCall", stringeeCall2.isVideoCall()); + callInfoMap.put("customDataFromYourServer", stringeeCall2.getCustomDataFromYourServer()); + map.put("body", callInfoMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @Override public void onConnectionError(final StringeeClient stringeeClient, final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "onConnectionError: " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); - map.put("event", "didFailWithError"); - map.put("uuid", _uuid); - Map bodyMap = new HashMap(); - bodyMap.put("userId", stringeeClient.getUserId()); - bodyMap.put("code", stringeeError.getCode()); - bodyMap.put("message", stringeeError.getMessage()); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onConnectionError: " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "didFailWithError"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("userId", stringeeClient.getUserId()); + bodyMap.put("code", stringeeError.getCode()); + bodyMap.put("message", stringeeError.getMessage()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @Override public void onRequestNewToken(final StringeeClient stringeeClient) { - _handler.post(() -> { - Log.d(TAG, "onRequestNewToken: " + stringeeClient.getUserId()); - Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); - map.put("event", "requestAccessToken"); - map.put("uuid", _uuid); - Map bodyMap = new HashMap(); - bodyMap.put("userId", stringeeClient.getUserId()); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onRequestNewToken: " + stringeeClient.getUserId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "requestAccessToken"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("userId", stringeeClient.getUserId()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @Override public void onCustomMessage(final String from, final JSONObject jsonObject) { - _handler.post(() -> { - Log.d(TAG, "onCustomMessage: " + from + " - " + jsonObject.toString()); - Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); - map.put("event", "didReceiveCustomMessage"); - map.put("uuid", _uuid); - Map bodyMap = new HashMap(); - bodyMap.put("fromUserId", from); - bodyMap.put("message", jsonObject.toString()); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onCustomMessage: " + from + " - " + jsonObject.toString()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "didReceiveCustomMessage"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("fromUserId", from); + bodyMap.put("message", jsonObject.toString()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @@ -290,27 +311,30 @@ public void onTopicMessage(String s, JSONObject jsonObject) { @Override public void onChangeEvent(final StringeeChange stringeeChange) { - _handler.post(() -> { - Log.d(TAG, "onChangeEvent: " + stringeeChange.getObjectType() + " - " + stringeeChange.getChangeType()); - Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); - map.put("event", "didReceiveChangeEvent"); - map.put("uuid", _uuid); - Map bodyMap = new HashMap(); - Type objectType = stringeeChange.getObjectType(); - bodyMap.put("objectType", objectType.getValue()); - bodyMap.put("changeType", stringeeChange.getChangeType().getValue()); - java.util.ArrayList objects = new java.util.ArrayList(); - Map objectMap = new HashMap(); - if (objectType == Type.CONVERSATION) { - objectMap = Utils.convertConversationToMap((Conversation) stringeeChange.getObject()); - } else if (objectType == Type.MESSAGE) { - objectMap = Utils.convertMessageToMap((Message) stringeeChange.getObject()); - } - objects.add(objectMap); - bodyMap.put("objects", objects); - map.put("body", bodyMap); - StringeeFlutterPlugin._eventSink.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onChangeEvent: " + stringeeChange.getObjectType() + " - " + stringeeChange.getChangeType()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "didReceiveChangeEvent"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + Type objectType = stringeeChange.getObjectType(); + bodyMap.put("objectType", objectType.getValue()); + bodyMap.put("changeType", stringeeChange.getChangeType().getValue()); + java.util.ArrayList objects = new java.util.ArrayList(); + Map objectMap = new HashMap(); + if (objectType == Type.CONVERSATION) { + objectMap = Utils.convertConversationToMap((Conversation) stringeeChange.getObject()); + } else if (objectType == Type.MESSAGE) { + objectMap = Utils.convertMessageToMap((Message) stringeeChange.getObject()); + } + objects.add(objectMap); + bodyMap.put("objects", objects); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } }); } @@ -377,25 +401,31 @@ public void registerPush(final String registrationToken, final Result result) { _client.registerPushToken(registrationToken, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "registerPush: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "registerPush: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError error) { - _handler.post(() -> { - Log.d(TAG, "registerPush: false - " + error.getCode() + " - " + error.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", error.getCode()); - map.put("message", error.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "registerPush: false - " + error.getCode() + " - " + error.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", error.getCode()); + map.put("message", error.getMessage()); + result.success(map); + } }); } }); @@ -412,25 +442,31 @@ public void unregisterPush(final String registrationToken, final Result result) _client.unregisterPushToken(registrationToken, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "unregisterPush: success"); - Map map1 = new HashMap(); - map1.put("status", true); - map1.put("code", 0); - map1.put("message", "Success"); - result.success(map1); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "unregisterPush: success"); + Map map1 = new HashMap(); + map1.put("status", true); + map1.put("code", 0); + map1.put("message", "Success"); + result.success(map1); + } }); } @Override public void onError(final StringeeError error) { - _handler.post(() -> { - Log.d(TAG, "unregisterPush: false - " + error.getCode() + " - " + error.getMessage()); - Map map12 = new HashMap(); - map12.put("status", false); - map12.put("code", error.getCode()); - map12.put("message", error.getMessage()); - result.success(map12); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "unregisterPush: false - " + error.getCode() + " - " + error.getMessage()); + Map map12 = new HashMap(); + map12.put("status", false); + map12.put("code", error.getCode()); + map12.put("message", error.getMessage()); + result.success(map12); + } }); } }); @@ -447,25 +483,31 @@ public void sendCustomMessage(final String toUserId, final JSONObject data, fina _client.sendCustomMessage(toUserId, data, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "sendCustomMessage: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendCustomMessage: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError error) { - _handler.post(() -> { - Log.d(TAG, "sendCustomMessage: false - " + error.getCode() + " - " + error.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", error.getCode()); - map.put("message", error.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendCustomMessage: false - " + error.getCode() + " - " + error.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", error.getCode()); + map.put("message", error.getMessage()); + result.success(map); + } }); } }); @@ -482,26 +524,32 @@ public void createConversation(final List participants, final Conversation _client.createConversation(participants, options, new CallbackListener() { @Override public void onSuccess(final Conversation conversation) { - _handler.post(() -> { - Log.d(TAG, "createConversation: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", Utils.convertConversationToMap(conversation)); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "createConversation: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", Utils.convertConversationToMap(conversation)); + result.success(map); + } }); } @Override public void onError(final StringeeError error) { - _handler.post(() -> { - Log.d(TAG, "createConversation: false - " + error.getCode() + " - " + error.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", error.getCode()); - map.put("message", error.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "createConversation: false - " + error.getCode() + " - " + error.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", error.getCode()); + map.put("message", error.getMessage()); + result.success(map); + } }); } }); @@ -517,26 +565,32 @@ public void getConversationById(final String convId, final Result result) { _client.getConversation(convId, new CallbackListener() { @Override public void onSuccess(final Conversation conversation) { - _handler.post(() -> { - Log.d(TAG, "getConversationById: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", Utils.convertConversationToMap(conversation)); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getConversationById: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", Utils.convertConversationToMap(conversation)); + result.success(map); + } }); } @Override public void onError(final StringeeError error) { - _handler.post(() -> { - Log.d(TAG, "getConversationById: false - " + error.getCode() + " - " + error.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", error.getCode()); - map.put("message", error.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getConversationById: false - " + error.getCode() + " - " + error.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", error.getCode()); + map.put("message", error.getMessage()); + result.success(map); + } }); } }); @@ -552,26 +606,32 @@ public void getConversationByUserId(final String userId, final Result result) { _client.getConversationByUserId(userId, new CallbackListener() { @Override public void onSuccess(final Conversation conversation) { - _handler.post(() -> { - Log.d(TAG, "getConversationByUserId: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", Utils.convertConversationToMap(conversation)); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getConversationByUserId: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", Utils.convertConversationToMap(conversation)); + result.success(map); + } }); } @Override public void onError(final StringeeError error) { - _handler.post(() -> { - Log.d(TAG, "getConversationByUserId: false - " + error.getCode() + " - " + error.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", error.getCode()); - map.put("message", error.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getConversationByUserId: false - " + error.getCode() + " - " + error.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", error.getCode()); + map.put("message", error.getMessage()); + result.success(map); + } }); } }); @@ -586,32 +646,38 @@ public void getLocalConversations(final Result result) { _client.getLocalConversations(_client.getUserId(), new CallbackListener>() { @Override public void onSuccess(final List conversations) { - _handler.post(() -> { - Map map = new HashMap(); - if (conversations.size() > 0) { - Log.d(TAG, "getLocalConversations: success"); - List bodyArray = new java.util.ArrayList(); - for (int i = 0; i < conversations.size(); i++) { - bodyArray.add(Utils.convertConversationToMap(conversations.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Map map = new HashMap(); + if (conversations.size() > 0) { + Log.d(TAG, "getLocalConversations: success"); + List bodyArray = new java.util.ArrayList(); + for (int i = 0; i < conversations.size(); i++) { + bodyArray.add(Utils.convertConversationToMap(conversations.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", bodyArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", bodyArray); - result.success(map); } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "getLocalConversations: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLocalConversations: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -628,32 +694,38 @@ public void getLastConversation(int count, final Result result) { _client.getLastConversations(count, new CallbackListener>() { @Override public void onSuccess(final List conversations) { - _handler.post(() -> { - Map map = new HashMap(); - if (conversations.size() > 0) { - Log.d(TAG, "getLastConversation: success"); - List bodyArray = new java.util.ArrayList(); - for (int i = 0; i < conversations.size(); i++) { - bodyArray.add(Utils.convertConversationToMap(conversations.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Map map = new HashMap(); + if (conversations.size() > 0) { + Log.d(TAG, "getLastConversation: success"); + List bodyArray = new java.util.ArrayList(); + for (int i = 0; i < conversations.size(); i++) { + bodyArray.add(Utils.convertConversationToMap(conversations.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", bodyArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", bodyArray); - result.success(map); } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "getLastConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLastConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -670,32 +742,38 @@ public void getConversationsBefore(final long updateAt, final int count, final R _client.getConversationsBefore(updateAt, count, new CallbackListener>() { @Override public void onSuccess(final List conversations) { - _handler.post(() -> { - Map map = new HashMap(); - if (conversations.size() > 0) { - Log.d(TAG, "getConversationsBefore: success"); - List bodyArray = new java.util.ArrayList(); - for (int i = 0; i < conversations.size(); i++) { - bodyArray.add(Utils.convertConversationToMap(conversations.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Map map = new HashMap(); + if (conversations.size() > 0) { + Log.d(TAG, "getConversationsBefore: success"); + List bodyArray = new java.util.ArrayList(); + for (int i = 0; i < conversations.size(); i++) { + bodyArray.add(Utils.convertConversationToMap(conversations.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", bodyArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", bodyArray); - result.success(map); } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "getConversationsBefore: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getConversationsBefore: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -712,32 +790,38 @@ public void getConversationsAfter(final long updateAt, final int count, final Re _client.getConversationsAfter(updateAt, count, new CallbackListener>() { @Override public void onSuccess(final List conversations) { - _handler.post(() -> { - Map map = new HashMap(); - if (conversations.size() > 0) { - Log.d(TAG, "getConversationsAfter: success"); - List bodyArray = new java.util.ArrayList(); - for (int i = 0; i < conversations.size(); i++) { - bodyArray.add(Utils.convertConversationToMap(conversations.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Map map = new HashMap(); + if (conversations.size() > 0) { + Log.d(TAG, "getConversationsAfter: success"); + List bodyArray = new java.util.ArrayList(); + for (int i = 0; i < conversations.size(); i++) { + bodyArray.add(Utils.convertConversationToMap(conversations.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", bodyArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", bodyArray); - result.success(map); } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "getConversationsAfter: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getConversationsAfter: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -768,25 +852,31 @@ public void blockUser(final String userId, final Result result) { _client.blockUser(userId, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "blockUser: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "blockUser: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "blockUser: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "blockUser: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -801,26 +891,32 @@ public void getTotalUnread(final Result result) { _client.getTotalUnread(new CallbackListener() { @Override public void onSuccess(final Integer integer) { - _handler.post(() -> { - Log.d(TAG, "getTotalUnread: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", integer); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getTotalUnread: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", integer); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "getTotalUnread: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getTotalUnread: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java b/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java index bf593e7..b3ea1a2 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java @@ -54,25 +54,31 @@ public void onSuccess(Conversation conversation) { conversation.delete(_clientWrapper.getClient(), new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "deleteConversation: success"); - Map map1 = new HashMap(); - map1.put("status", true); - map1.put("code", 0); - map1.put("message", "Success"); - result.success(map1); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "deleteConversation: success"); + Map map1 = new HashMap(); + map1.put("status", true); + map1.put("code", 0); + map1.put("message", "Success"); + result.success(map1); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "deleteConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map12 = new HashMap(); - map12.put("status", false); - map12.put("code", stringeeError.getCode()); - map12.put("message", stringeeError.getMessage()); - result.success(map12); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "deleteConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map12 = new HashMap(); + map12.put("status", false); + map12.put("code", stringeeError.getCode()); + map12.put("message", stringeeError.getMessage()); + result.success(map12); + } }); } }); @@ -80,13 +86,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "deleteConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map13 = new HashMap(); - map13.put("status", false); - map13.put("code", stringeeError.getCode()); - map13.put("message", stringeeError.getMessage()); - result.success(map13); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "deleteConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map13 = new HashMap(); + map13.put("status", false); + map13.put("code", stringeeError.getCode()); + map13.put("message", stringeeError.getMessage()); + result.success(map13); + } }); } }); @@ -116,31 +125,37 @@ public void onSuccess(Conversation conversation) { conversation.addParticipants(_clientWrapper.getClient(), participants, new CallbackListener>() { @Override public void onSuccess(final List users) { - _handler.post(() -> { - Log.d(TAG, "addParticipants: success"); - Map map1 = new HashMap(); - java.util.List participantsArray = new java.util.ArrayList(); - for (int j = 0; j < users.size(); j++) { - participantsArray.add(Utils.convertUserToMap(users.get(j))); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "addParticipants: success"); + Map map1 = new HashMap(); + java.util.List participantsArray = new java.util.ArrayList(); + for (int j = 0; j < users.size(); j++) { + participantsArray.add(Utils.convertUserToMap(users.get(j))); + } + map1.put("status", true); + map1.put("code", 0); + map1.put("message", "Success"); + map1.put("body", participantsArray); + result.success(map1); } - map1.put("status", true); - map1.put("code", 0); - map1.put("message", "Success"); - map1.put("body", participantsArray); - result.success(map1); }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "addParticipants: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map12 = new HashMap(); - map12.put("status", false); - map12.put("code", stringeeError.getCode()); - map12.put("message", stringeeError.getMessage()); - result.success(map12); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "addParticipants: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map12 = new HashMap(); + map12.put("status", false); + map12.put("code", stringeeError.getCode()); + map12.put("message", stringeeError.getMessage()); + result.success(map12); + } }); } }); @@ -148,13 +163,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "addParticipants: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map13 = new HashMap(); - map13.put("status", false); - map13.put("code", stringeeError.getCode()); - map13.put("message", stringeeError.getMessage()); - result.success(map13); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "addParticipants: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map13 = new HashMap(); + map13.put("status", false); + map13.put("code", stringeeError.getCode()); + map13.put("message", stringeeError.getMessage()); + result.success(map13); + } }); } }); @@ -184,31 +202,37 @@ public void onSuccess(Conversation conversation) { conversation.removeParticipants(_clientWrapper.getClient(), participants, new CallbackListener>() { @Override public void onSuccess(final List users) { - _handler.post(() -> { - Log.d(TAG, "removeParticipants: success"); - Map map = new HashMap(); - java.util.List participantsArray = new java.util.ArrayList(); - for (int j = 0; j < users.size(); j++) { - participantsArray.add(Utils.convertUserToMap(users.get(j))); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "removeParticipants: success"); + Map map = new HashMap(); + java.util.List participantsArray = new java.util.ArrayList(); + for (int j = 0; j < users.size(); j++) { + participantsArray.add(Utils.convertUserToMap(users.get(j))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", participantsArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", participantsArray); - result.success(map); }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "removeParticipants: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "removeParticipants: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -216,13 +240,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "removeParticipants: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "removeParticipants: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -251,25 +278,31 @@ public void onSuccess(Conversation conversation) { conversation.sendMessage(_clientWrapper.getClient(), message, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "sendMessage: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendMessage: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "sendMessage: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendMessage: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -277,13 +310,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "sendMessage: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendMessage: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -313,30 +349,36 @@ public void onSuccess(Conversation conversation) { conversation.getMessages(_clientWrapper.getClient(), msgIds, new CallbackListener>() { @Override public void onSuccess(final List messages) { - _handler.post(() -> { - Log.d(TAG, "getMessages: success"); - Map map = new HashMap(); - java.util.List msgArray = new java.util.ArrayList(); - for (int i = 0; i < messages.size(); i++) { - msgArray.add(Utils.convertMessageToMap(messages.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessages: success"); + Map map = new HashMap(); + java.util.List msgArray = new java.util.ArrayList(); + for (int i = 0; i < messages.size(); i++) { + msgArray.add(Utils.convertMessageToMap(messages.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", msgArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", msgArray); - result.success(map); }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "getMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -344,13 +386,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "getMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -380,31 +425,37 @@ public void onSuccess(Conversation conversation) { conversation.getLocalMessages(_clientWrapper.getClient(), count, new CallbackListener>() { @Override public void onSuccess(final List messages) { - _handler.post(() -> { - Log.d(TAG, "getLocalMessages: success"); - Map map = new HashMap(); - java.util.List msgArray = new java.util.ArrayList(); - for (int i = 0; i < messages.size(); i++) { - msgArray.add(Utils.convertMessageToMap(messages.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLocalMessages: success"); + Map map = new HashMap(); + java.util.List msgArray = new java.util.ArrayList(); + for (int i = 0; i < messages.size(); i++) { + msgArray.add(Utils.convertMessageToMap(messages.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", msgArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", msgArray); - result.success(map); }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Map map = new HashMap(); - Log.d(TAG, "getLocalMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Map map = new HashMap(); + Log.d(TAG, "getLocalMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -413,13 +464,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "getLocalMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLocalMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -449,31 +503,37 @@ public void onSuccess(Conversation conversation) { conversation.getLastMessages(_clientWrapper.getClient(), count, new CallbackListener>() { @Override public void onSuccess(final List messages) { - _handler.post(() -> { - Log.d(TAG, "getLastMessages: success"); - Map map = new HashMap(); - java.util.List msgArray = new java.util.ArrayList(); - for (int i = 0; i < messages.size(); i++) { - msgArray.add(Utils.convertMessageToMap(messages.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLastMessages: success"); + Map map = new HashMap(); + java.util.List msgArray = new java.util.ArrayList(); + for (int i = 0; i < messages.size(); i++) { + msgArray.add(Utils.convertMessageToMap(messages.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", msgArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", msgArray); - result.success(map); }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "getLastMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLastMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -482,13 +542,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "getLastMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLastMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -519,31 +582,37 @@ public void onSuccess(Conversation conversation) { conversation.getMessagesAfter(_clientWrapper.getClient(), seq, count, new CallbackListener>() { @Override public void onSuccess(final List messages) { - _handler.post(() -> { - Log.d(TAG, "getMessagesAfter: success"); - Map map = new HashMap(); - java.util.List msgArray = new java.util.ArrayList(); - for (int i = 0; i < messages.size(); i++) { - msgArray.add(Utils.convertMessageToMap(messages.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessagesAfter: success"); + Map map = new HashMap(); + java.util.List msgArray = new java.util.ArrayList(); + for (int i = 0; i < messages.size(); i++) { + msgArray.add(Utils.convertMessageToMap(messages.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", msgArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", msgArray); - result.success(map); }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "getMessagesAfter: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessagesAfter: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -552,13 +621,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "getMessagesAfter: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessagesAfter: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -589,18 +661,21 @@ public void onSuccess(Conversation conversation) { conversation.getMessagesBefore(_clientWrapper.getClient(), seq, count, new CallbackListener>() { @Override public void onSuccess(final List messages) { - _handler.post(() -> { - Log.d(TAG, "getMessagesBefore: success"); - Map map = new HashMap(); - java.util.List msgArray = new java.util.ArrayList(); - for (int i = 0; i < messages.size(); i++) { - msgArray.add(Utils.convertMessageToMap(messages.get(i))); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessagesBefore: success"); + Map map = new HashMap(); + java.util.List msgArray = new java.util.ArrayList(); + for (int i = 0; i < messages.size(); i++) { + msgArray.add(Utils.convertMessageToMap(messages.get(i))); + } + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", msgArray); + result.success(map); } - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - map.put("body", msgArray); - result.success(map); }); } @@ -608,13 +683,16 @@ public void onSuccess(final List messages) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "getMessagesBefore: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessagesBefore: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -623,13 +701,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "getMessagesBefore: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getMessagesBefore: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -660,26 +741,32 @@ public void onSuccess(Conversation conversation) { conversation.updateConversation(_clientWrapper.getClient(), name, avatar, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "updateConversation: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "updateConversation: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "updateConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "updateConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -688,13 +775,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "updateConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "updateConversation: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -728,26 +818,32 @@ public void onSuccess(Conversation conversation) { conversation.setAsAdmin(_clientWrapper.getClient(), userId, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "setRole: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "setRole: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "setRole: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "setRole: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -756,26 +852,32 @@ public void onError(final StringeeError stringeeError) { conversation.setAsMember(_clientWrapper.getClient(), userId, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "setRole: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "setRole: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "setRole: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "setRole: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -786,13 +888,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "setRole: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "setRole: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -819,25 +924,31 @@ public void deleteMessages(String convId, JSONArray msgIdArray, final Result res _clientWrapper.getClient().deleteMessages(convId, msgIdArray, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "deleteMessages: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "deleteMessages: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "deleteMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "deleteMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -857,25 +968,31 @@ public void revokeMessages(String convId, JSONArray msgIdArray, boolean deleted, _clientWrapper.getClient().revokeMessages(convId, msgIdArray, deleted, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "revokeMessages: success"); - Map map1 = new HashMap(); - map1.put("status", true); - map1.put("code", 0); - map1.put("message", "Success"); - result.success(map1); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "revokeMessages: success"); + Map map1 = new HashMap(); + map1.put("status", true); + map1.put("code", 0); + map1.put("message", "Success"); + result.success(map1); + } }); } @Override public void onError(final StringeeError stringeeError) { - _handler.post(() -> { - Log.d(TAG, "revokeMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map12 = new HashMap(); - map12.put("status", false); - map12.put("code", stringeeError.getCode()); - map12.put("message", stringeeError.getMessage()); - result.success(map12); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "revokeMessages: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map12 = new HashMap(); + map12.put("status", false); + map12.put("code", stringeeError.getCode()); + map12.put("message", stringeeError.getMessage()); + result.success(map12); + } }); } } @@ -905,26 +1022,32 @@ public void onSuccess(Message message) { message.markAsRead(_clientWrapper.getClient(), new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "markAsRead: success"); - Map map = new HashMap(); - map.put("status", true); - map.put("code", 0); - map.put("message", "Success"); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "markAsRead: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "markAsRead: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "markAsRead: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); @@ -933,13 +1056,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "markAsRead: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map = new HashMap(); - map.put("status", false); - map.put("code", stringeeError.getCode()); - map.put("message", stringeeError.getMessage()); - result.success(map); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "markAsRead: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } }); } }); diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/MessageManager.java b/android/src/main/java/com/stringee/stringeeflutterplugin/MessageManager.java index fa14c56..55c13b9 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/MessageManager.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/MessageManager.java @@ -59,26 +59,32 @@ public void onSuccess(Message message) { message.edit(_clientWrapper.getClient(), content, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "edit: success"); - Map map1 = new HashMap(); - map1.put("status", true); - map1.put("code", 0); - map1.put("message", "Success"); - result.success(map1); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "edit: success"); + Map map1 = new HashMap(); + map1.put("status", true); + map1.put("code", 0); + map1.put("message", "Success"); + result.success(map1); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "edit: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map12 = new HashMap(); - map12.put("status", false); - map12.put("code", stringeeError.getCode()); - map12.put("message", stringeeError.getMessage()); - result.success(map12); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "edit: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map12 = new HashMap(); + map12.put("status", false); + map12.put("code", stringeeError.getCode()); + map12.put("message", stringeeError.getMessage()); + result.success(map12); + } }); } }); @@ -87,13 +93,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "edit: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map13 = new HashMap(); - map13.put("status", false); - map13.put("code", stringeeError.getCode()); - map13.put("message", stringeeError.getMessage()); - result.success(map13); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "edit: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map13 = new HashMap(); + map13.put("status", false); + map13.put("code", stringeeError.getCode()); + map13.put("message", stringeeError.getMessage()); + result.success(map13); + } }); } }); @@ -132,26 +141,32 @@ public void onSuccess(Message message) { message.pinOrUnpin(_clientWrapper.getClient(), pinOrUnPin, new StatusListener() { @Override public void onSuccess() { - _handler.post(() -> { - Log.d(TAG, "pinOrUnPin: success"); - Map map1 = new HashMap(); - map1.put("status", true); - map1.put("code", 0); - map1.put("message", "Success"); - result.success(map1); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "pinOrUnPin: success"); + Map map1 = new HashMap(); + map1.put("status", true); + map1.put("code", 0); + map1.put("message", "Success"); + result.success(map1); + } }); } @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "pinOrUnPin: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map12 = new HashMap(); - map12.put("status", false); - map12.put("code", stringeeError.getCode()); - map12.put("message", stringeeError.getMessage()); - result.success(map12); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "pinOrUnPin: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map12 = new HashMap(); + map12.put("status", false); + map12.put("code", stringeeError.getCode()); + map12.put("message", stringeeError.getMessage()); + result.success(map12); + } }); } }); @@ -160,13 +175,16 @@ public void onError(final StringeeError stringeeError) { @Override public void onError(final StringeeError stringeeError) { super.onError(stringeeError); - _handler.post(() -> { - Log.d(TAG, "pinOrUnPin: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); - Map map13 = new HashMap(); - map13.put("status", false); - map13.put("code", stringeeError.getCode()); - map13.put("message", stringeeError.getMessage()); - result.success(map13); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "pinOrUnPin: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map13 = new HashMap(); + map13.put("status", false); + map13.put("code", stringeeError.getCode()); + map13.put("message", stringeeError.getMessage()); + result.success(map13); + } }); } }); From d0f00455e228e7a2f73756eede4be291e9ce393d Mon Sep 17 00:00:00 2001 From: AnhNQK Date: Mon, 9 Aug 2021 17:45:31 +0700 Subject: [PATCH 04/26] upgrade flutter android (cherry picked from commit d97942cb1763f8a490fa074ee26bd5c8bde80c9e) --- android/build.gradle | 7 ++++++- .../stringeeflutterplugin/Call2Wrapper.java | 4 ++-- .../stringeeflutterplugin/CallWrapper.java | 4 ++-- example/ios/Flutter/flutter_export_environment.sh | 14 +++++++------- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index e40b9f9..8e59ade 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -31,10 +31,15 @@ android { lintOptions { disable 'InvalidPackage' } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + buildToolsVersion '30.0.3' } dependencies { // implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"]) - implementation 'com.stringee.sdk.android:stringee-android-sdk:1.7.2' + implementation 'com.stringee.sdk.android:stringee-android-sdk:1.7.3' implementation 'androidx.annotation:annotation:1.2.0' } \ No newline at end of file diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java index a22693f..49a9369 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java @@ -61,7 +61,7 @@ public Call2Wrapper(ClientWrapper clientWrapper, StringeeCall2 call, Result resu public void prepareCall() { _manager.startAudioManager(_manager.getContext(), new AudioManagerEvents() { @Override - public void onAudioDeviceChanged(AudioDevice selectedAudioDevice, Set availableAudioDevices) { + public void onAudioDeviceChanged(final AudioDevice selectedAudioDevice, final Set availableAudioDevices) { _handler.post(new Runnable() { @Override public void run() { @@ -393,7 +393,7 @@ public void resumeVideo(final Result result) { public void getCallStats(final Result result) { _call.getStats(new CallStatsListener() { @Override - public void onCallStats(StringeeCallStats stringeeCallStats) { + public void onCallStats(final StringeeCallStats stringeeCallStats) { _handler.post(new Runnable() { @Override public void run() { diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java index 614a2c2..9594adf 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java @@ -60,7 +60,7 @@ public CallWrapper(ClientWrapper client, StringeeCall call, Result result) { public void prepareCall() { _manager.startAudioManager(_manager.getContext(), new AudioManagerEvents() { @Override - public void onAudioDeviceChanged(AudioDevice selectedAudioDevice, Set availableAudioDevices) { + public void onAudioDeviceChanged(final AudioDevice selectedAudioDevice, final Set availableAudioDevices) { _handler.post(new Runnable() { @Override public void run() { @@ -432,7 +432,7 @@ public void resumeVideo(final Result result) { public void getCallStats(final Result result) { _call.getStats(new CallStatsListener() { @Override - public void onCallStats(StringeeCallStats stringeeCallStats) { + public void onCallStats(final StringeeCallStats stringeeCallStats) { _handler.post(new Runnable() { @Override public void run() { diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh index d1951ff..0de9705 100755 --- a/example/ios/Flutter/flutter_export_environment.sh +++ b/example/ios/Flutter/flutter_export_environment.sh @@ -1,14 +1,14 @@ #!/bin/sh # This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=/Users/hoangduoc/MyData/Data/flutter" -export "FLUTTER_APPLICATION_PATH=/Users/hoangduoc/Desktop/Flutter/stringee_flutter_plugin/example" -export "FLUTTER_TARGET=/Users/hoangduoc/Desktop/Flutter/stringee_flutter_plugin/example/lib/main.dart" +export "FLUTTER_ROOT=F:\flutter" +export "FLUTTER_APPLICATION_PATH=F:\Android\AndroidApp\stringee_flutter_plugin\example" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib\main.dart" export "FLUTTER_BUILD_DIR=build" -export "SYMROOT=${SOURCE_ROOT}/../build/ios" +export "SYMROOT=${SOURCE_ROOT}/../build\ios" export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NUMBER=1" -export "DART_DEFINES=flutter.inspector.structuredErrors%3Dtrue" export "DART_OBFUSCATION=false" -export "TRACK_WIDGET_CREATION=true" +export "TRACK_WIDGET_CREATION=false" export "TREE_SHAKE_ICONS=false" -export "PACKAGE_CONFIG=/Users/hoangduoc/Desktop/Flutter/stringee_flutter_plugin/example/.dart_tool/package_config.json" +export "PACKAGE_CONFIG=.packages" From 9621ef5219d9cb4c7da6b4165eeaf156d8bd31d9 Mon Sep 17 00:00:00 2001 From: AnhNQK Date: Tue, 17 Aug 2021 10:29:50 +0700 Subject: [PATCH 05/26] clean --- example/lib/main.dart | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 19db3ed..dd040e4 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,15 +1,12 @@ -import 'dart:io'; - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:permission/permission.dart'; import 'package:stringee_flutter_plugin/stringee_flutter_plugin.dart'; import 'package:stringee_flutter_plugin_example/Chat.dart'; import 'Call.dart'; -var user2 = 'eyJjdHkiOiJzdHJpbmdlZS1hcGk7dj0xIiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJqdGkiOiJTS0UxUmRVdFVhWXhOYVFRNFdyMTVxRjF6VUp1UWRBYVZULTE2MjUxMzQ3NTAiLCJpc3MiOiJTS0UxUmRVdFVhWXhOYVFRNFdyMTVxRjF6VUp1UWRBYVZUIiwiZXhwIjoxNjI3NzI2NzUwLCJ1c2VySWQiOiJ1c2VyMiJ9.Ll4bfqF2XZwpQPen-P4KLkdWTmuBbMG_akLsnIDsvM0'; -var user1 = 'eyJjdHkiOiJzdHJpbmdlZS1hcGk7dj0xIiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJqdGkiOiJTS0xIb2NCdDl6Qk5qc1pLeThZaUVkSzRsU3NBZjhCSHpyLTE2MjQ4NTMwMjciLCJpc3MiOiJTS0xIb2NCdDl6Qk5qc1pLeThZaUVkSzRsU3NBZjhCSHpyIiwiZXhwIjoxNjI3NDQ1MDI3LCJ1c2VySWQiOiJ1c2VyMSJ9.9wrpbsDPM2-OpR4Sq5yOutacNlo9bYy78htcRDpPjCo'; +var user1 = 'PUT_YOUR_TOKEN_HERE'; +var user2 = 'PUT_YOUR_TOKEN2_HERE'; StringeeClient client = StringeeClient(); @@ -43,10 +40,6 @@ class _MyHomePageState extends State { // TODO: implement initState super.initState(); - if (Platform.isAndroid) { - requestPermissions(); - } - /// Lắng nghe sự kiện của StringeeClient(kết nối, cuộc gọi đến...) client.eventStreamController.stream.listen((event) { Map map = event; @@ -91,19 +84,6 @@ class _MyHomePageState extends State { client.connect(user2); } - requestPermissions() async { - List permissionNames = []; - permissionNames.add(PermissionName.Camera); - permissionNames.add(PermissionName.Contacts); - permissionNames.add(PermissionName.Microphone); - permissionNames.add(PermissionName.Location); - permissionNames.add(PermissionName.Storage); - permissionNames.add(PermissionName.State); - permissionNames.add(PermissionName.Internet); - var permissions = await Permission.requestPermissions(permissionNames); - permissions.forEach((permission) {}); - } - @override Widget build(BuildContext context) { Widget topText = new Container( From e9f46b377ab9e94eef8fda6ba0fee1e22d71e602 Mon Sep 17 00:00:00 2001 From: AnhNQK Date: Tue, 17 Aug 2021 19:04:00 +0700 Subject: [PATCH 06/26] fix bug check disconnect --- .../stringeeflutterplugin/Call2Wrapper.java | 100 ++++++++++++++ .../stringeeflutterplugin/CallWrapper.java | 110 +++++++++++++++ .../stringeeflutterplugin/ClientWrapper.java | 120 +++++++++++++++- .../ConversationManager.java | 129 ++++++++++++++++++ .../stringeeflutterplugin/MessageManager.java | 19 +++ .../StringeeFlutterPlugin.java | 11 +- 6 files changed, 475 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java index 49a9369..9121fa7 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java @@ -97,6 +97,16 @@ public void run() { * Make a new call */ public void makeCall() { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "makeCall: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + _makeCallResult.success(map); + return; + } + prepareCall(); _call.makeCall(); } @@ -107,6 +117,16 @@ public void makeCall() { * @param result */ public void initAnswer(final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "initAnswer: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + prepareCall(); _call.ringing(new StatusListener() { @Override @@ -147,6 +167,16 @@ public void run() { * @param result */ public void answer(final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "answer: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.answer(); Log.d(TAG, "answer: success"); Map map = new HashMap(); @@ -207,6 +237,16 @@ public void reject(final Result result) { * @param result */ public void sendCallInfo(final Map callInfo, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "sendCallInfo: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + try { JSONObject jsonObject = Utils.convertMapToJson(callInfo); _call.sendCallInfo(jsonObject, new StatusListener() { @@ -263,6 +303,16 @@ public void run() { * @param result */ public void mute(final boolean mute, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "mute: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.mute(mute); Log.d(TAG, "mute: success"); Map map = new HashMap(); @@ -279,6 +329,16 @@ public void mute(final boolean mute, final Result result) { * @param result */ public void enableVideo(final boolean enable, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "enableVideo: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.enableVideo(enable); Log.d(TAG, "enableVideo: success"); Map map = new HashMap(); @@ -294,6 +354,16 @@ public void enableVideo(final boolean enable, final Result result) { * @param result */ public void switchCamera(final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "switchCamera: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.switchCamera(new StatusListener() { @Override public void onSuccess() { @@ -335,6 +405,16 @@ public void run() { * @param cameraId */ public void switchCamera(int cameraId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "switchCamera: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.switchCamera(new StatusListener() { @Override public void onSuccess() { @@ -375,6 +455,16 @@ public void run() { * @param result */ public void resumeVideo(final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "resumeVideo: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + isResumeVideo = true; _call.resumeVideo(); Log.d(TAG, "resumeVideo: success"); @@ -424,6 +514,16 @@ public void run() { * @param result */ public void setMirror(final boolean isLocal, final boolean isMirror, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "setMirror: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (isLocal) { _call.getLocalView().setMirror(isMirror); } else { diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java index 9594adf..f0282a3 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/CallWrapper.java @@ -96,6 +96,16 @@ public void run() { * Make a new call */ public void makeCall() { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "makeCall: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + _makeCallResult.success(map); + return; + } + prepareCall(); _call.makeCall(); } @@ -106,6 +116,16 @@ public void makeCall() { * @param result */ public void initAnswer(final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "initAnswer: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + prepareCall(); _call.ringing(new StatusListener() { @Override @@ -146,6 +166,16 @@ public void run() { * @param result */ public void answer(final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "answer: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.answer(); Log.d(TAG, "answer: success"); Map map = new HashMap(); @@ -206,6 +236,16 @@ public void reject(final Result result) { * @param result */ public void sendDTMF(final String dtmf, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "sendDTMF: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.sendDTMF(dtmf, new StatusListener() { @Override public void onSuccess() { @@ -246,6 +286,16 @@ public void run() { * @param result */ public void sendCallInfo(final Map callInfo, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "sendCallInfo: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + try { JSONObject jsonObject = Utils.convertMapToJson(callInfo); _call.sendCallInfo(jsonObject, new StatusListener() { @@ -302,6 +352,16 @@ public void run() { * @param result */ public void mute(final boolean mute, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "mute: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.mute(mute); Log.d(TAG, "mute: success"); Map map = new HashMap(); @@ -318,6 +378,16 @@ public void mute(final boolean mute, final Result result) { * @param result */ public void enableVideo(final boolean enable, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "enableVideo: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.enableVideo(enable); Log.d(TAG, "enableVideo: success"); Map map = new HashMap(); @@ -333,6 +403,16 @@ public void enableVideo(final boolean enable, final Result result) { * @param result */ public void switchCamera(final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "switchCamera: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.switchCamera(new StatusListener() { @Override public void onSuccess() { @@ -374,6 +454,16 @@ public void run() { * @param cameraId */ public void switchCamera(int cameraId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "switchCamera: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _call.switchCamera(new StatusListener() { @Override public void onSuccess() { @@ -414,6 +504,16 @@ public void run() { * @param result */ public void resumeVideo(final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "resumeVideo: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + isResumeVideo = true; _call.resumeVideo(); Log.d(TAG, "resumeVideo: success"); @@ -463,6 +563,16 @@ public void run() { * @param result */ public void setMirror(final boolean isLocal, final boolean isMirror, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "setMirror: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (isLocal) { _call.getLocalView().setMirror(isMirror); } else { diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java index 1554dcb..9a69ae4 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java @@ -1,5 +1,7 @@ package com.stringee.stringeeflutterplugin; +import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.ClientEvent; + import android.os.Handler; import android.util.Log; @@ -29,8 +31,6 @@ import io.flutter.plugin.common.MethodChannel.Result; -import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.ClientEvent; - public class ClientWrapper implements StringeeConnectionListener, ChangeEventListenter { private StringeeClient _client; private StringeeManager _manager; @@ -381,8 +381,11 @@ public boolean isConnected() { * * @param result */ - public void disconnect(final Result result) { + public void disconnect(final String uuid,final Result result) { _client.disconnect(); + + _manager.getClientMap().put(uuid, null); + Log.d(TAG, "disconnect: success"); Map map = new HashMap(); map.put("status", true); @@ -398,6 +401,16 @@ public void disconnect(final Result result) { * @param result */ public void registerPush(final String registrationToken, final Result result) { + if (!isConnected()) { + Log.d(TAG, "registerPush: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.registerPushToken(registrationToken, new StatusListener() { @Override public void onSuccess() { @@ -429,7 +442,6 @@ public void run() { }); } }); - } /** @@ -439,6 +451,16 @@ public void run() { * @param result */ public void unregisterPush(final String registrationToken, final Result result) { + if (!isConnected()) { + Log.d(TAG, "unregisterPush: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.unregisterPushToken(registrationToken, new StatusListener() { @Override public void onSuccess() { @@ -480,6 +502,16 @@ public void run() { * @param result */ public void sendCustomMessage(final String toUserId, final JSONObject data, final Result result) { + if (!isConnected()) { + Log.d(TAG, "sendCustomMessage: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.sendCustomMessage(toUserId, data, new StatusListener() { @Override public void onSuccess() { @@ -521,6 +553,16 @@ public void run() { * @param result */ public void createConversation(final List participants, final ConversationOptions options, final Result result) { + if (!isConnected()) { + Log.d(TAG, "createConversation: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.createConversation(participants, options, new CallbackListener() { @Override public void onSuccess(final Conversation conversation) { @@ -562,6 +604,16 @@ public void run() { * @param result */ public void getConversationById(final String convId, final Result result) { + if (!isConnected()) { + Log.d(TAG, "getConversationById: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.getConversation(convId, new CallbackListener() { @Override public void onSuccess(final Conversation conversation) { @@ -603,6 +655,16 @@ public void run() { * @param result */ public void getConversationByUserId(final String userId, final Result result) { + if (!isConnected()) { + Log.d(TAG, "getConversationByUserId: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.getConversationByUserId(userId, new CallbackListener() { @Override public void onSuccess(final Conversation conversation) { @@ -691,6 +753,16 @@ public void run() { * @param result */ public void getLastConversation(int count, final Result result) { + if (!isConnected()) { + Log.d(TAG, "getLastConversation: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.getLastConversations(count, new CallbackListener>() { @Override public void onSuccess(final List conversations) { @@ -739,6 +811,16 @@ public void run() { * @param result */ public void getConversationsBefore(final long updateAt, final int count, final Result result) { + if (!isConnected()) { + Log.d(TAG, "getConversationsBefore: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.getConversationsBefore(updateAt, count, new CallbackListener>() { @Override public void onSuccess(final List conversations) { @@ -787,6 +869,16 @@ public void run() { * @param result */ public void getConversationsAfter(final long updateAt, final int count, final Result result) { + if (!isConnected()) { + Log.d(TAG, "getConversationsAfter: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.getConversationsAfter(updateAt, count, new CallbackListener>() { @Override public void onSuccess(final List conversations) { @@ -849,6 +941,16 @@ public void clearDb(final Result result) { * @param result */ public void blockUser(final String userId, final Result result) { + if (!isConnected()) { + Log.d(TAG, "blockUser: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.blockUser(userId, new StatusListener() { @Override public void onSuccess() { @@ -888,6 +990,16 @@ public void run() { * @param result */ public void getTotalUnread(final Result result) { + if (!isConnected()) { + Log.d(TAG, "getTotalUnread: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + _client.getTotalUnread(new CallbackListener() { @Override public void onSuccess(final Integer integer) { diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java b/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java index b3ea1a2..c12c976 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java @@ -38,6 +38,16 @@ public ConversationManager(ClientWrapper clientWrapper) { * @param result */ public void delete(final String convId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "delete: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "deleteConversation: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -109,6 +119,16 @@ public void run() { * @param result */ public void addParticipants(final String convId, final List participants, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "addParticipants: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "addParticipants: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -186,6 +206,16 @@ public void run() { * @param result */ public void removeParticipants(final String convId, final List participants, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "removeParticipants: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "removeParticipants: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -262,6 +292,16 @@ public void run() { * @param result */ public void sendMessage(final String convId, final Message message, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "sendMessage: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "sendMessage: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -333,6 +373,16 @@ public void run() { * @param result */ public void getMessages(String convId, final String[] msgIds, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "getMessages: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "getMessages: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -487,6 +537,16 @@ public void run() { * @param result */ public void getLastMessages(String convId, final int count, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "getLastMessages: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "getLastMessages: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -566,6 +626,16 @@ public void run() { * @param result */ public void getMessagesAfter(String convId, final long seq, final int count, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "getMessagesAfter: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "getMessagesAfter: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -645,6 +715,16 @@ public void run() { * @param result */ public void getMessagesBefore(String convId, final long seq, final int count, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "getMessagesBefore: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "getMessagesBefore: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -725,6 +805,16 @@ public void run() { * @param result */ public void updateConversation(String convId, final String name, final String avatar, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "updateConversation: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "updateConversation: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -799,6 +889,15 @@ public void run() { * @param result */ public void setRole(String convId, final String userId, final UserRole role, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "setRole: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } if (convId == null || convId.isEmpty()) { Log.d(TAG, "setRole: false - -2 - convId is invalid"); @@ -911,6 +1010,16 @@ public void run() { * @param result */ public void deleteMessages(String convId, JSONArray msgIdArray, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "deleteMessages: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "deleteMessages: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -955,6 +1064,16 @@ public void run() { } public void revokeMessages(String convId, JSONArray msgIdArray, boolean deleted, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "revokeMessages: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "revokeMessages: false - -2 - convId is invalid"); Map map = new HashMap(); @@ -1006,6 +1125,16 @@ public void run() { * @param result */ public void markAsRead(String convId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "markAsRead: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "markAsRead: false - -2 - convId is invalid"); Map map = new HashMap(); diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/MessageManager.java b/android/src/main/java/com/stringee/stringeeflutterplugin/MessageManager.java index 55c13b9..cb33a7c 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/MessageManager.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/MessageManager.java @@ -35,6 +35,16 @@ public MessageManager(ClientWrapper clientWrapper) { */ public void edit(String convId, String msgId, final String content, final Result result) { Map map = new HashMap(); + + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "edit: false - -1 - StringeeClient is disconnected"); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "edit: false - -2 - convId is invalid"); map.put("status", false); @@ -117,6 +127,15 @@ public void run() { */ public void pinOrUnPin(String convId, String msgId, final boolean pinOrUnPin, final Result result) { Map map = new HashMap(); + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "pinOrUnPin: false - -1 - StringeeClient is disconnected"); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + if (convId == null || convId.isEmpty()) { Log.d(TAG, "pinOrUnPin: false - -2 - convId is invalid"); map.put("status", false); diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java index c5da1a1..598c79c 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java @@ -123,18 +123,9 @@ public void onMethodCall(MethodCall call, final Result result) { return; } - if (!clientWrapper.isConnected()) { - Log.d(TAG, call.method + ": false - -1 - StringeeClient is not initialized or disconnected"); - map.put("status", false); - map.put("code", -1); - map.put("message", "StringeeClient is not initialized or disconnected"); - result.success(map); - return; - } - switch (call.method) { case "disconnect": - clientWrapper.disconnect(result); + clientWrapper.disconnect(uuid, result); break; case "registerPush": clientWrapper.registerPush((String) call.argument("deviceToken"), result); From 82a3dc5b3e6058f2c91cc28df8894beeb49e9479 Mon Sep 17 00:00:00 2001 From: stringeecom Date: Wed, 18 Aug 2021 10:10:05 +0700 Subject: [PATCH 07/26] =?UTF-8?q?Th=C3=AAm=20function=20getCallStats=20cho?= =?UTF-8?q?=20call2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/libraries/Dart_SDK.xml | 40 ++++++++++++++--------------- ios/Classes/StringeeCall2Manager.h | 2 ++ ios/Classes/StringeeCall2Manager.m | 32 +++++++++++++++++++++++ ios/Classes/StringeeCallManager.m | 10 ++++++-- ios/Classes/StringeeFlutterPlugin.m | 3 +++ ios/stringee_flutter_plugin.podspec | 2 +- 6 files changed, 66 insertions(+), 23 deletions(-) diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index 170212a..e7bbf3c 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Classes/StringeeCall2Manager.h b/ios/Classes/StringeeCall2Manager.h index 45235a7..341dd88 100644 --- a/ios/Classes/StringeeCall2Manager.h +++ b/ios/Classes/StringeeCall2Manager.h @@ -37,6 +37,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)enableVideo:(id)arguments result:(FlutterResult)result; +- (void)getCallStats:(id)arguments result:(FlutterResult)result; + @end NS_ASSUME_NONNULL_END diff --git a/ios/Classes/StringeeCall2Manager.m b/ios/Classes/StringeeCall2Manager.m index b0738e4..a28a120 100644 --- a/ios/Classes/StringeeCall2Manager.m +++ b/ios/Classes/StringeeCall2Manager.m @@ -269,6 +269,38 @@ - (void)enableVideo:(id)arguments result:(FlutterResult)result { result(@{STEStatus : @(YES), STECode : @(0), STEMessage: @"Success."}); } +- (void)getCallStats:(id)arguments result:(FlutterResult)result { + if (!_client) { + result(@{STEStatus : @(NO), STECode : @(-1), STEMessage: @"StringeeClient is not initialzied or connected."}); + return; + } + + NSDictionary *data = (NSDictionary *)arguments; + NSString *callId = data[@"callId"]; + + if (!callId || [callId isKindOfClass:[NSNull class]] || !callId.length) { + result(@{STEStatus : @(NO), STECode : @(-2), STEMessage: @"The callId is invalid."}); + return; + } + + StringeeCall2 *call = [[StringeeManager instance].call2s objectForKey:callId]; + + if (!call) { + result(@{STEStatus : @(NO), STECode : @(-3), STEMessage: @"The call is not found."}); + return; + } + + [call stats:false completionHandler:^(NSDictionary *values) { + NSMutableDictionary *dic; + if (values != nil) { + dic = [[NSMutableDictionary alloc] initWithDictionary:values]; + long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000); + [dic setValue:@(milliseconds) forKey:@"timeStamp"]; + } + result(@{STEStatus : @(true), STECode : @(0), STEMessage: @"Success", @"stats" : dic}); + }]; +} + #pragma mark - Call Delegate - (void)didChangeMediaState2:(StringeeCall2 *)stringeeCall2 mediaState:(MediaState)mediaState { diff --git a/ios/Classes/StringeeCallManager.m b/ios/Classes/StringeeCallManager.m index a32ccaf..99eeed0 100644 --- a/ios/Classes/StringeeCallManager.m +++ b/ios/Classes/StringeeCallManager.m @@ -286,7 +286,7 @@ - (void)sendCallInfo:(id)arguments result:(FlutterResult)result { } - (void)getCallStats:(id)arguments result:(FlutterResult)result { - if (!_client || !_client.hasConnected) { + if (!_client) { result(@{STEStatus : @(NO), STECode : @(-1), STEMessage: @"StringeeClient is not initialzied or connected."}); return; } @@ -307,7 +307,13 @@ - (void)getCallStats:(id)arguments result:(FlutterResult)result { } [call statsWithCompletionHandler:^(NSDictionary *values) { - result(@{STEStatus : @(NO), STECode : @(-3), STEMessage: @"The call is not found.", @"stats" : values}); + NSMutableDictionary *dic; + if (values != nil) { + dic = [[NSMutableDictionary alloc] initWithDictionary:values]; + long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000); + [dic setValue:@(milliseconds) forKey:@"timeStamp"]; + } + result(@{STEStatus : @(true), STECode : @(0), STEMessage: @"Success", @"stats" : dic}); }]; } diff --git a/ios/Classes/StringeeFlutterPlugin.m b/ios/Classes/StringeeFlutterPlugin.m index bb2b5fa..cee308b 100644 --- a/ios/Classes/StringeeFlutterPlugin.m +++ b/ios/Classes/StringeeFlutterPlugin.m @@ -154,6 +154,9 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { else if ([call.method isEqualToString:@"enableVideo2"]) { [wrapper.call2Manager enableVideo:call.arguments result:result]; } + else if ([call.method isEqualToString:@"getCallStats2"]) { + [wrapper.call2Manager getCallStats:call.arguments result:result]; + } // Conversation else if ([call.method isEqualToString:@"createConversation"]) { diff --git a/ios/stringee_flutter_plugin.podspec b/ios/stringee_flutter_plugin.podspec index 3220c5d..43f43ea 100644 --- a/ios/stringee_flutter_plugin.podspec +++ b/ios/stringee_flutter_plugin.podspec @@ -16,7 +16,7 @@ Stringee plugin for flutter. s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' - s.dependency 'Stringee', '~> 1.6.4' + s.dependency 'Stringee', '~> 1.6.7' s.static_framework = true s.ios.deployment_target = '8.0' From 3af366227f2f233b3733db9961cf8adc241375c0 Mon Sep 17 00:00:00 2001 From: stringeecom Date: Wed, 18 Aug 2021 16:31:41 +0700 Subject: [PATCH 08/26] Fix nil object passed to dictionary --- ios/Classes/StringeeCall2Manager.m | 4 +++- ios/Classes/StringeeCallManager.m | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ios/Classes/StringeeCall2Manager.m b/ios/Classes/StringeeCall2Manager.m index a28a120..ddec842 100644 --- a/ios/Classes/StringeeCall2Manager.m +++ b/ios/Classes/StringeeCall2Manager.m @@ -291,11 +291,13 @@ - (void)getCallStats:(id)arguments result:(FlutterResult)result { } [call stats:false completionHandler:^(NSDictionary *values) { - NSMutableDictionary *dic; + id dic; if (values != nil) { dic = [[NSMutableDictionary alloc] initWithDictionary:values]; long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000); [dic setValue:@(milliseconds) forKey:@"timeStamp"]; + } else { + dic = [NSNull null]; } result(@{STEStatus : @(true), STECode : @(0), STEMessage: @"Success", @"stats" : dic}); }]; diff --git a/ios/Classes/StringeeCallManager.m b/ios/Classes/StringeeCallManager.m index 99eeed0..7c7277c 100644 --- a/ios/Classes/StringeeCallManager.m +++ b/ios/Classes/StringeeCallManager.m @@ -307,11 +307,13 @@ - (void)getCallStats:(id)arguments result:(FlutterResult)result { } [call statsWithCompletionHandler:^(NSDictionary *values) { - NSMutableDictionary *dic; + id dic; if (values != nil) { dic = [[NSMutableDictionary alloc] initWithDictionary:values]; long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000); [dic setValue:@(milliseconds) forKey:@"timeStamp"]; + } else { + dic = [NSNull null]; } result(@{STEStatus : @(true), STECode : @(0), STEMessage: @"Success", @"stats" : dic}); }]; From 9dbdac36935850cd458a60faffaa79bb6a310671 Mon Sep 17 00:00:00 2001 From: AnhNQK Date: Mon, 13 Sep 2021 14:44:07 +0700 Subject: [PATCH 09/26] upgrade sdk --- .gitignore | 1 + .idea/dictionaries/Admin.xml | 1 + .idea/libraries/Dart_SDK.xml | 40 +- .idea/vcs.xml | 1 - android/.idea/gradle.xml | 3 +- android/.idea/jarRepositories.xml | 5 + android/.idea/runConfigurations.xml | 12 - android/build.gradle | 5 +- .../stringeeflutterplugin/Call2Wrapper.java | 11 + .../ChatRequestManager.java | 192 +++ .../stringeeflutterplugin/ClientWrapper.java | 408 ++++- .../ConversationManager.java | 330 ++++ .../StringeeFlutterPlugin.java | 58 +- .../StringeeManager.java | 3 +- .../StringeeVideoView.java | 49 +- .../stringee/stringeeflutterplugin/Utils.java | 222 ++- example/android/app/build.gradle | 17 +- .../android/app/src/main/AndroidManifest.xml | 7 +- example/android/key.properties | 4 + .../ios/Flutter/flutter_export_environment.sh | 13 +- example/lib/main.dart | 325 +--- example/lib/tab/call_tab.dart | 265 ++++ example/lib/{Chat.dart => tab/chat_tab.dart} | 217 ++- example/lib/tab/live_chat_tab.dart | 48 + example/lib/ui/agent.dart | 327 ++++ example/lib/{Call.dart => ui/call.dart} | 1365 ++++++++--------- .../conversation_info.dart} | 132 +- example/lib/ui/visitor.dart | 382 +++++ example/pubspec.yaml | 6 +- ios/Classes/StringeeChatManager.h | 46 + ios/Classes/StringeeChatManager.m | 245 +++ ios/Classes/StringeeClientWrapper.h | 2 + ios/Classes/StringeeClientWrapper.m | 69 +- ios/Classes/StringeeFlutterPlugin.m | 35 + ios/Classes/StringeeHelper.h | 15 + ios/Classes/StringeeHelper.m | 81 +- ios/Classes/StringeeMessageManager.m | 19 +- ios/stringee_flutter_plugin.podspec | 2 +- lib/src/StringeeChat.dart | 283 ++++ lib/src/StringeeClient.dart | 271 ++-- lib/src/StringeeConstants.dart | 68 +- lib/src/call/StringeeCall.dart | 7 +- lib/src/call/StringeeCall2.dart | 7 +- lib/src/call/StringeeVideoView.dart | 12 +- lib/src/messaging/StringeeChatRequest.dart | 47 + lib/src/messaging/StringeeConversation.dart | 154 +- lib/src/messaging/StringeeMessage.dart | 20 +- lib/src/messaging/StringeeUser.dart | 4 +- lib/stringee_flutter_plugin.dart | 6 +- pubspec.yaml | 2 +- stringee_flutter_plugin.iml | 3 + 51 files changed, 4313 insertions(+), 1534 deletions(-) delete mode 100644 android/.idea/runConfigurations.xml create mode 100644 android/src/main/java/com/stringee/stringeeflutterplugin/ChatRequestManager.java create mode 100644 example/android/key.properties create mode 100644 example/lib/tab/call_tab.dart rename example/lib/{Chat.dart => tab/chat_tab.dart} (71%) create mode 100644 example/lib/tab/live_chat_tab.dart create mode 100644 example/lib/ui/agent.dart rename example/lib/{Call.dart => ui/call.dart} (53%) rename example/lib/{ConversationInfor.dart => ui/conversation_info.dart} (85%) create mode 100644 example/lib/ui/visitor.dart create mode 100644 ios/Classes/StringeeChatManager.h create mode 100644 ios/Classes/StringeeChatManager.m create mode 100644 lib/src/StringeeChat.dart create mode 100644 lib/src/messaging/StringeeChatRequest.dart diff --git a/.gitignore b/.gitignore index 4f337e6..6d8c2cd 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ example/.flutter-plugins-dependencies contents.xcworkspacedata Flutter.podspec Podfile +example/android/app/release/ diff --git a/.idea/dictionaries/Admin.xml b/.idea/dictionaries/Admin.xml index 28bfd2a..402e5fd 100644 --- a/.idea/dictionaries/Admin.xml +++ b/.idea/dictionaries/Admin.xml @@ -2,6 +2,7 @@ conv + dtmf fullhd stringee diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index e7bbf3c..170212a 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 3b14ad0..8306744 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -3,6 +3,5 @@ - \ No newline at end of file diff --git a/android/.idea/gradle.xml b/android/.idea/gradle.xml index f894050..b220fcc 100644 --- a/android/.idea/gradle.xml +++ b/android/.idea/gradle.xml @@ -4,7 +4,7 @@ diff --git a/android/.idea/jarRepositories.xml b/android/.idea/jarRepositories.xml index 8ddb7fc..56566f8 100644 --- a/android/.idea/jarRepositories.xml +++ b/android/.idea/jarRepositories.xml @@ -36,5 +36,10 @@ \ No newline at end of file diff --git a/android/.idea/runConfigurations.xml b/android/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/android/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 8e59ade..53ebf80 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -39,7 +39,8 @@ android { } dependencies { -// implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"]) - implementation 'com.stringee.sdk.android:stringee-android-sdk:1.7.3' + implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"]) + implementation 'com.stringee.sdk.android:stringee-android-sdk:1.7.5' implementation 'androidx.annotation:annotation:1.2.0' + implementation 'com.android.volley:volley:1.1.0' } \ No newline at end of file diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java index 9121fa7..f812779 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/Call2Wrapper.java @@ -16,6 +16,7 @@ import com.stringee.common.StringeeAudioManager.AudioManagerEvents; import com.stringee.exception.StringeeError; import com.stringee.listener.StatusListener; +import com.stringee.video.StringeeVideoTrack; import org.json.JSONException; import org.json.JSONObject; @@ -731,6 +732,16 @@ public void run() { }); } + @Override + public void onVideoTrackAdded(StringeeVideoTrack stringeeVideoTrack) { + + } + + @Override + public void onVideoTrackRemoved(StringeeVideoTrack stringeeVideoTrack) { + + } + @Override public void onCallInfo(final StringeeCall2 stringeeCall, final JSONObject jsonObject) { _handler.post(new Runnable() { diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/ChatRequestManager.java b/android/src/main/java/com/stringee/stringeeflutterplugin/ChatRequestManager.java new file mode 100644 index 0000000..2b4b654 --- /dev/null +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/ChatRequestManager.java @@ -0,0 +1,192 @@ +package com.stringee.stringeeflutterplugin; + +import android.os.Handler; +import android.util.Log; + +import com.stringee.exception.StringeeError; +import com.stringee.listener.StatusListener; +import com.stringee.messaging.ChatRequest; +import com.stringee.messaging.Conversation; +import com.stringee.messaging.listeners.CallbackListener; + +import java.util.HashMap; +import java.util.Map; + +import io.flutter.plugin.common.MethodChannel.Result; + +public class ChatRequestManager { + private ClientWrapper _clientWrapper; + private StringeeManager _manager; + private Handler _handler; + private static final String TAG = "StringeeSDK"; + + public ChatRequestManager(ClientWrapper clientWrapper) { + _manager = StringeeManager.getInstance(); + _handler = _manager.getHandler(); + _clientWrapper = clientWrapper; + } + + /** + * accept chat request + * + * @param convId + * @param result + */ + public void acceptChatRequest(String convId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "acceptChatRequest: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + if (convId == null || convId.isEmpty()) { + Log.d(TAG, "acceptChatRequest: false - -2 - convId is invalid"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -2); + map.put("message", "convId is invalid"); + result.success(map); + return; + } + + Utils.getChatRequest(_clientWrapper.getClient(), convId, new CallbackListener() { + @Override + public void onSuccess(ChatRequest chatRequest) { + chatRequest.accept(_clientWrapper.getClient(), new CallbackListener() { + @Override + public void onSuccess(Conversation conversation) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "acceptChatRequest: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "acceptChatRequest: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "acceptChatRequest: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + /** + * Reject chat request + * + * @param convId + * @param result + */ + public void rejectChatRequest(String convId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "rejectChatRequest: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + if (convId == null || convId.isEmpty()) { + Log.d(TAG, "rejectChatRequest: false - -2 - convId is invalid"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -2); + map.put("message", "convId is invalid"); + result.success(map); + return; + } + + Utils.getChatRequest(_clientWrapper.getClient(), convId, new CallbackListener() { + @Override + public void onSuccess(ChatRequest chatRequest) { + chatRequest.reject(_clientWrapper.getClient(), new StatusListener() { + @Override + public void onSuccess() { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "rejectChatRequest: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "rejectChatRequest: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "rejectChatRequest: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } +} diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java b/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java index 9a69ae4..e04b426 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/ClientWrapper.java @@ -1,8 +1,10 @@ package com.stringee.stringeeflutterplugin; +import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.ChatEvent; import static com.stringee.stringeeflutterplugin.StringeeManager.StringeeEventType.ClientEvent; import android.os.Handler; +import android.text.TextUtils; import android.util.Log; import com.stringee.StringeeClient; @@ -13,6 +15,8 @@ import com.stringee.exception.StringeeError; import com.stringee.listener.StatusListener; import com.stringee.listener.StringeeConnectionListener; +import com.stringee.messaging.ChatProfile; +import com.stringee.messaging.ChatRequest; import com.stringee.messaging.Conversation; import com.stringee.messaging.ConversationOptions; import com.stringee.messaging.Message; @@ -21,6 +25,8 @@ import com.stringee.messaging.User; import com.stringee.messaging.listeners.CallbackListener; import com.stringee.messaging.listeners.ChangeEventListenter; +import com.stringee.messaging.listeners.LiveChatEventListerner; +import com.stringee.messaging.listeners.UserTypingEventListener; import com.stringee.stringeeflutterplugin.StringeeManager.StringeeCallType; import org.json.JSONObject; @@ -31,11 +37,12 @@ import io.flutter.plugin.common.MethodChannel.Result; -public class ClientWrapper implements StringeeConnectionListener, ChangeEventListenter { +public class ClientWrapper implements StringeeConnectionListener, ChangeEventListenter, LiveChatEventListerner, UserTypingEventListener { private StringeeClient _client; private StringeeManager _manager; private ConversationManager _conversationManager; private MessageManager _messageManager; + private ChatRequestManager _chatRequestManager; private Handler _handler; private String _uuid; private static final String TAG = "StringeeSDK"; @@ -46,9 +53,9 @@ public ClientWrapper(final String uuid) { _uuid = uuid; _conversationManager = new ConversationManager(this); _messageManager = new MessageManager(this); + _chatRequestManager = new ChatRequestManager(this); _client = new StringeeClient(_manager.getContext()); - _client.setConnectionListener(this); - _client.setChangeEventListenter(this); + setListener(); } public ClientWrapper(final String uuid, final String baseAPIUrl) { @@ -57,12 +64,19 @@ public ClientWrapper(final String uuid, final String baseAPIUrl) { _uuid = uuid; _conversationManager = new ConversationManager(this); _messageManager = new MessageManager(this); + _chatRequestManager = new ChatRequestManager(this); _client = new StringeeClient(_manager.getContext()); if (baseAPIUrl != null) { _client.setBaseAPIUrl(baseAPIUrl); } + setListener(); + } + + private void setListener() { _client.setConnectionListener(this); _client.setChangeEventListenter(this); + _client.setLiveChatEventListerner(this); + _client.setUserTypingEventListener(this); } public StringeeClient getClient() { @@ -140,6 +154,10 @@ public MessageManager message() { return _messageManager; } + public ChatRequestManager chatRequest() { + return _chatRequestManager; + } + @Override public void onConnectionConnected(final StringeeClient stringeeClient, final boolean b) { _handler.post(new Runnable() { @@ -316,7 +334,7 @@ public void onChangeEvent(final StringeeChange stringeeChange) { public void run() { Log.d(TAG, "onChangeEvent: " + stringeeChange.getObjectType() + " - " + stringeeChange.getChangeType()); Map map = new HashMap(); - map.put("nativeEventType", ClientEvent.getValue()); + map.put("nativeEventType", ChatEvent.getValue()); map.put("event", "didReceiveChangeEvent"); map.put("uuid", _uuid); Map bodyMap = new HashMap(); @@ -338,6 +356,146 @@ public void run() { }); } + @Override + public void onReceiveChatRequest(ChatRequest chatRequest) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onReceiveChatRequest: " + chatRequest.getConvId() + " - from: " + chatRequest.getCustomerId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "didReceiveChatRequest"); + map.put("uuid", _uuid); + map.put("body", Utils.convertChatRequestToMap(chatRequest)); + StringeeFlutterPlugin._eventSink.success(map); + } + }); + } + + @Override + public void onReceiveTransferChatRequest(ChatRequest chatRequest) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onReceiveTransferChatRequest: " + chatRequest.getConvId() + " - from: " + chatRequest.getCustomerId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "didReceiveTransferChatRequest"); + map.put("uuid", _uuid); + map.put("body", Utils.convertChatRequestToMap(chatRequest)); + StringeeFlutterPlugin._eventSink.success(map); + } + }); + } + + @Override + public void onTimeoutAnswerChat(ChatRequest chatRequest) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onTimeoutAnswerChat: " + chatRequest.getConvId() + " - from: " + chatRequest.getCustomerId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "timeoutAnswerChat"); + map.put("uuid", _uuid); + map.put("body", Utils.convertChatRequestToMap(chatRequest)); + StringeeFlutterPlugin._eventSink.success(map); + } + }); + } + + @Override + public void onTimeoutInQueue(Conversation conversation) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onTimeoutInQueue: " + conversation.getId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "timeoutInQueue"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("convId", conversation.getId()); + User user = _client.getUser(_client.getUserId()); + bodyMap.put("customerId", user.getUserId()); + bodyMap.put("customerName", user.getName()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } + }); + } + + @Override + public void onConversationEnded(Conversation conversation, User user) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onConversationEnded: " + conversation.getId() + " - endedBy: " + user.getUserId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "conversationEnded"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("convId", conversation.getId()); + bodyMap.put("endedby", user.getUserId()); + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } + }); + } + + @Override + public void onTyping(Conversation conversation, User user) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onTyping: " + conversation.getId() + " - endedBy: " + user.getUserId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "userBeginTyping"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("convId", conversation.getId()); + bodyMap.put("userId", user.getUserId()); + bodyMap.put("displayName", user.getUserId()); + String userName = user.getName(); + if (userName != null) { + if (!TextUtils.isEmpty(userName.trim())) { + bodyMap.put("displayName", userName); + } + } + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } + }); + } + + @Override + public void onEndTyping(Conversation conversation, User user) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "onEndTyping: " + conversation.getId() + " - endedBy: " + user.getUserId()); + Map map = new HashMap(); + map.put("nativeEventType", ClientEvent.getValue()); + map.put("event", "userEndTyping"); + map.put("uuid", _uuid); + Map bodyMap = new HashMap(); + bodyMap.put("convId", conversation.getId()); + bodyMap.put("userId", user.getUserId()); + bodyMap.put("displayName", user.getUserId()); + String userName = user.getName(); + if (userName != null) { + if (!TextUtils.isEmpty(userName.trim())) { + bodyMap.put("displayName", userName); + } + } + map.put("body", bodyMap); + StringeeFlutterPlugin._eventSink.success(map); + } + }); + } + /** * Connect to Stringee server * @@ -381,7 +539,7 @@ public boolean isConnected() { * * @param result */ - public void disconnect(final String uuid,final Result result) { + public void disconnect(final String uuid, final Result result) { _client.disconnect(); _manager.getClientMap().put(uuid, null); @@ -1033,4 +1191,244 @@ public void run() { } }); } + + /** + * Get chat profile + * + * @param key + * @param result + */ + public void getChatProfile(String key, final Result result) { + _client.getChatProfile(key, new CallbackListener() { + @Override + public void onSuccess(final ChatProfile chatProfile) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getChatProfile: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", Utils.convertChatProfileToMap(chatProfile)); + result.success(map); + } + }); + } + + @Override + public void onError(final StringeeError stringeeError) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getChatProfile: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + /** + * Get live chat token + * + * @param key + * @param name + * @param email + * @param result + */ + public void getLiveChatToken(String key, String name, String email, final Result result) { + _client.getLiveChatToken(key, name, email, new CallbackListener() { + @Override + public void onSuccess(final String token) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLiveChatToken: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", token); + result.success(map); + } + }); + } + + @Override + public void onError(final StringeeError stringeeError) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "getLiveChatToken: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + /** + * Update user info + * + * @param name + * @param email + * @param avatar + * @param result + */ + public void updateUserInfo(String name, String email, String avatar, final Result result) { + if (!isConnected()) { + Log.d(TAG, "updateUserInfo: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + _client.updateUser(name, email, avatar, new StatusListener() { + @Override + public void onSuccess() { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "updateUserInfo: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } + }); + } + + @Override + public void onError(final StringeeError stringeeError) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "updateUserInfo: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + /** + * Create live chat conversation + * + * @param queueId + * @param result + */ + public void createLiveChatConversation(String queueId, final Result result) { + if (!isConnected()) { + Log.d(TAG, "createLiveChatConversation: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + _client.createLiveChat(queueId, new CallbackListener() { + @Override + public void onSuccess(final Conversation conversation) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "createLiveChatConversation: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + map.put("body", Utils.convertConversationToMap(conversation)); + result.success(map); + } + }); + } + + @Override + public void onError(final StringeeError stringeeError) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "convertConversationToMap: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + /** + * Create live chat ticket + * + * @param key + * @param name + * @param email + * @param note + * @param result + */ + public void createLiveChatTicket(String key, String name, String email, String note, final Result result) { + if (!isConnected()) { + Log.d(TAG, "createLiveChatTicket: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + _client.createLiveChatTicket(key, name, email, note, new StatusListener() { + @Override + public void onSuccess() { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "createLiveChatTicket: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } + }); + } + + @Override + public void onError(final StringeeError stringeeError) { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "createLiveChatTicket: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } } \ No newline at end of file diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java b/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java index c12c976..a2d308c 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/ConversationManager.java @@ -1199,4 +1199,334 @@ public void run() { } }); } + + /** + * Send chat transcript + * + * @param convId + * @param email + * @param domain + * @param result + */ + public void sendChatTranscript(String convId, String email, String domain, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "sendChatTranscript: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + if (convId == null || convId.isEmpty()) { + Log.d(TAG, "sendChatTranscript: false - -2 - convId is invalid"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -2); + map.put("message", "convId is invalid"); + result.success(map); + return; + } + + Utils.getConversation(_clientWrapper.getClient(), convId, new CallbackListener() { + @Override + public void onSuccess(Conversation conversation) { + conversation.sendChatTranscriptTo(_clientWrapper.getClient(), email, domain, new StatusListener() { + @Override + public void onSuccess() { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendChatTranscript: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendChatTranscript: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "sendChatTranscript: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + /** + * End chat + * + * @param convId + * @param result + */ + public void endChat(String convId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "endChat: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + if (convId == null || convId.isEmpty()) { + Log.d(TAG, "endChat: false - -2 - convId is invalid"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -2); + map.put("message", "convId is invalid"); + result.success(map); + return; + } + + Utils.getConversation(_clientWrapper.getClient(), convId, new CallbackListener() { + @Override + public void onSuccess(Conversation conversation) { + conversation.endChat(_clientWrapper.getClient(), new StatusListener() { + @Override + public void onSuccess() { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "endChat: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "endChat: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "endChat: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + /** + * Send state begin typing + * + * @param convId + * @param result + */ + public void beginTyping(String convId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "beginTyping: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + if (convId == null || convId.isEmpty()) { + Log.d(TAG, "beginTyping: false - -2 - convId is invalid"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -2); + map.put("message", "convId is invalid"); + result.success(map); + return; + } + + Utils.getConversation(_clientWrapper.getClient(), convId, new CallbackListener() { + @Override + public void onSuccess(Conversation conversation) { + conversation.beginTyping(_clientWrapper.getClient(), new StatusListener() { + @Override + public void onSuccess() { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "beginTyping: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "beginTyping: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "beginTyping: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + /** + * Send state end typing + * + * @param convId + * @param result + */ + public void endTyping(String convId, final Result result) { + if (!_clientWrapper.isConnected()) { + Log.d(TAG, "endTyping: false - -1 - StringeeClient is disconnected"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -1); + map.put("message", "StringeeClient is disconnected"); + result.success(map); + return; + } + + if (convId == null || convId.isEmpty()) { + Log.d(TAG, "endTyping: false - -2 - convId is invalid"); + Map map = new HashMap(); + map.put("status", false); + map.put("code", -2); + map.put("message", "convId is invalid"); + result.success(map); + return; + } + + Utils.getConversation(_clientWrapper.getClient(), convId, new CallbackListener() { + @Override + public void onSuccess(Conversation conversation) { + conversation.endTyping(_clientWrapper.getClient(), new StatusListener() { + @Override + public void onSuccess() { + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "endTyping: success"); + Map map = new HashMap(); + map.put("status", true); + map.put("code", 0); + map.put("message", "Success"); + result.success(map); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "endTyping: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + _handler.post(new Runnable() { + @Override + public void run() { + Log.d(TAG, "endTyping: false - " + stringeeError.getCode() + " - " + stringeeError.getMessage()); + Map map = new HashMap(); + map.put("status", false); + map.put("code", stringeeError.getCode()); + map.put("message", stringeeError.getMessage()); + result.success(map); + } + }); + } + }); + } } \ No newline at end of file diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java index 598c79c..148e4ee 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeFlutterPlugin.java @@ -11,6 +11,7 @@ import com.stringee.common.SocketAddress; import com.stringee.messaging.ConversationOptions; import com.stringee.messaging.Message; +import com.stringee.messaging.Message.Type; import com.stringee.messaging.User; import com.stringee.stringeeflutterplugin.StringeeManager.UserRole; @@ -363,47 +364,47 @@ public void onMethodCall(MethodCall call, final Result result) { try { Map msgMap = (Map) call.arguments; String convId = (String) msgMap.get("convId"); - int msgType = (int) msgMap.get("type"); + Type msgType = Type.getType((int) msgMap.get("type")); Message message = new Message(msgType); switch (message.getType()) { - case Message.TYPE_TEXT: - case Message.TYPE_LINK: + case TEXT: + case LINK: message = new Message((String) msgMap.get("text")); break; - case Message.TYPE_PHOTO: + case PHOTO: message.setFileUrl((String) msgMap.get("filePath")); if (msgMap.containsKey("thumbnail")) message.setThumbnailUrl((String) msgMap.get("thumbnail")); if (msgMap.containsKey("ratio")) - message.setImageRatio((Float) msgMap.get("ratio")); + message.setImageRatio(((Double) msgMap.get("ratio")).floatValue()); break; - case Message.TYPE_VIDEO: + case VIDEO: message.setFileUrl((String) msgMap.get("filePath")); message.setDuration((Integer) msgMap.get("duration")); if (msgMap.containsKey("thumbnail")) message.setThumbnailUrl((String) msgMap.get("thumbnail")); if (msgMap.containsKey("ratio")) - message.setImageRatio((Float) msgMap.get("ratio")); + message.setImageRatio(((Double) msgMap.get("ratio")).floatValue()); break; - case Message.TYPE_AUDIO: + case AUDIO: message.setFileUrl((String) msgMap.get("filePath")); message.setDuration((Integer) msgMap.get("duration")); break; - case Message.TYPE_FILE: + case FILE: message.setFileUrl((String) msgMap.get("filePath")); if (msgMap.containsKey("filename")) message.setFileName((String) msgMap.get("filename")); if (msgMap.containsKey("length")) message.setFileLength((Long) msgMap.get("length")); break; - case Message.TYPE_LOCATION: + case LOCATION: message.setLatitude((Double) msgMap.get("lat")); message.setLongitude((Double) msgMap.get("lon")); break; - case Message.TYPE_CONTACT: + case CONTACT: message.setContact((String) msgMap.get("vcard")); break; - case Message.TYPE_STICKER: + case STICKER: message.setStickerCategory((String) msgMap.get("stickerCategory")); message.setStickerName((String) msgMap.get("stickerName")); break; @@ -468,6 +469,39 @@ public void onMethodCall(MethodCall call, final Result result) { case "pinOrUnPin": clientWrapper.message().pinOrUnPin((String) call.argument("convId"), (String) call.argument("msgId"), (boolean) call.argument("pinOrUnPin"), result); break; + case "getChatProfile": + clientWrapper.getChatProfile((String) call.argument("key"), result); + break; + case "getLiveChatToken": + clientWrapper.getLiveChatToken((String) call.argument("key"), (String) call.argument("name"), (String) call.argument("email"), result); + break; + case "updateUserInfo": + clientWrapper.updateUserInfo((String) call.argument("name"), (String) call.argument("email"), (String) call.argument("avatar"), result); + break; + case "createLiveChatConversation": + clientWrapper.createLiveChatConversation((String) call.argument("queueId"), result); + break; + case "createLiveChatTicket": + clientWrapper.createLiveChatTicket((String) call.argument("key"), (String) call.argument("name"), (String) call.argument("email"), (String) call.argument("description"), result); + break; + case "sendChatTranscript": + clientWrapper.conversation().sendChatTranscript((String) call.argument("convId"),(String) call.argument("email"),(String) call.argument("domain"), result); + break; + case "endChat": + clientWrapper.conversation().endChat((String) call.argument("convId"), result); + break; + case "beginTyping": + clientWrapper.conversation().beginTyping((String) call.argument("convId"), result); + break; + case "endTyping": + clientWrapper.conversation().endTyping((String) call.argument("convId"), result); + break; + case "acceptChatRequest": + clientWrapper.chatRequest().acceptChatRequest((String) call.argument("convId"), result); + break; + case "rejectChatRequest": + clientWrapper.chatRequest().rejectChatRequest((String) call.argument("convId"), result); + break; default: result.notImplemented(); } diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeManager.java b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeManager.java index 85dbef0..8350bd3 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeManager.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeManager.java @@ -43,7 +43,8 @@ public short getValue() { public enum StringeeEventType { ClientEvent(0), CallEvent(1), - Call2Event(2); + Call2Event(2), + ChatEvent(3); public final short value; diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeVideoView.java b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeVideoView.java index 3d732ec..c616a58 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeVideoView.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/StringeeVideoView.java @@ -1,5 +1,9 @@ package com.stringee.stringeeflutterplugin; +import static org.webrtc.RendererCommon.ScalingType.SCALE_ASPECT_BALANCED; +import static org.webrtc.RendererCommon.ScalingType.SCALE_ASPECT_FILL; +import static org.webrtc.RendererCommon.ScalingType.SCALE_ASPECT_FIT; + import android.content.Context; import android.graphics.Color; import android.os.Build; @@ -13,16 +17,13 @@ import androidx.annotation.Nullable; import org.webrtc.RendererCommon.ScalingType; +import org.webrtc.SurfaceViewRenderer; import java.util.HashMap; import java.util.Map; import io.flutter.plugin.platform.PlatformView; -import static org.webrtc.RendererCommon.ScalingType.SCALE_ASPECT_BALANCED; -import static org.webrtc.RendererCommon.ScalingType.SCALE_ASPECT_FILL; -import static org.webrtc.RendererCommon.ScalingType.SCALE_ASPECT_FIT; - public class StringeeVideoView implements PlatformView { private FrameLayout frameLayout; private static final String TAG = "Stringee sdk"; @@ -90,14 +91,26 @@ public void run() { if (isLocal) { if (call != null) { call.getLocalView().setScalingType(scalingType); - layout.addView(call.getLocalView()); + + SurfaceViewRenderer localView = call.getLocalView(); + if (localView.getParent() != null) { + ((FrameLayout) localView.getParent()).removeView(localView); + } + + layout.addView(localView); call.renderLocalView(isOverlay); - call.getLocalView().setMirror(isMirror); + localView.setMirror(isMirror); } else { call2.getLocalView().setScalingType(scalingType); - layout.addView(call2.getLocalView()); + + SurfaceViewRenderer localView = call2.getLocalView(); + if (localView.getParent() != null) { + ((FrameLayout) localView.getParent()).removeView(localView); + } + + layout.addView(localView); call2.renderLocalView(isOverlay); - call2.getLocalView().setMirror(isMirror); + localView.setMirror(isMirror); } //save localView option @@ -111,14 +124,26 @@ public void run() { } else { if (call != null) { call.getRemoteView().setScalingType(scalingType); - layout.addView(call.getRemoteView()); + + SurfaceViewRenderer remoteView = call.getRemoteView(); + if (remoteView.getParent() != null) { + ((FrameLayout) remoteView.getParent()).removeView(remoteView); + } + + layout.addView(remoteView); call.renderRemoteView(isOverlay); - call.getRemoteView().setMirror(isMirror); + remoteView.setMirror(isMirror); } else { call2.getRemoteView().setScalingType(scalingType); - layout.addView(call2.getRemoteView()); + + SurfaceViewRenderer remoteView = call2.getRemoteView(); + if (remoteView.getParent() != null) { + ((FrameLayout) remoteView.getParent()).removeView(remoteView); + } + + layout.addView(remoteView); call2.renderRemoteView(isOverlay); - call2.getRemoteView().setMirror(isMirror); + remoteView.setMirror(isMirror); } } } diff --git a/android/src/main/java/com/stringee/stringeeflutterplugin/Utils.java b/android/src/main/java/com/stringee/stringeeflutterplugin/Utils.java index 08209ed..f493bf0 100644 --- a/android/src/main/java/com/stringee/stringeeflutterplugin/Utils.java +++ b/android/src/main/java/com/stringee/stringeeflutterplugin/Utils.java @@ -1,13 +1,19 @@ package com.stringee.stringeeflutterplugin; +import android.os.Handler; +import android.os.Looper; import android.util.Log; import androidx.annotation.NonNull; import com.stringee.exception.StringeeError; +import com.stringee.messaging.ChatProfile; +import com.stringee.messaging.ChatRequest; import com.stringee.messaging.Conversation; import com.stringee.messaging.Message; +import com.stringee.messaging.Queue; import com.stringee.messaging.User; +import com.stringee.messaging.User.Role; import com.stringee.messaging.listeners.CallbackListener; import com.stringee.stringeeflutterplugin.StringeeManager.UserRole; @@ -133,9 +139,9 @@ public static List getListUser(String userList) throws JSONException { if (object.has("role")) { short role = (short) object.getInt("role"); if (role == UserRole.Admin.getValue()) { - user.setRole("admin"); + user.setRole(Role.ADMIN); } else if (role == UserRole.Admin.getValue()) { - user.setRole("member"); + user.setRole(com.stringee.messaging.User.Role.MEMBER); } } list.add(user); @@ -143,6 +149,16 @@ public static List getListUser(String userList) throws JSONException { return list; } + public static Map convertChatRequestToMap(@NonNull ChatRequest chatRequest) { + Map chatRequestMap = new HashMap(); + chatRequestMap.put("convId", chatRequest.getConvId()); + chatRequestMap.put("customerId", chatRequest.getCustomerId()); + chatRequestMap.put("customerName", chatRequest.getName()); + chatRequestMap.put("channelType", chatRequest.getChannelType().getValue()); + chatRequestMap.put("type", chatRequest.getRequestType().getValue()); + return chatRequestMap; + } + public static Map convertConversationToMap(@NonNull Conversation conversation) { Map conversationMap = new HashMap(); try { @@ -155,11 +171,11 @@ public static Map convertConversationToMap(@NonNull Conversation conversation) { conversationMap.put("totalUnread", conversation.getTotalUnread()); conversationMap.put("text", conversation.getText()); conversationMap.put("lastMsgSender", conversation.getLastMsgSender()); - conversationMap.put("lastMsgType", conversation.getLastMsgType()); + conversationMap.put("lastMsgType", conversation.getLastMsgType().getValue()); conversationMap.put("lastMsgId", conversation.getLastMsgId()); conversationMap.put("lastMsgSeqReceived", conversation.getLastMsgSeqReceived()); conversationMap.put("lastTimeNewMsg", conversation.getLastTimeNewMsg()); - conversationMap.put("lastMsgState", conversation.getLastMsgState()); + conversationMap.put("lastMsgState", conversation.getLastMsgState().getValue()); if (conversation.getLastMsg() != null) { JSONObject lastMsgMap = new JSONObject(conversation.getLastMsg()); @@ -190,14 +206,14 @@ public static Map convertMessageToMap(@NonNull Message message) { msgMap.put("sequence", message.getSequence()); msgMap.put("customData", convertJsonToMap(message.getCustomData())); msgMap.put("state", message.getState().getValue()); - msgMap.put("type", message.getType()); + msgMap.put("type", message.getType().getValue()); Map contentMap = new HashMap(); switch (message.getType()) { - case Message.TYPE_TEXT: - case Message.TYPE_LINK: + case TEXT: + case LINK: contentMap.put("content", message.getText()); break; - case Message.TYPE_PHOTO: + case PHOTO: Map photoMap = new HashMap(); photoMap.put("filePath", message.getFilePath()); photoMap.put("fileUrl", message.getFileUrl()); @@ -205,7 +221,7 @@ public static Map convertMessageToMap(@NonNull Message message) { photoMap.put("ratio", message.getImageRatio()); contentMap.put("photo", photoMap); break; - case Message.TYPE_VIDEO: + case VIDEO: Map videoMap = new HashMap(); videoMap.put("filePath", message.getFilePath()); videoMap.put("fileUrl", message.getFileUrl()); @@ -214,14 +230,14 @@ public static Map convertMessageToMap(@NonNull Message message) { videoMap.put("duration", message.getDuration()); contentMap.put("video", videoMap); break; - case Message.TYPE_AUDIO: + case AUDIO: Map audioMap = new HashMap(); audioMap.put("filePath", message.getFilePath()); audioMap.put("fileUrl", message.getFileUrl()); audioMap.put("duration", message.getDuration()); contentMap.put("audio", audioMap); break; - case Message.TYPE_FILE: + case FILE: Map fileMap = new HashMap(); fileMap.put("filePath", message.getFilePath()); fileMap.put("fileUrl", message.getFileUrl()); @@ -229,8 +245,8 @@ public static Map convertMessageToMap(@NonNull Message message) { fileMap.put("fileLength", message.getFileLength()); contentMap.put("file", fileMap); break; - case Message.TYPE_CREATE_CONVERSATION: - case Message.TYPE_RENAME_CONVERSATION: + case CREATE_CONVERSATION: + case RENAME_CONVERSATION: JSONObject messageObject = new JSONObject(message.getText()); contentMap.put("groupName", messageObject.getString("groupName")); contentMap.put("creator", messageObject.getString("creator")); @@ -241,24 +257,24 @@ public static Map convertMessageToMap(@NonNull Message message) { } contentMap.put("participants", participants); break; - case Message.TYPE_LOCATION: + case LOCATION: Map locationMap = new HashMap(); locationMap.put("lat", message.getLatitude()); locationMap.put("lon", message.getLongitude()); contentMap.put("location", locationMap); break; - case Message.TYPE_CONTACT: + case CONTACT: Map contactMap = new HashMap(); contactMap.put("vcard", message.getContact()); contentMap.put("contact", contactMap); break; - case Message.TYPE_STICKER: + case STICKER: Map stickerMap = new HashMap(); stickerMap.put("name", message.getStickerName()); stickerMap.put("category", message.getStickerCategory()); contentMap.put("sticker", stickerMap); break; - case Message.TYPE_NOTIFICATION: + case NOTIFICATION: try { contentMap = convertNotifyContentToMap(new JSONObject(message.getText())); } catch (JSONException e) { @@ -278,26 +294,28 @@ public static Map convertUserToMap(@NonNull User user) { userMap.put("userId", user.getUserId()); userMap.put("name", user.getName()); userMap.put("avatarUrl", user.getAvatarUrl()); - userMap.put("role", user.getRole()); + userMap.put("role", user.getRole().getValue()); return userMap; } public static Map convertNotifyContentToMap(@NonNull JSONObject notifyObject) { - Map contentMap = new java.util.HashMap(); + Map contentMap = new HashMap(); try { int type = notifyObject.getInt("type"); contentMap.put("type", type); switch (type) { case 1: User addUser = new User(notifyObject.getString("addedby")); - addUser.setName(notifyObject.getJSONObject("addedInfo").getString("displayName")); + JSONObject addedInfoObject = notifyObject.optJSONObject("addedInfo"); + addUser.setName(addedInfoObject.optString("displayName", null)); addUser.setAvatarUrl(null); contentMap.put("addedInfo", convertUserToMap(addUser)); contentMap.put("participants", getParticipantsFromNotify(notifyObject.getJSONArray("participants"))); break; case 2: User removeUser = new User(notifyObject.getString("removedBy")); - removeUser.setName(notifyObject.getJSONObject("removedInfo").getString("displayName")); + JSONObject removedInfoObject = notifyObject.optJSONObject("removedInfo"); + removeUser.setName(removedInfoObject.optString("displayName", null)); removeUser.setAvatarUrl(null); contentMap.put("removedInfo", convertUserToMap(removeUser)); contentMap.put("participants", getParticipantsFromNotify(notifyObject.getJSONArray("participants"))); @@ -316,6 +334,36 @@ public static Map convertNotifyContentToMap(@NonNull JSONObject notifyObject) { return contentMap; } + public static Map convertChatProfileToMap(@NonNull ChatProfile chatProfile) { + Map chatProfileMap = new HashMap(); + chatProfileMap.put("id", chatProfile.getId()); + chatProfileMap.put("background", chatProfile.getBackground()); + chatProfileMap.put("hour", chatProfile.getBusinessHour()); + chatProfileMap.put("language", chatProfile.getLanguage()); + chatProfileMap.put("logo_url", chatProfile.getLogoUrl()); + chatProfileMap.put("popup_answer_url", chatProfile.getPopupAnswerUrl()); + chatProfileMap.put("portal", chatProfile.getPortalId()); + List queues = chatProfile.getQueues(); + List queueList = new ArrayList(); + for (int i = 0; i < queues.size(); i++) { + queueList.add(convertQueueToMap(queues.get(i))); + } + chatProfileMap.put("queues", queueList); + chatProfileMap.put("auto_create_ticket", chatProfile.isAutoCreateTicket()); + chatProfileMap.put("enabled", chatProfile.isEnabledBusinessHour()); + chatProfileMap.put("facebook_as_livechat", chatProfile.isFacebookAsLivechat()); + chatProfileMap.put("project_id", chatProfile.getProjectId()); + chatProfileMap.put("zalo_as_livechat", chatProfile.isZaloAsLivechat()); + return chatProfileMap; + } + + public static Map convertQueueToMap(@NonNull Queue queue) { + Map queueMap = new HashMap(); + queueMap.put("id", queue.getId()); + queueMap.put("name", queue.getName()); + return queueMap; + } + public static List getParticipantsFromNotify(@NonNull JSONArray participantsArray) { List resultArray = new ArrayList(); try { @@ -326,7 +374,7 @@ public static List getParticipantsFromNotify(@NonNull JSONArray participantsArra User user = new User(userObject.getString("user")); user.setName(userObject.optString("displayName", null)); user.setAvatarUrl(userObject.optString("avatarUrl", null)); - user.setRole(userObject.optString("role", null)); + user.setRole(Role.getRole(userObject.optString("role"))); resultArray.add(convertUserToMap(user)); } @@ -337,36 +385,63 @@ public static List getParticipantsFromNotify(@NonNull JSONArray participantsArra } public static void getConversation(@NonNull com.stringee.StringeeClient client, @NonNull String convId, @NonNull final CallbackListener callbackListener) { + Handler handler = new Handler(Looper.getMainLooper()); client.getConversation(convId, new CallbackListener() { @Override public void onSuccess(final Conversation conversation) { - callbackListener.onSuccess(conversation); + handler.post(new Runnable() { + @Override + public void run() { + callbackListener.onSuccess(conversation); + } + }); } @Override public void onError(final StringeeError error) { super.onError(error); - callbackListener.onError(error); + handler.post(new Runnable() { + @Override + public void run() { + callbackListener.onError(error); + } + }); } }); } public static void getLastMessage(@NonNull final com.stringee.StringeeClient client, @NonNull String convId, @NonNull final CallbackListener callbackListener) { + Handler handler = new Handler(Looper.getMainLooper()); getConversation(client, convId, new CallbackListener() { @Override public void onSuccess(Conversation conversation) { - conversation.getLastMessages(client, 1, true, true, false, new CallbackListener>() { + handler.post(new Runnable() { @Override - public void onSuccess(List messages) { - if (messages != null && messages.size() > 0) { - callbackListener.onSuccess(messages.get(0)); - } - } - - @Override - public void onError(StringeeError stringeeError) { - super.onError(stringeeError); - callbackListener.onError(stringeeError); + public void run() { + conversation.getLastMessages(client, 1, true, true, false, new CallbackListener>() { + @Override + public void onSuccess(List messages) { + handler.post(new Runnable() { + @Override + public void run() { + if (messages != null && messages.size() > 0) { + callbackListener.onSuccess(messages.get(0)); + } + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + handler.post(new Runnable() { + @Override + public void run() { + callbackListener.onError(stringeeError); + } + }); + } + }); } }); } @@ -374,35 +449,88 @@ public void onError(StringeeError stringeeError) { @Override public void onError(final StringeeError error) { super.onError(error); - callbackListener.onError(error); + handler.post(new Runnable() { + @Override + public void run() { + callbackListener.onError(error); + } + }); } }); } public static void getMessage(@NonNull final com.stringee.StringeeClient client, @NonNull String convId, @NonNull final String[] msgId, @NonNull final CallbackListener callbackListener) { + Handler handler = new Handler(Looper.getMainLooper()); getConversation(client, convId, new CallbackListener() { @Override public void onSuccess(Conversation conversation) { - conversation.getMessages(client, msgId, new CallbackListener>() { + handler.post(new Runnable() { @Override - public void onSuccess(List messages) { - if (messages != null && messages.size() > 0) { - callbackListener.onSuccess(messages.get(0)); - } + public void run() { + conversation.getMessages(client, msgId, new CallbackListener>() { + @Override + public void onSuccess(List messages) { + if (messages != null && messages.size() > 0) { + callbackListener.onSuccess(messages.get(0)); + } + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + callbackListener.onError(stringeeError); + } + }); } + }); + } + @Override + public void onError(final StringeeError error) { + super.onError(error); + handler.post(new Runnable() { @Override - public void onError(StringeeError stringeeError) { - super.onError(stringeeError); - callbackListener.onError(stringeeError); + public void run() { + callbackListener.onError(error); } }); } + }); + } + public static void getChatRequest(@NonNull final com.stringee.StringeeClient client, @NonNull final String convId, @NonNull CallbackListener callbackListener) { + Handler handler = new Handler(Looper.getMainLooper()); + client.getChatRequests(new CallbackListener>() { @Override - public void onError(final StringeeError error) { - super.onError(error); - callbackListener.onError(error); + public void onSuccess(List chatRequestList) { + handler.post(new Runnable() { + @Override + public void run() { + ChatRequest finalChatRequest = null; + for (int i = 0; i < chatRequestList.size(); i++) { + ChatRequest chatRequest = chatRequestList.get(i); + if (chatRequest.getConvId().equals(convId)) { + finalChatRequest = chatRequest; + } + } + if (finalChatRequest != null) { + callbackListener.onSuccess(finalChatRequest); + } else { + callbackListener.onError(new StringeeError(-3, "No chat request found")); + } + } + }); + } + + @Override + public void onError(StringeeError stringeeError) { + super.onError(stringeeError); + handler.post(new Runnable() { + @Override + public void run() { + callbackListener.onError(stringeeError); + } + }); } }); } diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index f1ad311..a2bb01a 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -24,6 +24,12 @@ if (flutterVersionName == null) { apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" +def keystoreProperties = new Properties() +def keystorePropertiesFile = rootProject.file('key.properties') +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) +} + android { compileSdkVersion 30 @@ -41,11 +47,20 @@ android { testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } + signingConfigs { + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null + storePassword keystoreProperties['storePassword'] + } + } + buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig signingConfigs.debug + signingConfig signingConfigs.release minifyEnabled true useProguard true diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 1de9df0..d8d0c49 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,6 @@ - - @@ -10,9 +8,6 @@ - - - + android:windowSoftInputMode="adjustPan">