diff --git a/android/FlutterFirebaseMessagingReceiver.java b/android/FlutterFirebaseMessagingReceiver.java new file mode 100644 index 00000000..35b19b37 --- /dev/null +++ b/android/FlutterFirebaseMessagingReceiver.java @@ -0,0 +1,114 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebase.messaging; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import java.util.Timer; +import java.util.TimerTask; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.google.firebase.messaging.RemoteMessage; + +import java.util.HashMap; +import java.util.concurrent.TimeUnit; + +public class FlutterFirebaseMessagingReceiver extends BroadcastReceiver { + private static final String TAG = "FLTFireMsgReceiver"; + static HashMap notifications = new HashMap<>(); + + @Override + public void onReceive(Context context, Intent intent) { + Log.d(TAG, "broadcast received for message"); + if (ContextHolder.getApplicationContext() == null) { + ContextHolder.setApplicationContext(context.getApplicationContext()); + } + + if (intent.getExtras() == null) { + Log.d( + TAG, + "broadcast received but intent contained no extras to process RemoteMessage. Operation cancelled."); + return; + } + + RemoteMessage remoteMessage = new RemoteMessage(intent.getExtras()); + + // Store the RemoteMessage if the message contains a notification payload. + if (remoteMessage.getNotification() != null) { + notifications.put(remoteMessage.getMessageId(), remoteMessage); + FlutterFirebaseMessagingStore.getInstance().storeFirebaseMessage(remoteMessage); + } + + // |-> --------------------- + // App in Foreground + // ------------------------ + if (FlutterFirebaseMessagingUtils.isApplicationForeground(context)) { + Intent onMessageIntent = new Intent(FlutterFirebaseMessagingUtils.ACTION_REMOTE_MESSAGE); + onMessageIntent.putExtra(FlutterFirebaseMessagingUtils.EXTRA_REMOTE_MESSAGE, remoteMessage); + LocalBroadcastManager.getInstance(context).sendBroadcast(onMessageIntent); + return; + } + + // |-> --------------------- + // App in Background/Quit + // ------------------------ + + + if (remoteMessage.getData().containsKey("is_call")) { + Intent intent12 = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); + intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + context.startActivity(intent12); + try { + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Intent onMessageIntent = new Intent(FlutterFirebaseMessagingUtils.ACTION_REMOTE_MESSAGE); + onMessageIntent.putExtra(FlutterFirebaseMessagingUtils.EXTRA_REMOTE_MESSAGE, remoteMessage); + LocalBroadcastManager.getInstance(context).sendBroadcast(onMessageIntent); + } + }, 5000); + } catch (Exception e) { + Log.e("AppCallingException", e.getMessage()); + } + // super.onMessageReceived(remoteMessage); + } //else + // super.onMessageReceived(remoteMessage); +// +// if (remoteMessage.getData().containsKey("is_call")) { +// Log.e("AppCalling", "started..."); +// Intent intent12 = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); +// intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); +// context.startActivity(intent12); +// try { +// Log.e("AppCalling", "going to sleep..."); +// TimeUnit.SECONDS.sleep(10); +// Log.e("AppCalling", "sendig to broadcast receiver..."); +// Log.e("AppCalling:DAta", remoteMessage.getData().containsKey("is_call") + ""); +// Intent onBackgroundMessageIntent = +// new Intent(context, FlutterFirebaseMessagingBackgroundService.class); +// onBackgroundMessageIntent.putExtra( +// FlutterFirebaseMessagingUtils.EXTRA_REMOTE_MESSAGE, remoteMessage); +// FlutterFirebaseMessagingBackgroundService.enqueueMessageProcessing( +// context, onBackgroundMessageIntent); +// //return; +// } catch (Exception e) { +// Log.e("AppCallingException", e.getMessage()); +// } +// +// } + + +// Intent onBackgroundMessageIntent = +// new Intent(context, FlutterFirebaseMessagingBackgroundService.class); +// onBackgroundMessageIntent.putExtra( +// FlutterFirebaseMessagingUtils.EXTRA_REMOTE_MESSAGE, remoteMessage); +// FlutterFirebaseMessagingBackgroundService.enqueueMessageProcessing( +// context, onBackgroundMessageIntent); + } +} diff --git a/lib/uitl/push-notification-handler.dart b/lib/uitl/push-notification-handler.dart index b9fba256..76399a1a 100644 --- a/lib/uitl/push-notification-handler.dart +++ b/lib/uitl/push-notification-handler.dart @@ -1,18 +1,18 @@ 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: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: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_hms_gms_availability/flutter_hms_gms_availability.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'app_shared_preferences.dart'; import 'navigation_service.dart'; @@ -68,14 +68,12 @@ RemoteMessage toFirebaseRemoteMessage(h_push.RemoteMessage message) { } _incomingCall(Map data) async { - print("_incomingCall CALLED!!!!!! $data"); - // print(ModalRoute.of(currentContext).settings.name); LandingPage.incomingCallData = IncomingCallData.fromJson(data); 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; + LandingPage.isOpenCallPage = false; } await Future.delayed(Duration(milliseconds: 500)); await AppSharedPreferences().remove('call_data');