From 735d39aca022ab64542d4c2b1dfdea6379d06913 Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Thu, 25 May 2023 14:35:32 +0300 Subject: [PATCH] RUNNING CHANGES --- lib/classes/notifications.dart | 193 +++++++++++++++++++++++++++++---- lib/classes/utils.dart | 12 ++ pubspec.yaml | 5 +- 3 files changed, 186 insertions(+), 24 deletions(-) diff --git a/lib/classes/notifications.dart b/lib/classes/notifications.dart index 2d46642..b06bfbb 100644 --- a/lib/classes/notifications.dart +++ b/lib/classes/notifications.dart @@ -1,10 +1,151 @@ +// import 'dart:io'; +// +// import 'package:firebase_core/firebase_core.dart'; +// import 'package:firebase_messaging/firebase_messaging.dart'; +// import 'package:flutter/foundation.dart'; +// import 'package:flutter_local_notifications/flutter_local_notifications.dart'; +// import 'package:huawei_hmsavailability/huawei_hmsavailability.dart'; +// import 'package:huawei_push/huawei_push.dart' as huawei_push; +// import 'package:mohem_flutter_app/app_state/app_state.dart'; +// import 'package:mohem_flutter_app/classes/utils.dart'; +// import 'package:permission_handler/permission_handler.dart'; +// +// final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); +// +// class AppNotifications { +// static final AppNotifications _instance = AppNotifications._internal(); +// +// AppNotifications._internal(); +// +// factory AppNotifications() => _instance; +// +// late HmsApiAvailability hmsApiAvailability; +// +// String _huaweiToken = ''; +// +// Future requestPermissions() async { +// if (Platform.isIOS) { +// await flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation()?.requestPermissions(alert: true, badge: true, sound: true); +// } else if (Platform.isAndroid) { +// AndroidFlutterLocalNotificationsPlugin? androidImplementation = flutterLocalNotificationsPlugin.resolvePlatformSpecificImplementation(); +// bool? granted = await androidImplementation?.requestPermission(); +// if (granted == false) { +// if (kDebugMode) { +// print("-------------------- Permission Granted ------------------------"); +// print(granted); +// } +// await Permission.notification.request(); +// } +// } +// } +// +// void init(String? firebaseToken) async { +// hmsApiAvailability = HmsApiAvailability(); +// await requestPermissions(); +// AppState().setDeviceToken = firebaseToken; +// await Permission.notification.isDenied.then((bool value) { +// if (value) { +// Permission.notification.request(); +// } +// }); +// RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage(); +// +// if (initialMessage != null) _handleMessage(initialMessage); +// +// FirebaseMessaging.onMessage.listen((RemoteMessage message) { +// if (message.notification != null) _handleMessage(message); +// }); +// +// FirebaseMessaging.onMessageOpenedApp.listen(_handleOpenApp); +// +// FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); +// +// FirebaseMessaging.instance.onTokenRefresh.listen((String token) { +// AppState().setDeviceToken = token; +// }); +// +// if (Platform.isAndroid) { +// await hmsApiAvailability.isHMSAvailable().then((value) async { +// if (value == 0) { +// huawei_push.Push.enableLogger(); +// var result = await huawei_push.Push.setAutoInitEnabled(true); +// +// huawei_push.Push.onNotificationOpenedApp.listen((message) { +// // newMessage(toFirebaseRemoteMessage(message)); +// }, onError: (e) => print(e.toString())); +// +// huawei_push.Push.onMessageReceivedStream.listen((message) { +// // newMessage(toFirebaseRemoteMessage(message)); +// }, onError: (e) => print(e.toString())); +// } +// }).catchError((err) { +// print(err); +// }); +// } +// } +// +// void initHuaweiPush(Function loginCallback) { +// AppState().setIsHuawei = true; +// initTokenStream(loginCallback); +// huawei_push.Push.getToken(""); +// } +// +// // HUAWEI PUSH TOKEN IMPLEMENTATION +// void _onTokenEvent(String event) { +// _huaweiToken = event; +// AppState().setHuaweiPushToken = _huaweiToken; +// debugPrint("HUAWEI PUSH TOKEN: $_huaweiToken"); +// } +// +// void _onTokenError(Object error) {} +// +// Future initTokenStream(Function loginCallback) async { +// huawei_push.Push.getTokenStream.listen(_onTokenEvent, onError: _onTokenError).onData((data) { +// AppState().setHuaweiPushToken = data; +// debugPrint("HUAWEI PUSH TOKEN: $data"); +// loginCallback(); +// }); +// } +// +// void _handleMessage(RemoteMessage message) { +// Utils.saveStringFromPrefs("isAppOpendByChat", "false"); +// } +// +// void _handleOpenApp(RemoteMessage message) { +// Utils.saveStringFromPrefs("isAppOpendByChat", "true"); +// Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); +// } +// } +// +// AndroidNotificationChannel channel = const AndroidNotificationChannel( +// "high_importance_channel", +// "High Importance Notifications", +// importance: Importance.high, +// ); +// +// Future backgroundMessageHandler(RemoteMessage message) async { +// await Firebase.initializeApp(); +// Utils.saveStringFromPrefs("isAppOpendByChat", "false"); +// Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); +// } + + + + + +//************** NEW fILE ***************** + + + + import 'dart:io'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; -import 'package:huawei_hmsavailability/huawei_hmsavailability.dart'; + +// import 'package:huawei_hmsavailability/huawei_hmsavailability.dart'; import 'package:huawei_push/huawei_push.dart' as huawei_push; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; @@ -19,7 +160,7 @@ class AppNotifications { factory AppNotifications() => _instance; - late HmsApiAvailability hmsApiAvailability; + // late HmsApiAvailability hmsApiAvailability; String _huaweiToken = ''; @@ -40,7 +181,10 @@ class AppNotifications { } void init(String? firebaseToken) async { - hmsApiAvailability = HmsApiAvailability(); + // if (Platform.isAndroid) { + // hmsApiAvailability = HmsApiAvailability(); + // } + await requestPermissions(); AppState().setDeviceToken = firebaseToken; await Permission.notification.isDenied.then((bool value) { @@ -65,22 +209,22 @@ class AppNotifications { }); if (Platform.isAndroid) { - await hmsApiAvailability.isHMSAvailable().then((value) async { - if (value == 0) { - huawei_push.Push.enableLogger(); - var result = await huawei_push.Push.setAutoInitEnabled(true); - - huawei_push.Push.onNotificationOpenedApp.listen((message) { - // newMessage(toFirebaseRemoteMessage(message)); - }, onError: (e) => print(e.toString())); - - huawei_push.Push.onMessageReceivedStream.listen((message) { - // newMessage(toFirebaseRemoteMessage(message)); - }, onError: (e) => print(e.toString())); - } - }).catchError((err) { - print(err); - }); + // await hmsApiAvailability.isHMSAvailable().then((value) async { + if (!(await Utils.isGoogleServicesAvailable())) { + huawei_push.Push.enableLogger(); + var result = await huawei_push.Push.setAutoInitEnabled(true); + + huawei_push.Push.onNotificationOpenedApp.listen((message) { + // newMessage(toFirebaseRemoteMessage(message)); + }, onError: (e) => print(e.toString())); + + huawei_push.Push.onMessageReceivedStream.listen((message) { + // newMessage(toFirebaseRemoteMessage(message)); + }, onError: (e) => print(e.toString())); + } + // }).catchError((err) { + // print(err); + // }); } } @@ -112,8 +256,10 @@ class AppNotifications { } void _handleOpenApp(RemoteMessage message) { - Utils.saveStringFromPrefs("isAppOpendByChat", "true"); - Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); + if (message.data.isNotEmpty && message.data["type"] == 'chat') { + Utils.saveStringFromPrefs("isAppOpendByChat", "true"); + Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); + } } } @@ -127,4 +273,7 @@ Future backgroundMessageHandler(RemoteMessage message) async { await Firebase.initializeApp(); Utils.saveStringFromPrefs("isAppOpendByChat", "false"); Utils.saveStringFromPrefs("notificationData", message.data["user_chat_history_response"].toString()); -} + if (message.data.isNotEmpty && message.data["type"] == 'call') { + // ChatVoipCall().showCallkitIncoming(uuid: const Uuid().v4(), data: message); + } +} \ No newline at end of file diff --git a/lib/classes/utils.dart b/lib/classes/utils.dart index 1f29a29..17c8a12 100644 --- a/lib/classes/utils.dart +++ b/lib/classes/utils.dart @@ -7,6 +7,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:google_api_availability/google_api_availability.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/config/routes.dart'; @@ -398,4 +399,15 @@ class Utils { print(err); }); } + + + //HUAWEI DECISION MAKING + static Future isGoogleServicesAvailable() async { + GooglePlayServicesAvailability availability = await GoogleApiAvailability.instance.checkGooglePlayServicesAvailability(); + String status = availability.toString().split('.').last; + if (status == "success") { + return true; + } + return false; + } } diff --git a/pubspec.yaml b/pubspec.yaml index 1a8b0ff..0ff3e5f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,7 +64,7 @@ dependencies: wifi_iot: ^0.3.18 flutter_html: ^3.0.0-alpha.6 # flutter_barcode_scanner: ^2.0.0 - qr_code_scanner: ^1.0.0 + qr_code_scanner: ^1.0.1 # qr_flutter: ^4.0.0 url_launcher: ^6.0.15 share: 2.0.4 @@ -86,7 +86,8 @@ dependencies: swipe_to: ^1.0.2 flutter_webrtc: ^0.9.16 camera: ^0.10.3 - flutter_local_notifications: any + flutter_local_notifications: 10.0.0 + google_api_availability: ^3.0.1 #firebase_analytics: any #Chat Voice Message Recoding & Play