Video call at InAppWebView

merge-requests/591/head
Zohaib Iqbal Kambrani 4 years ago
parent 936b7c28f9
commit 23404b4495

@ -16,7 +16,10 @@
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.READ_CALENDAR" />
@ -27,6 +30,7 @@
<uses-permission android:name="com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA"/> <uses-permission android:name="com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA"/>
<!-- Wifi Permissions--> <!-- Wifi Permissions-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

@ -6,4 +6,11 @@ class OfferAndPromotion{
OfferAndPromotion(this.logger); OfferAndPromotion(this.logger);
final offers_and_promotion = 'offers_&_promotion'; final offers_and_promotion = 'offers_&_promotion';
log(){
logger('offers_&_promotion', parameters: {
'action' : "click"
});
}
} }

@ -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(
);
}
}

@ -287,6 +287,7 @@ class _HomePageFragment2State extends State<HomePageFragment2> {
flex: 1, flex: 1,
child: InkWell( child: InkWell(
onTap: () { onTap: () {
projectViewModel.analytics.offerPackages.offers_and_promotion
AuthenticatedUser user = projectViewModel.user; AuthenticatedUser user = projectViewModel.user;
Navigator.of(context).push(MaterialPageRoute(builder: (context) => PackagesOfferTabPage(user))); Navigator.of(context).push(MaterialPageRoute(builder: (context) => PackagesOfferTabPage(user)));
}, },

@ -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/web_rtc/call_home_page_.dart';
import 'package:diplomaticquarterapp/pages/conference/widgets/platform_exception_alert_dialog.dart'; import 'package:diplomaticquarterapp/pages/conference/widgets/platform_exception_alert_dialog.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.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/pages/webRTC/signaling.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils_new.dart'; import 'package:diplomaticquarterapp/uitl/utils_new.dart';
@ -25,6 +26,7 @@ class IncomingCall extends StatefulWidget {
class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderStateMixin { class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderStateMixin {
AnimationController _animationController; AnimationController _animationController;
bool openCallInWeb = true;
final player = AudioPlayer(); final player = AudioPlayer();
CameraController _controller; CameraController _controller;
@ -234,7 +236,12 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
await Navigator.of(context).pushReplacement( await Navigator.of(context).pushReplacement(
MaterialPageRoute( MaterialPageRoute(
fullscreenDialog: true, 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) { } catch (err) {
@ -246,7 +253,7 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
} }
void backToHome() async { 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; LandingPage.isOpenCallPage = false;
player.stop(); player.stop();
Navigator.of(context).pop(); Navigator.of(context).pop();

@ -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<PermissionRequestResponse> androidOnPermissionRequest(InAppWebViewController controller, String origin, List<String> 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<NavigationActionPolicy> shouldRedirect(InAppWebViewController controller, NavigationAction navigationAction) async {
var uri = navigationAction.request.url;
if(uri.queryParameters['exit'] == "yes"){
Navigator.pop(webViewKey.currentContext);
}
return NavigationActionPolicy.ALLOW;
}
}

@ -1,4 +1,6 @@
import 'package:diplomaticquarterapp/analytics/google-analytics.dart';
import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/locator.dart';
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
@ -72,6 +74,7 @@ class _ForgotPassword extends State<ForgotPassword> {
width: double.infinity, width: double.infinity,
child: FlatButton( child: FlatButton(
onPressed: () { onPressed: () {
locator<GAnalytics>().loginRegistration.recover_file_number();
sendPatientIDBySMS(); sendPatientIDBySMS();
}, },
child: Text( child: Text(

Loading…
Cancel
Save