This commit is contained in:
andrew
2023-07-25 14:49:41 +09:30
parent 01e9d15872
commit 34990b13d3
11 changed files with 202 additions and 82 deletions

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application tools:node="merge">
<service
android:name="org.thoughtcrime.securesms.notifications.HuaweiPushNotificationService"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>

View File

@@ -21,7 +21,7 @@ object HuaweiPushModule {
@Module
@InstallIn(SingletonComponent::class)
abstract class FirebaseBindingModule {
abstract class HuaweiBindingModule {
@Binds
abstract fun bindPushManager(firebasePushManager: HuaweiPushManager): PushManager
}
abstract fun bindPushManager(pushManager: HuaweiPushManager): PushManager
}

View File

@@ -0,0 +1,59 @@
package org.thoughtcrime.securesms.notifications
import android.os.Bundle
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.huawei.hms.push.HmsMessageService
import com.huawei.hms.push.RemoteMessage
import dagger.hilt.android.AndroidEntryPoint
import org.session.libsession.messaging.jobs.BatchMessageReceiveJob
import org.session.libsession.messaging.jobs.JobQueue
import org.session.libsession.messaging.jobs.MessageReceiveParameters
import org.session.libsession.messaging.utilities.MessageWrapper
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsignal.utilities.Base64
import org.session.libsignal.utilities.Log
import javax.inject.Inject
@AndroidEntryPoint
class HuaweiPushNotificationService: HmsMessageService() {
@Inject token
override fun onNewToken(token: String?, bundle: Bundle?) {
Log.d("Loki", "New HCM token: $token.")
if (!token.isNullOrEmpty()) {
val userPublicKey = TextSecurePreferences.getLocalNumber(this) ?: return
PushManager.register(token, userPublicKey, this, false)
}
}
override fun onMessageReceived(message: RemoteMessage?) {
Log.d("Loki", "Received a push notification.")
val base64EncodedData = message?.data
val data = base64EncodedData?.let { Base64.decode(it) }
if (data != null) {
try {
val envelopeAsData = MessageWrapper.unwrap(data).toByteArray()
val job = BatchMessageReceiveJob(listOf(MessageReceiveParameters(envelopeAsData)), null)
JobQueue.shared.add(job)
} catch (e: Exception) {
Log.d("Loki", "Failed to unwrap data for message due to error: $e.")
}
} else {
Log.d("Loki", "Failed to decode data for message.")
val builder = NotificationCompat.Builder(this, NotificationChannels.OTHER)
.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)
with(NotificationManagerCompat.from(this)) {
notify(11111, builder.build())
}
}
}
}