From 23404b4495dda7d2b82b937d054b7cbf12843572 Mon Sep 17 00:00:00 2001 From: Zohaib Iqbal Kambrani <> Date: Thu, 10 Mar 2022 12:36:57 +0300 Subject: [PATCH] Video call at InAppWebView --- android/app/src/main/AndroidManifest.xml | 4 + lib/analytics/flows/offers_promotions.dart | 7 ++ lib/pages/conference/video-call-web-page.dart | 13 --- .../fragments/home_page_fragment2.dart | 1 + lib/pages/livecare/incoming_call.dart | 11 +- lib/pages/livecare/video-call-web-page.dart | 108 ++++++++++++++++++ lib/pages/login/forgot-password.dart | 3 + 7 files changed, 132 insertions(+), 15 deletions(-) delete mode 100644 lib/pages/conference/video-call-web-page.dart create mode 100644 lib/pages/livecare/video-call-web-page.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index ebc7cc88..7089bdc6 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -16,7 +16,10 @@ + + + @@ -27,6 +30,7 @@ + diff --git a/lib/analytics/flows/offers_promotions.dart b/lib/analytics/flows/offers_promotions.dart index eea90b15..3fd3e60b 100644 --- a/lib/analytics/flows/offers_promotions.dart +++ b/lib/analytics/flows/offers_promotions.dart @@ -6,4 +6,11 @@ class OfferAndPromotion{ OfferAndPromotion(this.logger); final offers_and_promotion = 'offers_&_promotion'; + + log(){ + logger('offers_&_promotion', parameters: { + 'action' : "click" + }); + } + } \ No newline at end of file diff --git a/lib/pages/conference/video-call-web-page.dart b/lib/pages/conference/video-call-web-page.dart deleted file mode 100644 index 45a33b3d..00000000 --- a/lib/pages/conference/video-call-web-page.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class VideoCallWebPage extends StatelessWidget{ - - @override - Widget build(BuildContext context) { - return Scaffold( - - ); - } - -} \ No newline at end of file diff --git a/lib/pages/landing/fragments/home_page_fragment2.dart b/lib/pages/landing/fragments/home_page_fragment2.dart index 1fa298dc..71c94645 100644 --- a/lib/pages/landing/fragments/home_page_fragment2.dart +++ b/lib/pages/landing/fragments/home_page_fragment2.dart @@ -287,6 +287,7 @@ class _HomePageFragment2State extends State { flex: 1, child: InkWell( onTap: () { + projectViewModel.analytics.offerPackages.offers_and_promotion AuthenticatedUser user = projectViewModel.user; Navigator.of(context).push(MaterialPageRoute(builder: (context) => PackagesOfferTabPage(user))); }, diff --git a/lib/pages/livecare/incoming_call.dart b/lib/pages/livecare/incoming_call.dart index e3de76b4..2dfbe3e4 100644 --- a/lib/pages/livecare/incoming_call.dart +++ b/lib/pages/livecare/incoming_call.dart @@ -7,6 +7,7 @@ import 'package:diplomaticquarterapp/pages/conference/web_rtc/call_home_page.dar import 'package:diplomaticquarterapp/pages/conference/web_rtc/call_home_page_.dart'; import 'package:diplomaticquarterapp/pages/conference/widgets/platform_exception_alert_dialog.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; +import 'package:diplomaticquarterapp/pages/livecare/video-call-web-page.dart'; import 'package:diplomaticquarterapp/pages/webRTC/signaling.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart'; @@ -25,6 +26,7 @@ class IncomingCall extends StatefulWidget { class _IncomingCallState extends State with SingleTickerProviderStateMixin { AnimationController _animationController; + bool openCallInWeb = true; final player = AudioPlayer(); CameraController _controller; @@ -234,7 +236,12 @@ class _IncomingCallState extends State with SingleTickerProviderSt await Navigator.of(context).pushReplacement( MaterialPageRoute( fullscreenDialog: true, - builder: (BuildContext context) => CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID), + builder: (BuildContext context) { + if(openCallInWeb) + return VideoCallWebPage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); + + return CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); + }, ), ); } catch (err) { @@ -246,7 +253,7 @@ class _IncomingCallState extends State with SingleTickerProviderSt } void backToHome() async { - final connected = await signaling.declineCall(widget.incomingCallData.callerID, widget.incomingCallData.receiverID); + // final connected = await signaling.declineCall(widget.incomingCallData.callerID, widget.incomingCallData.receiverID); LandingPage.isOpenCallPage = false; player.stop(); Navigator.of(context).pop(); diff --git a/lib/pages/livecare/video-call-web-page.dart b/lib/pages/livecare/video-call-web-page.dart new file mode 100644 index 00000000..0587343c --- /dev/null +++ b/lib/pages/livecare/video-call-web-page.dart @@ -0,0 +1,108 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; + +class VideoCallWebPage extends StatelessWidget{ + final GlobalKey webViewKey = GlobalKey(); + + InAppWebViewController webViewController; + InAppWebViewController controller; + + URLRequest request; + final String receiverId; + final String callerId; + VideoCallWebPage({@required this.receiverId, @required this.callerId}){ + request = URLRequest(url: Uri.parse("https://vcallapi.hmg.com/index.html?username=$receiverId")); + } + + InAppWebViewGroupOptions options = InAppWebViewGroupOptions( + crossPlatform: InAppWebViewOptions( + cacheEnabled: false, + clearCache: true, + disableHorizontalScroll: true, + disableVerticalScroll: true, + disableContextMenu: true, + supportZoom: false, + javaScriptEnabled: true, + preferredContentMode: UserPreferredContentMode.MOBILE, + useShouldOverrideUrlLoading: true, + mediaPlaybackRequiresUserGesture: false, + + ), + android: AndroidInAppWebViewOptions( + hardwareAcceleration: true, + useHybridComposition: true, + ), + ios: IOSInAppWebViewOptions( + allowsAirPlayForMediaPlayback: true, + allowsPictureInPictureMediaPlayback: true, + allowsInlineMediaPlayback: true, + ) + ); + + @override + Widget build(BuildContext context) { + return Scaffold( + primary: true, + appBar: AppBar( + backgroundColor: Colors.transparent, leading: Container(), + systemOverlayStyle: SystemUiOverlayStyle(statusBarColor: Colors.black), + ), + extendBodyBehindAppBar: true, + extendBody: false, + backgroundColor: Colors.white, + body: Column( + children: [ + SizedBox(height: MediaQuery.of(context).viewPadding.top), + Expanded( + child: InAppWebView( + androidOnPermissionRequest: androidOnPermissionRequest, + initialOptions: options, + initialUrlRequest: request, + onWebViewCreated: onWebViewCreated, + onLoadStart: onLoadStart, + onLoadError: onError, + onConsoleMessage: onConsoleMessage, + shouldOverrideUrlLoading: shouldRedirect , + ), + ), + ], + ), + ); + + ChromeSafariBrowser(); + } + + + Future androidOnPermissionRequest(InAppWebViewController controller, String origin, List resources) async { + return PermissionRequestResponse( + resources: resources, + action: PermissionRequestResponseAction.GRANT + ); + } + + onWebViewCreated(InAppWebViewController controller) => this.controller = controller; + + onConsoleMessage(controller, ConsoleMessage consoleMessage){ + print(consoleMessage); + } + + onError(InAppWebViewController controller, Uri url, int code, String message) { + + } + + onLoadStart(InAppWebViewController controller, Uri url) { + } + + Future shouldRedirect(InAppWebViewController controller, NavigationAction navigationAction) async { + var uri = navigationAction.request.url; + if(uri.queryParameters['exit'] == "yes"){ + Navigator.pop(webViewKey.currentContext); + } + + return NavigationActionPolicy.ALLOW; + } + + +} \ No newline at end of file diff --git a/lib/pages/login/forgot-password.dart b/lib/pages/login/forgot-password.dart index d943ba98..94ce51e5 100644 --- a/lib/pages/login/forgot-password.dart +++ b/lib/pages/login/forgot-password.dart @@ -1,4 +1,6 @@ +import 'package:diplomaticquarterapp/analytics/google-analytics.dart'; import 'package:diplomaticquarterapp/config/size_config.dart'; +import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; @@ -72,6 +74,7 @@ class _ForgotPassword extends State { width: double.infinity, child: FlatButton( onPressed: () { + locator().loginRegistration.recover_file_number(); sendPatientIDBySMS(); }, child: Text(