From 8c96de866bd9330364d75ab01dcedaad426853a3 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Sun, 13 Mar 2022 09:46:41 +0300 Subject: [PATCH] updates --- lib/pages/livecare/incoming_call.dart | 8 +- lib/pages/livecare/video-call-web-page.dart | 17 ++- .../appointment_services/GetDoctorsList.dart | 1 + lib/uitl/push-notification-handler.dart | 139 ++++++++---------- 4 files changed, 80 insertions(+), 85 deletions(-) diff --git a/lib/pages/livecare/incoming_call.dart b/lib/pages/livecare/incoming_call.dart index ec832e96..d81aaec5 100644 --- a/lib/pages/livecare/incoming_call.dart +++ b/lib/pages/livecare/incoming_call.dart @@ -234,12 +234,12 @@ class _IncomingCallState extends State with SingleTickerProviderSt await _controller.dispose(); await Navigator.of(context).pushReplacement( MaterialPageRoute( - fullscreenDialog: true, + // fullscreenDialog: true, builder: (BuildContext context) { - if (openCallInWeb) + // if (openCallInWeb) return VideoCallWebPage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); - else - return CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); + // else + // return CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); }, ), ); diff --git a/lib/pages/livecare/video-call-web-page.dart b/lib/pages/livecare/video-call-web-page.dart index 2aa802b0..9cc20020 100644 --- a/lib/pages/livecare/video-call-web-page.dart +++ b/lib/pages/livecare/video-call-web-page.dart @@ -1,3 +1,4 @@ +import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -6,7 +7,7 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart'; class VideoCallWebPage extends StatelessWidget{ final GlobalKey webViewKey = GlobalKey(); - InAppWebViewController webViewController; + // InAppWebViewController webViewController; InAppWebViewController controller; URLRequest request; @@ -51,7 +52,7 @@ class VideoCallWebPage extends StatelessWidget{ ), extendBodyBehindAppBar: true, extendBody: false, - backgroundColor: Colors.white, + // backgroundColor: Colors.white, body: Column( children: [ SizedBox(height: MediaQuery.of(context).viewPadding.top), @@ -82,7 +83,10 @@ class VideoCallWebPage extends StatelessWidget{ ); } - onWebViewCreated(InAppWebViewController controller) => this.controller = controller; + onWebViewCreated(InAppWebViewController controller) { + this.controller = controller; + LandingPage.isOpenCallPage = true; + } onConsoleMessage(controller, ConsoleMessage consoleMessage){ print(consoleMessage); @@ -95,7 +99,12 @@ class VideoCallWebPage extends StatelessWidget{ onLoadStart(InAppWebViewController controller, Uri url) { print(url); if(url.toString().toLowerCase().contains("endcallpage")){ - Navigator.pop(webViewKey.currentContext); + LandingPage.isOpenCallPage = false; + if(LandingPage.isOpenCallPage == true) { + print("END CALL!!!"); + // controller.goBack(); + Navigator.pop(webViewKey.currentContext); + } } } diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index e9613628..383af15b 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -698,6 +698,7 @@ class DoctorsListService extends BaseService { "ProjectID": projectID, "ServiceID": serviceID, "AcceptedBy": docID, + "IsFlutter": true, "DeviceToken": deviceToken, "Latitude": lat, "Longitude": long, diff --git a/lib/uitl/push-notification-handler.dart b/lib/uitl/push-notification-handler.dart index da34b296..b9fba256 100644 --- a/lib/uitl/push-notification-handler.dart +++ b/lib/uitl/push-notification-handler.dart @@ -1,134 +1,124 @@ - import 'dart:convert'; import 'dart:io'; + import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/LiveCare/IncomingCallData.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/livecare/incoming_call.dart'; import 'package:diplomaticquarterapp/uitl/app-permissions.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:huawei_push/huawei_push.dart' as h_push; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart' as fir; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_hms_gms_availability/flutter_hms_gms_availability.dart'; -import 'package:shared_preferences/shared_preferences.dart'; +import 'package:huawei_push/huawei_push.dart' as h_push; import 'app_shared_preferences.dart'; import 'navigation_service.dart'; - // |--> Push Notification Background -Future backgroundMessageHandler(dynamic message) async{ - +Future backgroundMessageHandler(dynamic message) async { fir.RemoteMessage message_; - if(message is h_push.RemoteMessage){ // if huawei remote message convert it to Firebase Remote Message + if (message is h_push.RemoteMessage) { + // if huawei remote message convert it to Firebase Remote Message message_ = toFirebaseRemoteMessage(message); } - if (message_.data != null && message_.data['is_call'] == 'true') { - _incomingCall(message_.data); + if (message.data != null && message.data['is_call'] == 'true') { + _incomingCall(message.data); return; } - h_push.Push.localNotification({ - h_push.HMSLocalNotificationAttr.TITLE: 'Background Message', - h_push.HMSLocalNotificationAttr.MESSAGE: "By: BackgroundMessageHandler" - }); - + h_push.Push.localNotification({h_push.HMSLocalNotificationAttr.TITLE: 'Background Message', h_push.HMSLocalNotificationAttr.MESSAGE: "By: BackgroundMessageHandler"}); } // Push Notification Background <--| - - -RemoteMessage toFirebaseRemoteMessage(h_push.RemoteMessage message){ +RemoteMessage toFirebaseRemoteMessage(h_push.RemoteMessage message) { final payload_data = jsonDecode(message.data); final fire_message = RemoteMessage( - from: message.from, - collapseKey: message.collapseKey, - data: payload_data['data'], - messageId: message.messageId, - sentTime: DateTime.fromMillisecondsSinceEpoch(message.sentTime*1000), - ttl: message.ttl, - category: null, - messageType: message.type, - notification: RemoteNotification( - title: message.notification.title, - titleLocArgs: (message.notification.titleLocalizationArgs ?? []).map((e) => e.toString()).toList(), - titleLocKey: message.notification.titleLocalizationKey, - body: message.notification.body, - bodyLocArgs: (message.notification.bodyLocalizationArgs ?? []).map((e) => e.toString()).toList(), - bodyLocKey: message.notification.bodyLocalizationKey, - android: AndroidNotification( - channelId: message.notification.channelId, - clickAction: message.notification.clickAction, - color: message.notification.color, - count: null, - imageUrl: message.notification.imageUrl.path, - link: message.notification.link.path, - smallIcon: message.notification.icon, - sound: message.notification.sound, - ticker: message.notification.ticker, - tag: message.notification.tag, - ), - ) - ); + from: message.from, + collapseKey: message.collapseKey, + data: payload_data['data'], + messageId: message.messageId, + sentTime: DateTime.fromMillisecondsSinceEpoch(message.sentTime * 1000), + ttl: message.ttl, + category: null, + messageType: message.type, + notification: RemoteNotification( + title: message.notification.title, + titleLocArgs: (message.notification.titleLocalizationArgs ?? []).map((e) => e.toString()).toList(), + titleLocKey: message.notification.titleLocalizationKey, + body: message.notification.body, + bodyLocArgs: (message.notification.bodyLocalizationArgs ?? []).map((e) => e.toString()).toList(), + bodyLocKey: message.notification.bodyLocalizationKey, + android: AndroidNotification( + channelId: message.notification.channelId, + clickAction: message.notification.clickAction, + color: message.notification.color, + count: null, + imageUrl: message.notification.imageUrl.path, + link: message.notification.link.path, + smallIcon: message.notification.icon, + sound: message.notification.sound, + ticker: message.notification.ticker, + tag: message.notification.tag, + ), + )); return fire_message; } -_incomingCall(Map data) async{ +_incomingCall(Map data) async { + print("_incomingCall CALLED!!!!!! $data"); + // print(ModalRoute.of(currentContext).settings.name); LandingPage.incomingCallData = IncomingCallData.fromJson(data); - if(LandingPage.isOpenCallPage == false){ + if (LandingPage.isOpenCallPage == false) { LandingPage.isOpenCallPage = true; final permited = await AppPermission.askVideoCallPermission(currentContext); - if(permited) - await NavigationService.navigateToPage(IncomingCall(incomingCallData: LandingPage.incomingCallData)); - LandingPage.isOpenCallPage = false; + if (permited) await NavigationService.navigateToPage(IncomingCall(incomingCallData: LandingPage.incomingCallData)); + // LandingPage.isOpenCallPage = false; } await Future.delayed(Duration(milliseconds: 500)); await AppSharedPreferences().remove('call_data'); } -class PushNotificationHandler{ +class PushNotificationHandler { final BuildContext context; static PushNotificationHandler _instance; - PushNotificationHandler(this.context){ + PushNotificationHandler(this.context) { PushNotificationHandler._instance = this; } static PushNotificationHandler getInstance() => _instance; - init() async{ + init() async { if (Platform.isIOS) { final permission = await FirebaseMessaging.instance.requestPermission(); - if(permission.authorizationStatus == AuthorizationStatus.denied) - return; + if (permission.authorizationStatus == AuthorizationStatus.denied) return; } - if(Platform.isAndroid && (await FlutterHmsGmsAvailability.isHmsAvailable)) { // 'Android HMS' (Handle Huawei Push_Kit Streams) + if (Platform.isAndroid && (await FlutterHmsGmsAvailability.isHmsAvailable)) { + // 'Android HMS' (Handle Huawei Push_Kit Streams) h_push.Push.enableLogger(); final result = await h_push.Push.setAutoInitEnabled(true); - h_push.Push.onNotificationOpenedApp.listen((message){ + h_push.Push.onNotificationOpenedApp.listen((message) { newMessage(toFirebaseRemoteMessage(message)); }, onError: (e) => print(e.toString())); - h_push.Push.onMessageReceivedStream.listen((message){ + h_push.Push.onMessageReceivedStream.listen((message) { newMessage(toFirebaseRemoteMessage(message)); }, onError: (e) => print(e.toString())); - - h_push.Push.getTokenStream.listen((token){ + h_push.Push.getTokenStream.listen((token) { onToken(token); }, onError: (e) => print(e.toString())); await h_push.Push.getToken(''); - h_push.Push.registerBackgroundMessageHandler(backgroundMessageHandler); - - }else{ // 'Android GMS or iOS' (Handle Firebase Messaging Streams) + } else { + // 'Android GMS or iOS' (Handle Firebase Messaging Streams) FirebaseMessaging.onMessage.listen((RemoteMessage message) async { newMessage(message); @@ -145,19 +135,15 @@ class PushNotificationHandler{ FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); final fcmToken = await FirebaseMessaging.instance.getToken(); - if(fcmToken != null) - onToken(fcmToken); + if (fcmToken != null) onToken(fcmToken); } } - - newMessage(RemoteMessage remoteMessage){ - if(remoteMessage.data['is_call'] == 'true' || remoteMessage.data['is_call'] == true) - _incomingCall(remoteMessage.data); - + newMessage(RemoteMessage remoteMessage) { + if (remoteMessage.data['is_call'] == 'true' || remoteMessage.data['is_call'] == true) _incomingCall(remoteMessage.data); } - onToken(String token) async{ + onToken(String token) async { print("Push Notification Token: " + token); AppSharedPreferences().setString(PUSH_TOKEN, token); DEVICE_TOKEN = token; @@ -165,11 +151,10 @@ class PushNotificationHandler{ onResume() async { var call_data = await AppSharedPreferences().getObject('call_data'); - if(call_data != null){ + if (call_data != null) { _incomingCall(call_data); } } - } /* todo verify all functionality */ @@ -275,4 +260,4 @@ class PushNotificationHandler{ // print("Is Call Not Found iOS"); // } // }, -// ); \ No newline at end of file +// );