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(