aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/google
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2022-01-13 18:17:15 -0600
committerIván Ávalos <avalos@disroot.org>2022-01-13 18:17:15 -0600
commit2f23203099cd152c36571a39c42ff3056c13484c (patch)
treeb3fe1d68b439600b39753c4e6b5cf2b4ab8aa7fb /androidApp/src/google
parent2fef9e4abfcfa2895ba4f4c082fe7a7a10acebac (diff)
downloadetbsa-trackermap-mobile-2f23203099cd152c36571a39c42ff3056c13484c.tar.gz
etbsa-trackermap-mobile-2f23203099cd152c36571a39c42ff3056c13484c.tar.bz2
etbsa-trackermap-mobile-2f23203099cd152c36571a39c42ff3056c13484c.zip
Introduced Google product flavor for FCM notifications
Diffstat (limited to 'androidApp/src/google')
-rw-r--r--androidApp/src/google/AndroidManifest.xml28
-rw-r--r--androidApp/src/google/java/GoogleMainApplication.kt62
-rw-r--r--androidApp/src/google/java/ManagerMessagingService.kt54
3 files changed, 144 insertions, 0 deletions
diff --git a/androidApp/src/google/AndroidManifest.xml b/androidApp/src/google/AndroidManifest.xml
new file mode 100644
index 0000000..f7aea6c
--- /dev/null
+++ b/androidApp/src/google/AndroidManifest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="mx.trackermap.TrackerMap.android">
+
+ <application
+ android:name=".GoogleMainApplication"
+ tools:replace="android:name"
+ tools:ignore="GoogleAppIndexingWarning">
+
+ <meta-data
+ android:name="com.google.firebase.messaging.default_notification_channel_id"
+ android:value="@string/notification_channel_id" />
+
+ <meta-data
+ android:name="com.google.firebase.messaging.default_notification_icon"
+ android:resource="@drawable/icon_notify" />
+
+ <service android:exported="false" android:name=".ManagerMessagingService">
+ <intent-filter>
+ <action android:name="com.google.firebase.MESSAGING_EVENT" />
+ </intent-filter>
+ </service>
+
+ </application>
+
+</manifest>
diff --git a/androidApp/src/google/java/GoogleMainApplication.kt b/androidApp/src/google/java/GoogleMainApplication.kt
new file mode 100644
index 0000000..96062e1
--- /dev/null
+++ b/androidApp/src/google/java/GoogleMainApplication.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2017 - 2021 Anton Tananaev (anton.tananaev@gmail.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package mx.trackermap.TrackerMap.android
+
+import android.app.NotificationChannel
+import android.app.NotificationManager
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.os.Build
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import com.google.firebase.messaging.FirebaseMessaging
+import kotlinx.coroutines.DelicateCoroutinesApi
+import mx.trackermap.TrackerMap.android.session.LoginFragment
+
+@DelicateCoroutinesApi
+class GoogleMainApplication : TrackerApp() {
+
+ override fun onCreate() {
+ super.onCreate()
+ val intentFilter = IntentFilter(LoginFragment.EVENT_LOGIN)
+ LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ val channel = NotificationChannel(
+ getString(R.string.notification_channel_id),
+ getString(R.string.notification_channel),
+ NotificationManager.IMPORTANCE_DEFAULT
+ )
+ (getSystemService(NOTIFICATION_SERVICE) as NotificationManager).createNotificationChannel(channel)
+ }
+ }
+
+ private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
+ FirebaseMessaging.getInstance().token.addOnCompleteListener {
+ if (it.isSuccessful) {
+ broadcastToken(it.result)
+ }
+ }
+ }
+ }
+
+ fun broadcastToken(token: String?) {
+ val intent = Intent(LoginFragment.EVENT_TOKEN)
+ intent.putExtra(LoginFragment.KEY_TOKEN, token)
+ LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
+ }
+}
diff --git a/androidApp/src/google/java/ManagerMessagingService.kt b/androidApp/src/google/java/ManagerMessagingService.kt
new file mode 100644
index 0000000..b10475f
--- /dev/null
+++ b/androidApp/src/google/java/ManagerMessagingService.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2018 - 2021 Anton Tananaev (anton.tananaev@gmail.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package mx.trackermap.TrackerMap.android
+
+import android.annotation.SuppressLint
+import android.app.NotificationManager
+import android.app.PendingIntent
+import android.content.Intent
+import android.os.Build
+import androidx.core.app.NotificationCompat
+import com.google.firebase.messaging.FirebaseMessagingService
+import com.google.firebase.messaging.RemoteMessage
+import kotlinx.coroutines.DelicateCoroutinesApi
+import mx.trackermap.TrackerMap.android.units.UnitsActivity
+
+@DelicateCoroutinesApi
+class ManagerMessagingService : FirebaseMessagingService() {
+
+ @SuppressLint("UnspecifiedImmutableFlag")
+ override fun onMessageReceived(remoteMessage: RemoteMessage) {
+ super.onMessageReceived(remoteMessage)
+ val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
+ } else {
+ PendingIntent.FLAG_ONE_SHOT
+ }
+ val pendingIntent = PendingIntent.getActivity(this, 0, Intent(this, UnitsActivity::class.java), flags)
+ val builder = NotificationCompat.Builder(this, getString(R.string.notification_channel_id))
+ .setSmallIcon(R.drawable.icon_notify)
+ .setContentTitle(getString(R.string.app_name))
+ .setContentText(remoteMessage.notification?.body)
+ .setAutoCancel(true)
+ .setContentIntent(pendingIntent)
+ (getSystemService(NOTIFICATION_SERVICE) as NotificationManager).notify(remoteMessage.hashCode(), builder.build())
+ }
+
+ override fun onNewToken(token: String) {
+ super.onNewToken(token)
+ (application as GoogleMainApplication).broadcastToken(token)
+ }
+}