From aed4a9602b4cb7f42a82dfd8adf6c51bd3f5b654 Mon Sep 17 00:00:00 2001 From: Aamir-iMac Date: Mon, 29 May 2023 13:39:30 +0300 Subject: [PATCH] Changes On iOS --- lib/classes/chat_call_kit.dart | 10 ++++-- lib/classes/navigationService.dart | 2 +- lib/classes/notifications.dart | 15 +++++---- lib/main.dart | 2 ++ lib/models/chat/incoming_call_model.dart | 4 +++ lib/provider/chat_call_provider.dart | 32 ++++++++++++------- lib/provider/chat_provider_model.dart | 4 ++- .../chat/call/chat_incoming_call_screen.dart | 16 ++++------ lib/ui/chat/chat_home.dart | 1 + lib/ui/landing/dashboard_screen.dart | 3 +- 10 files changed, 57 insertions(+), 32 deletions(-) diff --git a/lib/classes/chat_call_kit.dart b/lib/classes/chat_call_kit.dart index b1846ba..802a746 100644 --- a/lib/classes/chat_call_kit.dart +++ b/lib/classes/chat_call_kit.dart @@ -77,6 +77,7 @@ class ChatVoipCall { "callerDetails": callerData.toJson(), 'isIncomingCall': true, 'isUserOnline': isUserOnline, + 'callType' : data!.data["callType"] }, android: const AndroidParams( isCustomNotification: true, @@ -178,7 +179,8 @@ class ChatVoipCall { } Future declineCall() async { - if (isUserOnline) { + if (isUserOnline && chatHubConnection != null) { + print("Connection State ===" + chatHubConnection.state.toString()); if (chatHubConnection.state == HubConnectionState.Connected) { if (sessionData?.extra != null) { chatHubConnection.invoke("HangUpAsync", args: [ @@ -207,7 +209,11 @@ class ChatVoipCall { ], ); FlutterCallkitIncoming.endCall(sessionData.id!); - hc.stop(); + if (!isUserOnline) { + hc.stop(); + } else { + chatHubConnection = hc; + } } } } diff --git a/lib/classes/navigationService.dart b/lib/classes/navigationService.dart index e79e546..f193c9b 100644 --- a/lib/classes/navigationService.dart +++ b/lib/classes/navigationService.dart @@ -10,7 +10,7 @@ void setupLocator() { } class NavigationService { - final GlobalKey navigatorKey = new GlobalKey(); + final GlobalKey navigatorKey = GlobalKey(); static Future navigateTo(String routeName) { var key = locator().navigatorKey; diff --git a/lib/classes/notifications.dart b/lib/classes/notifications.dart index 2ae84be..3abecc6 100644 --- a/lib/classes/notifications.dart +++ b/lib/classes/notifications.dart @@ -114,12 +114,14 @@ class AppNotifications { } void _handleMessage(RemoteMessage message) { - print("res: --------------"); + print("res: ------handle message--------"); + logger.w(message); Utils.saveStringFromPrefs("isAppOpendByChat", "false"); if (message.data.isNotEmpty && message.data["messageType"] == 'chat') { Utils.saveStringFromPrefs("isAppOpendByChat", "true"); Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); } else if (message.data.isNotEmpty && message.data["messageType"] == 'call') { + logger.d(message.data); ChatVoipCall().showCallkitIncoming(uuid: const Uuid().v4(), data: message); } } @@ -133,18 +135,17 @@ class AppNotifications { } } -AndroidNotificationChannel channel = const AndroidNotificationChannel( - "high_importance_channel", - "High Importance Notifications", - importance: Importance.high, -); Future backgroundMessageHandler(RemoteMessage message) async { - await Firebase.initializeApp(); + + //await Firebase.initializeApp(); + print("res: ------background message--------"); + logger.w(message); if (message.data.isNotEmpty && message.data["messageType"] == 'chat') { Utils.saveStringFromPrefs("isAppOpendByChat", "false"); Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); } else if (message.data.isNotEmpty && message.data["messageType"] == 'call') { + logger.d(message.data); ChatVoipCall().showCallkitIncoming(uuid: const Uuid().v4(), data: message, background: true); } } diff --git a/lib/main.dart b/lib/main.dart index b8b2682..900a6d3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -20,9 +20,11 @@ import 'package:mohem_flutter_app/ui/marathon/marathon_provider.dart'; import 'package:month_year_picker/month_year_picker.dart'; import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; +import 'package:signalr_netcore/hub_connection.dart'; import 'package:sizer/sizer.dart'; final GetIt locator = GetIt.instance; +late HubConnection chatHubConnection; Logger logger = Logger( // filter: null, // Use the default LogFilter (-> only log in debug mode) printer: PrettyPrinter( diff --git a/lib/models/chat/incoming_call_model.dart b/lib/models/chat/incoming_call_model.dart index f49144f..9494505 100644 --- a/lib/models/chat/incoming_call_model.dart +++ b/lib/models/chat/incoming_call_model.dart @@ -140,11 +140,13 @@ class Extra { LoginDetails? loginDetails; bool? isIncomingCall; CallerDetails? callerDetails; + String? callType; Extra({ this.loginDetails, this.isIncomingCall, this.callerDetails, + this.callType, }); factory Extra.fromRawJson(String str) => Extra.fromJson(json.decode(str)); @@ -154,12 +156,14 @@ class Extra { factory Extra.fromJson(Map json) => Extra( loginDetails: json["loginDetails"] == null ? null : LoginDetails.fromJson(json["loginDetails"]), isIncomingCall: json["isIncomingCall"], + callType: json["callType"], callerDetails: json["callerDetails"] == null ? null : CallerDetails.fromJson(json["callerDetails"]), ); Map toJson() => { "loginDetails": loginDetails?.toJson(), "isIncomingCall": isIncomingCall, + "callType": callType, "callerDetails": callerDetails?.toJson(), }; } diff --git a/lib/provider/chat_call_provider.dart b/lib/provider/chat_call_provider.dart index 13aa3e1..957c2e6 100644 --- a/lib/provider/chat_call_provider.dart +++ b/lib/provider/chat_call_provider.dart @@ -14,7 +14,6 @@ import 'package:mohem_flutter_app/models/chat/get_single_user_chat_list_model.da import 'package:mohem_flutter_app/models/chat/webrtc_payloads.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/ui/chat/call/chat_incoming_call_screen.dart'; -import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart'; import 'package:signalr_netcore/hub_connection.dart'; class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { @@ -210,10 +209,13 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { isLoudSpeaker = false; isIncomingCall = false; isOutGoingCall = false; - if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) { - print("------------------ PC Stopped ----------------------------"); - _pc.close(); - _pc.dispose(); + isAudioCall = false; + if (isCallConnected) { + if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) { + print("------------------ PC Stopped ----------------------------"); + _pc.close(); + _pc.dispose(); + } } remoteRenderer!.dispose(); localVideoRenderer!.dispose(); @@ -240,10 +242,11 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { isCamOff = false; isMicOff = false; isLoudSpeaker = false; - - if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) { - _pc.close(); - _pc.dispose(); + if (isCallConnected) { + if (_pc.connectionState == RTCPeerConnectionState.RTCPeerConnectionStateConnected) { + _pc.close(); + _pc.dispose(); + } } remoteRenderer!.dispose(); localVideoRenderer!.dispose(); @@ -255,6 +258,7 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { } isOutGoingCall = false; isIncomingCall = false; + isAudioCall = false; // await initStreams().whenComplete(() => notifyListeners()); return true; } @@ -569,18 +573,24 @@ class ChatCallProvider with ChangeNotifier, DiagnosticableTreeMixin { Future startIncomingCallViaKit({bool isVCall = true, required var inCallData}) async { Utils.saveStringFromPrefs("isIncomingCall", "false"); - isVideoCall = isVCall; + if(isVCall) { + isVideoCall = isVCall; + }else{ + isAudioCall = true; + } await initStreams(); isIncomingCall = true; incomingCallData = SingleUserChatModel.fromJson(inCallData); loudOn(); + // notifyListeners(); } void connectIncomingCall() { invoke(invokeMethod: "answerCallAsync", currentUserID: AppState().getchatUserDetails!.response!.id!, targetUserID: incomingCallData.targetUserId!); isIncomingCallLoader = false; isIncomingCall = true; - isVideoCall = true; + // isVideoCall = true; + notifyListeners(); } } diff --git a/lib/provider/chat_provider_model.dart b/lib/provider/chat_provider_model.dart index bde5c42..bf4bec2 100644 --- a/lib/provider/chat_provider_model.dart +++ b/lib/provider/chat_provider_model.dart @@ -422,7 +422,9 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin { ); } } - setMsgTune(); + if (data.first.chatEventId != 3) { + setMsgTune(); + } if (isChatScreenActive && data.first.currentUserId == receiverID) { userChatHistory.insert(0, data.first); } else { diff --git a/lib/ui/chat/call/chat_incoming_call_screen.dart b/lib/ui/chat/call/chat_incoming_call_screen.dart index f7e188b..0dbec81 100644 --- a/lib/ui/chat/call/chat_incoming_call_screen.dart +++ b/lib/ui/chat/call/chat_incoming_call_screen.dart @@ -17,6 +17,8 @@ import 'package:mohem_flutter_app/provider/chat_call_provider.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:provider/provider.dart'; +bool isCallConnected = false; + class StartCallPage extends StatefulWidget { @override _StartCallPageState createState() => _StartCallPageState(); @@ -39,12 +41,6 @@ class _StartCallPageState extends State { super.dispose(); } - @override - void didChangeDependencies() { - // TODO: implement didChangeDependencies - super.didChangeDependencies(); - } - void startCall() async { IncomingCallModel? sessionData; dynamic calls = await FlutterCallkitIncoming.activeCalls(); @@ -59,18 +55,20 @@ class _StartCallPageState extends State { print("====== Processing Incoming Call in Online State ========="); } - await cProv.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson()); + await cProv.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson(), isVCall: sessionData.extra!.callType == "video" ? true : false); cProv.init(); + isCallConnected = true; } else { if (kDebugMode) { print("====== Processing Incoming Call ========="); } cProv.isUserOnline = provider.isUserOnline; - await cProv.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson()); + await cProv.startIncomingCallViaKit(inCallData: sessionData!.extra!.callerDetails!.toJson(), isVCall: sessionData.extra!.callType == "video" ? true : false); try { AppState().setchatUserDetails = UserAutoLoginModel(response: Response.fromJson(sessionData.extra!.loginDetails!.toJson()), errorResponses: null); await provider.buildHubConnection(context: context, ccProvider: cProv).whenComplete(() { cProv.init(); + isCallConnected = true; }); } catch (e) { logger.w(e); @@ -211,7 +209,7 @@ class _StartCallPageState extends State { ), 10.height, Text( - provider.outGoingCallData.receiverName!, + provider.incomingCallData.targetUserName!, style: const TextStyle( fontSize: 21, decoration: TextDecoration.none, diff --git a/lib/ui/chat/chat_home.dart b/lib/ui/chat/chat_home.dart index c557bb1..648e758 100644 --- a/lib/ui/chat/chat_home.dart +++ b/lib/ui/chat/chat_home.dart @@ -7,6 +7,7 @@ import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/provider/chat_call_provider.dart'; import 'package:mohem_flutter_app/provider/chat_provider_model.dart'; import 'package:mohem_flutter_app/ui/chat/chat_home_screen.dart'; diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index 3a65791..e7fc4a3 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -16,6 +16,7 @@ import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; +import 'package:mohem_flutter_app/main.dart'; import 'package:mohem_flutter_app/models/offers_and_discounts/get_offers_list.dart'; import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/provider/chat_call_provider.dart'; @@ -34,7 +35,7 @@ import 'package:provider/provider.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:signalr_netcore/signalr_client.dart'; -late HubConnection chatHubConnection; + class DashboardScreen extends StatefulWidget { DashboardScreen({Key? key}) : super(key: key);