merge-update-with-lab-changes
haroon amjad 4 years ago
parent 7d7864a1eb
commit 8c96de866b

@ -234,12 +234,12 @@ class _IncomingCallState extends State<IncomingCall> with SingleTickerProviderSt
await _controller.dispose(); await _controller.dispose();
await Navigator.of(context).pushReplacement( await Navigator.of(context).pushReplacement(
MaterialPageRoute( MaterialPageRoute(
fullscreenDialog: true, // fullscreenDialog: true,
builder: (BuildContext context) { builder: (BuildContext context) {
if (openCallInWeb) // if (openCallInWeb)
return VideoCallWebPage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); return VideoCallWebPage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID);
else // else
return CallHomePage(receiverId: widget.incomingCallData.receiverID, callerId: widget.incomingCallData.callerID); // 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/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -6,7 +7,7 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart';
class VideoCallWebPage extends StatelessWidget{ class VideoCallWebPage extends StatelessWidget{
final GlobalKey webViewKey = GlobalKey(); final GlobalKey webViewKey = GlobalKey();
InAppWebViewController webViewController; // InAppWebViewController webViewController;
InAppWebViewController controller; InAppWebViewController controller;
URLRequest request; URLRequest request;
@ -51,7 +52,7 @@ class VideoCallWebPage extends StatelessWidget{
), ),
extendBodyBehindAppBar: true, extendBodyBehindAppBar: true,
extendBody: false, extendBody: false,
backgroundColor: Colors.white, // backgroundColor: Colors.white,
body: Column( body: Column(
children: [ children: [
SizedBox(height: MediaQuery.of(context).viewPadding.top), 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){ onConsoleMessage(controller, ConsoleMessage consoleMessage){
print(consoleMessage); print(consoleMessage);
@ -95,7 +99,12 @@ class VideoCallWebPage extends StatelessWidget{
onLoadStart(InAppWebViewController controller, Uri url) { onLoadStart(InAppWebViewController controller, Uri url) {
print(url); print(url);
if(url.toString().toLowerCase().contains("endcallpage")){ 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, "ProjectID": projectID,
"ServiceID": serviceID, "ServiceID": serviceID,
"AcceptedBy": docID, "AcceptedBy": docID,
"IsFlutter": true,
"DeviceToken": deviceToken, "DeviceToken": deviceToken,
"Latitude": lat, "Latitude": lat,
"Longitude": long, "Longitude": long,

@ -1,134 +1,124 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/models/LiveCare/IncomingCallData.dart'; import 'package:diplomaticquarterapp/models/LiveCare/IncomingCallData.dart';
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
import 'package:diplomaticquarterapp/pages/livecare/incoming_call.dart'; import 'package:diplomaticquarterapp/pages/livecare/incoming_call.dart';
import 'package:diplomaticquarterapp/uitl/app-permissions.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';
import 'package:firebase_messaging/firebase_messaging.dart' as fir; 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: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 'app_shared_preferences.dart';
import 'navigation_service.dart'; import 'navigation_service.dart';
// |--> Push Notification Background // |--> Push Notification Background
Future<dynamic> backgroundMessageHandler(dynamic message) async{ Future<dynamic> backgroundMessageHandler(dynamic message) async {
fir.RemoteMessage message_; 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); message_ = toFirebaseRemoteMessage(message);
} }
if (message_.data != null && message_.data['is_call'] == 'true') { if (message.data != null && message.data['is_call'] == 'true') {
_incomingCall(message_.data); _incomingCall(message.data);
return; return;
} }
h_push.Push.localNotification({ h_push.Push.localNotification({h_push.HMSLocalNotificationAttr.TITLE: 'Background Message', h_push.HMSLocalNotificationAttr.MESSAGE: "By: BackgroundMessageHandler"});
h_push.HMSLocalNotificationAttr.TITLE: 'Background Message',
h_push.HMSLocalNotificationAttr.MESSAGE: "By: BackgroundMessageHandler"
});
} }
// Push Notification Background <--| // Push Notification Background <--|
RemoteMessage toFirebaseRemoteMessage(h_push.RemoteMessage message) {
RemoteMessage toFirebaseRemoteMessage(h_push.RemoteMessage message){
final payload_data = jsonDecode(message.data); final payload_data = jsonDecode(message.data);
final fire_message = RemoteMessage( final fire_message = RemoteMessage(
from: message.from, from: message.from,
collapseKey: message.collapseKey, collapseKey: message.collapseKey,
data: payload_data['data'], data: payload_data['data'],
messageId: message.messageId, messageId: message.messageId,
sentTime: DateTime.fromMillisecondsSinceEpoch(message.sentTime*1000), sentTime: DateTime.fromMillisecondsSinceEpoch(message.sentTime * 1000),
ttl: message.ttl, ttl: message.ttl,
category: null, category: null,
messageType: message.type, messageType: message.type,
notification: RemoteNotification( notification: RemoteNotification(
title: message.notification.title, title: message.notification.title,
titleLocArgs: (message.notification.titleLocalizationArgs ?? []).map((e) => e.toString()).toList(), titleLocArgs: (message.notification.titleLocalizationArgs ?? []).map((e) => e.toString()).toList(),
titleLocKey: message.notification.titleLocalizationKey, titleLocKey: message.notification.titleLocalizationKey,
body: message.notification.body, body: message.notification.body,
bodyLocArgs: (message.notification.bodyLocalizationArgs ?? []).map((e) => e.toString()).toList(), bodyLocArgs: (message.notification.bodyLocalizationArgs ?? []).map((e) => e.toString()).toList(),
bodyLocKey: message.notification.bodyLocalizationKey, bodyLocKey: message.notification.bodyLocalizationKey,
android: AndroidNotification( android: AndroidNotification(
channelId: message.notification.channelId, channelId: message.notification.channelId,
clickAction: message.notification.clickAction, clickAction: message.notification.clickAction,
color: message.notification.color, color: message.notification.color,
count: null, count: null,
imageUrl: message.notification.imageUrl.path, imageUrl: message.notification.imageUrl.path,
link: message.notification.link.path, link: message.notification.link.path,
smallIcon: message.notification.icon, smallIcon: message.notification.icon,
sound: message.notification.sound, sound: message.notification.sound,
ticker: message.notification.ticker, ticker: message.notification.ticker,
tag: message.notification.tag, tag: message.notification.tag,
), ),
) ));
);
return fire_message; 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); LandingPage.incomingCallData = IncomingCallData.fromJson(data);
if(LandingPage.isOpenCallPage == false){ if (LandingPage.isOpenCallPage == false) {
LandingPage.isOpenCallPage = true; LandingPage.isOpenCallPage = true;
final permited = await AppPermission.askVideoCallPermission(currentContext); final permited = await AppPermission.askVideoCallPermission(currentContext);
if(permited) if (permited) await NavigationService.navigateToPage(IncomingCall(incomingCallData: LandingPage.incomingCallData));
await NavigationService.navigateToPage(IncomingCall(incomingCallData: LandingPage.incomingCallData)); // LandingPage.isOpenCallPage = false;
LandingPage.isOpenCallPage = false;
} }
await Future.delayed(Duration(milliseconds: 500)); await Future.delayed(Duration(milliseconds: 500));
await AppSharedPreferences().remove('call_data'); await AppSharedPreferences().remove('call_data');
} }
class PushNotificationHandler{ class PushNotificationHandler {
final BuildContext context; final BuildContext context;
static PushNotificationHandler _instance; static PushNotificationHandler _instance;
PushNotificationHandler(this.context){ PushNotificationHandler(this.context) {
PushNotificationHandler._instance = this; PushNotificationHandler._instance = this;
} }
static PushNotificationHandler getInstance() => _instance; static PushNotificationHandler getInstance() => _instance;
init() async{ init() async {
if (Platform.isIOS) { if (Platform.isIOS) {
final permission = await FirebaseMessaging.instance.requestPermission(); final permission = await FirebaseMessaging.instance.requestPermission();
if(permission.authorizationStatus == AuthorizationStatus.denied) if (permission.authorizationStatus == AuthorizationStatus.denied) return;
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(); h_push.Push.enableLogger();
final result = await h_push.Push.setAutoInitEnabled(true); final result = await h_push.Push.setAutoInitEnabled(true);
h_push.Push.onNotificationOpenedApp.listen((message){ h_push.Push.onNotificationOpenedApp.listen((message) {
newMessage(toFirebaseRemoteMessage(message)); newMessage(toFirebaseRemoteMessage(message));
}, onError: (e) => print(e.toString())); }, onError: (e) => print(e.toString()));
h_push.Push.onMessageReceivedStream.listen((message){ h_push.Push.onMessageReceivedStream.listen((message) {
newMessage(toFirebaseRemoteMessage(message)); newMessage(toFirebaseRemoteMessage(message));
}, onError: (e) => print(e.toString())); }, onError: (e) => print(e.toString()));
h_push.Push.getTokenStream.listen((token) {
h_push.Push.getTokenStream.listen((token){
onToken(token); onToken(token);
}, onError: (e) => print(e.toString())); }, onError: (e) => print(e.toString()));
await h_push.Push.getToken(''); await h_push.Push.getToken('');
h_push.Push.registerBackgroundMessageHandler(backgroundMessageHandler); h_push.Push.registerBackgroundMessageHandler(backgroundMessageHandler);
} else {
}else{ // 'Android GMS or iOS' (Handle Firebase Messaging Streams) // 'Android GMS or iOS' (Handle Firebase Messaging Streams)
FirebaseMessaging.onMessage.listen((RemoteMessage message) async { FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
newMessage(message); newMessage(message);
@ -145,19 +135,15 @@ class PushNotificationHandler{
FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler);
final fcmToken = await FirebaseMessaging.instance.getToken(); final fcmToken = await FirebaseMessaging.instance.getToken();
if(fcmToken != null) if (fcmToken != null) onToken(fcmToken);
onToken(fcmToken);
} }
} }
newMessage(RemoteMessage remoteMessage) {
newMessage(RemoteMessage remoteMessage){ if (remoteMessage.data['is_call'] == 'true' || remoteMessage.data['is_call'] == true) _incomingCall(remoteMessage.data);
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); print("Push Notification Token: " + token);
AppSharedPreferences().setString(PUSH_TOKEN, token); AppSharedPreferences().setString(PUSH_TOKEN, token);
DEVICE_TOKEN = token; DEVICE_TOKEN = token;
@ -165,11 +151,10 @@ class PushNotificationHandler{
onResume() async { onResume() async {
var call_data = await AppSharedPreferences().getObject('call_data'); var call_data = await AppSharedPreferences().getObject('call_data');
if(call_data != null){ if (call_data != null) {
_incomingCall(call_data); _incomingCall(call_data);
} }
} }
} }
/* todo verify all functionality */ /* todo verify all functionality */

Loading…
Cancel
Save