merge-requests/592/merge
haroon amjad 4 years ago
parent 7d7864a1eb
commit 8c96de866b

@ -234,12 +234,12 @@ class _IncomingCallState extends State<IncomingCall> 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);
},
),
);

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

@ -698,6 +698,7 @@ class DoctorsListService extends BaseService {
"ProjectID": projectID,
"ServiceID": serviceID,
"AcceptedBy": docID,
"IsFlutter": true,
"DeviceToken": deviceToken,
"Latitude": lat,
"Longitude": long,

@ -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<dynamic> backgroundMessageHandler(dynamic message) async{
Future<dynamic> 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");
// }
// },
// );
// );

Loading…
Cancel
Save