From d0a4530314a60462e93a603a7d5e2c87d7355a18 Mon Sep 17 00:00:00 2001 From: hrxiang Date: Fri, 3 Mar 2023 15:17:40 +0800 Subject: [PATCH] New add --- CHANGELOG.md | 4 +- android/build.gradle | 2 +- .../listener/OnListenerForService.java | 30 +++++++++++ .../flutter_openim_sdk/manager/IMManager.java | 15 ++++++ lib/flutter_openim_sdk.dart | 1 + lib/src/enum/listener_type.dart | 27 +++++----- lib/src/listener/listener_for_service.dart | 38 ++++++++++++++ lib/src/logger.dart | 9 ++++ lib/src/manager/im_manager.dart | 51 ++++++++++++++++++- 9 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 android/src/main/java/io/openim/flutter_openim_sdk/listener/OnListenerForService.java create mode 100644 lib/src/listener/listener_for_service.dart create mode 100644 lib/src/logger.dart diff --git a/CHANGELOG.md b/CHANGELOG.md index 98829dc..c2642c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ -## 2.3.5+2 +## 2.3.5+3 - Fix bug for signaling +- Add networkChanged method +- Add setListenerForService method ## 2.3.5+2 diff --git a/android/build.gradle b/android/build.gradle index 2967087..d8f105e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -34,5 +34,5 @@ android { } } dependencies { - api 'io.openim:core-sdk:2.3.5-t27@aar' + api 'io.openim:core-sdk:2.3.5-t30@aar' } \ No newline at end of file diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnListenerForService.java b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnListenerForService.java new file mode 100644 index 0000000..882edb7 --- /dev/null +++ b/android/src/main/java/io/openim/flutter_openim_sdk/listener/OnListenerForService.java @@ -0,0 +1,30 @@ +package io.openim.flutter_openim_sdk.listener; + +import io.openim.flutter_openim_sdk.util.CommonUtil; + +public class OnListenerForService implements open_im_sdk_callback.OnListenerForService { + @Override + public void onFriendApplicationAccepted(String s) { + CommonUtil.emitEvent("listenerForService", "onFriendApplicationAccepted", s); + } + + @Override + public void onFriendApplicationAdded(String s) { + CommonUtil.emitEvent("listenerForService", "onFriendApplicationAdded", s); + } + + @Override + public void onGroupApplicationAccepted(String s) { + CommonUtil.emitEvent("listenerForService", "onGroupApplicationAccepted", s); + } + + @Override + public void onGroupApplicationAdded(String s) { + CommonUtil.emitEvent("listenerForService", "onGroupApplicationAdded", s); + } + + @Override + public void onRecvNewMessage(String s) { + CommonUtil.emitEvent("listenerForService", "onRecvNewMessage", s); + } +} diff --git a/android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java b/android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java index 3bca8d6..02f4406 100644 --- a/android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java +++ b/android/src/main/java/io/openim/flutter_openim_sdk/manager/IMManager.java @@ -4,6 +4,7 @@ import io.flutter.plugin.common.MethodCall; import io.flutter.plugin.common.MethodChannel; import io.openim.flutter_openim_sdk.listener.OnBaseListener; import io.openim.flutter_openim_sdk.listener.OnConnListener; +import io.openim.flutter_openim_sdk.listener.OnListenerForService; import io.openim.flutter_openim_sdk.util.CommonUtil; import open_im_sdk.Open_im_sdk; @@ -70,4 +71,18 @@ public class IMManager extends BaseManager { value(methodCall, "isBackground") ); } + + public void networkChanged(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.networkChanged( + new OnBaseListener(result, methodCall), + value(methodCall, "operationID") + ); + } + + public void setListenerForService(MethodCall methodCall, MethodChannel.Result result) { + Open_im_sdk.setListenerForService(new OnListenerForService()); + + result.success(null); + } + } diff --git a/lib/flutter_openim_sdk.dart b/lib/flutter_openim_sdk.dart index cbbe50a..4741598 100644 --- a/lib/flutter_openim_sdk.dart +++ b/lib/flutter_openim_sdk.dart @@ -16,6 +16,7 @@ export 'src/listener/conversation_listener.dart'; export 'src/listener/custom_business_listener.dart'; export 'src/listener/friendship_listener.dart'; export 'src/listener/group_listener.dart'; +export 'src/listener/listener_for_service.dart'; export 'src/listener/message_kv_info_listener.dart'; export 'src/listener/msg_send_progress_listener.dart'; export 'src/listener/organization_listener.dart'; diff --git a/lib/src/enum/listener_type.dart b/lib/src/enum/listener_type.dart index 90d7968..33e3cd4 100644 --- a/lib/src/enum/listener_type.dart +++ b/lib/src/enum/listener_type.dart @@ -1,16 +1,17 @@ /// callback类型 class ListenerType { - static final simpleMsgListener = 'simpleMsgListener'; - static final connectListener = 'connectListener'; - static final userListener = 'userListener'; - static final groupListener = 'groupListener'; - static final advancedMsgListener = 'advancedMsgListener'; - static final conversationListener = 'conversationListener'; - static final friendListener = 'friendListener'; - static final signalingListener = 'signalingListener'; - static final msgSendProgressListener = "msgSendProgressListener"; - static final workMomentsListener = "workMomentsListener"; - static final organizationListener = "organizationListener"; - static final customBusinessListener = "customBusinessListener"; - static final messageKvInfoListener = "messageKvInfoListener"; + static const simpleMsgListener = 'simpleMsgListener'; + static const connectListener = 'connectListener'; + static const userListener = 'userListener'; + static const groupListener = 'groupListener'; + static const advancedMsgListener = 'advancedMsgListener'; + static const conversationListener = 'conversationListener'; + static const friendListener = 'friendListener'; + static const signalingListener = 'signalingListener'; + static const msgSendProgressListener = "msgSendProgressListener"; + static const workMomentsListener = "workMomentsListener"; + static const organizationListener = "organizationListener"; + static const customBusinessListener = "customBusinessListener"; + static const messageKvInfoListener = "messageKvInfoListener"; + static const listenerForService = "listenerForService"; } diff --git a/lib/src/listener/listener_for_service.dart b/lib/src/listener/listener_for_service.dart new file mode 100644 index 0000000..3102af0 --- /dev/null +++ b/lib/src/listener/listener_for_service.dart @@ -0,0 +1,38 @@ +import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; + +/// 好友关系监听 +class OnListenerForService { + Function(FriendApplicationInfo i)? onFriendApplicationAdded; + Function(FriendApplicationInfo i)? onFriendApplicationAccepted; + Function(GroupApplicationInfo info)? onGroupApplicationAccepted; + Function(GroupApplicationInfo info)? onGroupApplicationAdded; + Function(Message msg)? onRecvNewMessage; + + OnListenerForService({ + this.onFriendApplicationAdded, + this.onFriendApplicationAccepted, + this.onGroupApplicationAccepted, + this.onGroupApplicationAdded, + this.onRecvNewMessage, + }); + + void friendApplicationAccepted(FriendApplicationInfo u) { + onFriendApplicationAccepted?.call(u); + } + + void friendApplicationAdded(FriendApplicationInfo u) { + onFriendApplicationAdded?.call(u); + } + + void groupApplicationAccepted(GroupApplicationInfo info) { + onGroupApplicationAccepted?.call(info); + } + + void groupApplicationAdded(GroupApplicationInfo info) { + onGroupApplicationAdded?.call(info); + } + + void recvNewMessage(Message msg) { + onRecvNewMessage?.call(msg); + } +} diff --git a/lib/src/logger.dart b/lib/src/logger.dart new file mode 100644 index 0000000..1ec303e --- /dev/null +++ b/lib/src/logger.dart @@ -0,0 +1,9 @@ +import 'dart:developer'; + +/// print full log +class Logger { + // Sample of abstract logging function + static void print(String text) { + log('** $text', name: 'flutter_openim_sdk'); + } +} diff --git a/lib/src/manager/im_manager.dart b/lib/src/manager/im_manager.dart index 34a65b2..5489092 100644 --- a/lib/src/manager/im_manager.dart +++ b/lib/src/manager/im_manager.dart @@ -2,6 +2,7 @@ import 'dart:developer'; import 'package:flutter/services.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; +import 'package:flutter_openim_sdk/src/logger.dart'; class IMManager { MethodChannel _channel; @@ -17,6 +18,7 @@ class IMManager { late OrganizationManager organizationManager; late OnConnectListener _connectListener; + OnListenerForService? _listenerForService; late String uid; late UserInfo uInfo; bool isLogined = false; @@ -39,7 +41,7 @@ class IMManager { void _addNativeCallback(MethodChannel _channel) { _channel.setMethodCallHandler((call) { try { - log('Flutter : $call'); + Logger.print('Flutter : $call'); if (call.method == ListenerType.connectListener) { String type = call.arguments['type']; switch (type) { @@ -353,9 +355,39 @@ class IMManager { messageManager.messageKvInfoListener?.messageKvInfoChanged(list); break; } + } else if (call.method == ListenerType.listenerForService) { + String type = call.arguments['type']; + String data = call.arguments['data']; + switch (type) { + case 'onFriendApplicationAccepted': + final u = Utils.toObj( + data, (map) => FriendApplicationInfo.fromJson(map)); + _listenerForService?.friendApplicationAccepted(u); + break; + case 'onFriendApplicationAdded': + final u = Utils.toObj( + data, (map) => FriendApplicationInfo.fromJson(map)); + _listenerForService?.friendApplicationAdded(u); + break; + case 'onGroupApplicationAccepted': + final i = Utils.toObj( + data, (map) => GroupApplicationInfo.fromJson(map)); + _listenerForService?.groupApplicationAccepted(i); + break; + case 'onGroupApplicationAdded': + final i = Utils.toObj( + data, (map) => GroupApplicationInfo.fromJson(map)); + _listenerForService?.groupApplicationAdded(i); + break; + case 'onRecvNewMessage': + final msg = Utils.toObj(data, (map) => Message.fromJson(map)); + _listenerForService?.recvNewMessage(msg); + break; + } } } catch (error, stackTrace) { - log("回调失败了。$error ${call.method} ${call.arguments['type']} ${call.arguments['data']} $stackTrace"); + Logger.print( + "回调失败了。${call.method} ${call.arguments['type']} ${call.arguments['data']} $error $stackTrace"); } return Future.value(null); }); @@ -516,6 +548,21 @@ class IMManager { 'operationID': Utils.checkOperationID(operationID), })); + /// 网络改变 + Future networkChanged({ + String? operationID, + }) => + _channel.invokeMethod( + 'networkChanged', + _buildParam({ + 'operationID': Utils.checkOperationID(operationID), + })); + + Future setListenerForService(OnListenerForService listener) { + this._listenerForService = listener; + return _channel.invokeMethod('setListenerForService', _buildParam({})); + } + MethodChannel get channel => _channel; static Map _buildParam(Map param) {