2021-07-09 05:25:57 +02:00
|
|
|
package org.thoughtcrime.securesms.notifications
|
2020-04-15 02:24:30 +02:00
|
|
|
|
2020-11-09 04:07:35 +01:00
|
|
|
import androidx.core.app.NotificationCompat
|
|
|
|
import androidx.core.app.NotificationManagerCompat
|
2020-04-15 02:24:30 +02:00
|
|
|
import com.google.firebase.messaging.FirebaseMessagingService
|
|
|
|
import com.google.firebase.messaging.RemoteMessage
|
2021-03-30 07:23:12 +02:00
|
|
|
import org.session.libsession.messaging.jobs.JobQueue
|
|
|
|
import org.session.libsession.messaging.jobs.MessageReceiveJob
|
2021-04-26 05:12:05 +02:00
|
|
|
import org.session.libsession.messaging.utilities.MessageWrapper
|
2021-01-18 23:12:44 +01:00
|
|
|
import org.session.libsession.utilities.TextSecurePreferences
|
2021-03-30 07:23:12 +02:00
|
|
|
import org.session.libsignal.utilities.Base64
|
2021-05-18 01:12:33 +02:00
|
|
|
import org.session.libsignal.utilities.Log
|
2020-04-15 02:24:30 +02:00
|
|
|
|
2020-04-16 08:56:12 +02:00
|
|
|
class PushNotificationService : FirebaseMessagingService() {
|
2020-04-15 02:24:30 +02:00
|
|
|
|
|
|
|
override fun onNewToken(token: String) {
|
|
|
|
super.onNewToken(token)
|
2020-04-16 08:56:12 +02:00
|
|
|
Log.d("Loki", "New FCM token: $token.")
|
2020-07-29 01:04:24 +02:00
|
|
|
val userPublicKey = TextSecurePreferences.getLocalNumber(this) ?: return
|
|
|
|
LokiPushNotificationManager.register(token, userPublicKey, this, false)
|
2020-04-15 02:24:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onMessageReceived(message: RemoteMessage) {
|
2020-09-18 02:34:30 +02:00
|
|
|
Log.d("Loki", "Received a push notification.")
|
|
|
|
val base64EncodedData = message.data?.get("ENCRYPTED_DATA")
|
2020-04-15 02:24:30 +02:00
|
|
|
val data = base64EncodedData?.let { Base64.decode(it) }
|
|
|
|
if (data != null) {
|
|
|
|
try {
|
2021-05-19 00:56:44 +02:00
|
|
|
val envelopeAsData = MessageWrapper.unwrap(data).toByteArray()
|
2021-05-19 01:03:49 +02:00
|
|
|
val job = MessageReceiveJob(envelopeAsData)
|
2021-05-19 00:56:44 +02:00
|
|
|
JobQueue.shared.add(job)
|
2020-04-15 02:24:30 +02:00
|
|
|
} catch (e: Exception) {
|
2020-09-16 05:42:18 +02:00
|
|
|
Log.d("Loki", "Failed to unwrap data for message due to error: $e.")
|
2020-04-15 02:24:30 +02:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Log.d("Loki", "Failed to decode data for message.")
|
2020-11-09 04:07:35 +01:00
|
|
|
val builder = NotificationCompat.Builder(this, NotificationChannels.OTHER)
|
2021-05-19 00:56:44 +02:00
|
|
|
.setSmallIcon(network.loki.messenger.R.drawable.ic_notification)
|
|
|
|
.setColor(this.getResources().getColor(network.loki.messenger.R.color.textsecure_primary))
|
|
|
|
.setContentTitle("Session")
|
|
|
|
.setContentText("You've got a new message.")
|
|
|
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
|
|
|
.setAutoCancel(true)
|
2020-11-09 04:07:35 +01:00
|
|
|
with(NotificationManagerCompat.from(this)) {
|
|
|
|
notify(11111, builder.build())
|
|
|
|
}
|
2020-04-15 02:24:30 +02:00
|
|
|
}
|
|
|
|
}
|
2020-11-09 04:07:35 +01:00
|
|
|
|
|
|
|
override fun onDeletedMessages() {
|
2021-02-03 02:22:40 +01:00
|
|
|
Log.d("Loki", "Called onDeletedMessages.")
|
2020-11-09 04:07:35 +01:00
|
|
|
super.onDeletedMessages()
|
2021-01-18 23:12:44 +01:00
|
|
|
val token = TextSecurePreferences.getFCMToken(this)!!
|
2020-11-09 04:07:35 +01:00
|
|
|
val userPublicKey = TextSecurePreferences.getLocalNumber(this) ?: return
|
|
|
|
LokiPushNotificationManager.register(token, userPublicKey, this, true)
|
|
|
|
}
|
2020-04-15 02:24:30 +02:00
|
|
|
}
|