mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-18 04:50:08 +03:00
Parse pushData in the push receiver
This commit is contained in:
parent
bc5309b5d7
commit
3e12907b26
4 changed files with 28 additions and 22 deletions
|
@ -22,11 +22,11 @@ import dagger.hilt.android.AndroidEntryPoint
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.di.ActiveSessionHolder
|
import im.vector.app.core.di.ActiveSessionHolder
|
||||||
import im.vector.app.core.pushers.FcmHelper
|
import im.vector.app.core.pushers.FcmHelper
|
||||||
|
import im.vector.app.core.pushers.PushParser
|
||||||
import im.vector.app.core.pushers.PushersManager
|
import im.vector.app.core.pushers.PushersManager
|
||||||
import im.vector.app.core.pushers.UnifiedPushHelper
|
import im.vector.app.core.pushers.UnifiedPushHelper
|
||||||
import im.vector.app.core.pushers.VectorPushHandler
|
import im.vector.app.core.pushers.VectorPushHandler
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import org.json.JSONObject
|
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() {
|
||||||
@Inject lateinit var vectorPreferences: VectorPreferences
|
@Inject lateinit var vectorPreferences: VectorPreferences
|
||||||
@Inject lateinit var activeSessionHolder: ActiveSessionHolder
|
@Inject lateinit var activeSessionHolder: ActiveSessionHolder
|
||||||
@Inject lateinit var pushersManager: PushersManager
|
@Inject lateinit var pushersManager: PushersManager
|
||||||
|
@Inject lateinit var pushParser: PushParser
|
||||||
@Inject lateinit var vectorPushHandler: VectorPushHandler
|
@Inject lateinit var vectorPushHandler: VectorPushHandler
|
||||||
@Inject lateinit var unifiedPushHelper: UnifiedPushHelper
|
@Inject lateinit var unifiedPushHelper: UnifiedPushHelper
|
||||||
|
|
||||||
|
@ -53,6 +54,8 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() {
|
||||||
|
|
||||||
override fun onMessageReceived(message: RemoteMessage) {
|
override fun onMessageReceived(message: RemoteMessage) {
|
||||||
Timber.d("New Firebase message")
|
Timber.d("New Firebase message")
|
||||||
vectorPushHandler.onMessage(JSONObject(message.data as Map<*, *>).toString())
|
pushParser.parsePushDataFcm(message.data)?.let {
|
||||||
|
vectorPushHandler.handle(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import im.vector.app.core.pushers.model.PushData
|
||||||
import im.vector.app.core.pushers.model.PushDataFcm
|
import im.vector.app.core.pushers.model.PushDataFcm
|
||||||
import im.vector.app.core.pushers.model.PushDataUnifiedPush
|
import im.vector.app.core.pushers.model.PushDataUnifiedPush
|
||||||
import im.vector.app.core.pushers.model.toPushData
|
import im.vector.app.core.pushers.model.toPushData
|
||||||
|
import org.json.JSONObject
|
||||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||||
import org.matrix.android.sdk.api.util.MatrixJsonParser
|
import org.matrix.android.sdk.api.util.MatrixJsonParser
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -40,12 +41,15 @@ class PushParser @Inject constructor() {
|
||||||
* [3] https://spec.matrix.org/latest/push-gateway-api/
|
* [3] https://spec.matrix.org/latest/push-gateway-api/
|
||||||
* [4] https://github.com/p1gp1g/sygnal/blob/unifiedpush/sygnal/upfcmpushkin.py (Not tested for a while)
|
* [4] https://github.com/p1gp1g/sygnal/blob/unifiedpush/sygnal/upfcmpushkin.py (Not tested for a while)
|
||||||
*/
|
*/
|
||||||
fun parseData(message: String, firebaseFormat: Boolean): PushData? {
|
fun parsePushDataUnifiedPush(message: ByteArray): PushData? {
|
||||||
val moshi = MatrixJsonParser.getMoshi()
|
return MatrixJsonParser.getMoshi().let {
|
||||||
return if (firebaseFormat) {
|
tryOrNull { it.adapter(PushDataUnifiedPush::class.java).fromJson(String(message)) }?.toPushData()
|
||||||
tryOrNull { moshi.adapter(PushDataFcm::class.java).fromJson(message) }?.toPushData()
|
}
|
||||||
} else {
|
}
|
||||||
tryOrNull { moshi.adapter(PushDataUnifiedPush::class.java).fromJson(message) }?.toPushData()
|
|
||||||
|
fun parsePushDataFcm(message: Map<*, *>): PushData? {
|
||||||
|
return MatrixJsonParser.getMoshi().let {
|
||||||
|
tryOrNull { it.adapter(PushDataFcm::class.java).fromJson(JSONObject(message).toString()) }?.toPushData()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,8 +55,6 @@ class VectorPushHandler @Inject constructor(
|
||||||
private val vectorPreferences: VectorPreferences,
|
private val vectorPreferences: VectorPreferences,
|
||||||
private val vectorDataStore: VectorDataStore,
|
private val vectorDataStore: VectorDataStore,
|
||||||
private val wifiDetector: WifiDetector,
|
private val wifiDetector: WifiDetector,
|
||||||
private val unifiedPushHelper: UnifiedPushHelper,
|
|
||||||
private val pushParser: PushParser,
|
|
||||||
private val actionIds: NotificationActionIds,
|
private val actionIds: NotificationActionIds,
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val buildMeta: BuildMeta
|
private val buildMeta: BuildMeta
|
||||||
|
@ -74,20 +72,17 @@ class VectorPushHandler @Inject constructor(
|
||||||
*
|
*
|
||||||
* @param message the message
|
* @param message the message
|
||||||
*/
|
*/
|
||||||
fun onMessage(message: String) {
|
fun handle(pushData: PushData) {
|
||||||
Timber.tag(loggerTag.value).d("## onMessage() received")
|
Timber.tag(loggerTag.value).d("## handling pushData")
|
||||||
|
|
||||||
if (buildMeta.lowPrivacyLoggingEnabled) {
|
if (buildMeta.lowPrivacyLoggingEnabled) {
|
||||||
Timber.tag(loggerTag.value).d("## onMessage() $message")
|
Timber.tag(loggerTag.value).d("## pushData: $pushData")
|
||||||
}
|
}
|
||||||
|
|
||||||
runBlocking {
|
runBlocking {
|
||||||
vectorDataStore.incrementPushCounter()
|
vectorDataStore.incrementPushCounter()
|
||||||
}
|
}
|
||||||
|
|
||||||
val pushData = pushParser.parseData(message, unifiedPushHelper.isEmbeddedDistributor())
|
|
||||||
?: return Unit.also { Timber.tag(loggerTag.value).w("Invalid received data Json format") }
|
|
||||||
|
|
||||||
// Diagnostic Push
|
// Diagnostic Push
|
||||||
if (pushData.eventId == PushersManager.TEST_EVENT_ID) {
|
if (pushData.eventId == PushersManager.TEST_EVENT_ID) {
|
||||||
val intent = Intent(actionIds.push)
|
val intent = Intent(actionIds.push)
|
||||||
|
@ -105,7 +100,7 @@ class VectorPushHandler @Inject constructor(
|
||||||
// we are in foreground, let the sync do the things?
|
// we are in foreground, let the sync do the things?
|
||||||
Timber.tag(loggerTag.value).d("PUSH received in a foreground state, ignore")
|
Timber.tag(loggerTag.value).d("PUSH received in a foreground state, ignore")
|
||||||
} else {
|
} else {
|
||||||
coroutineScope.launch(Dispatchers.IO) { onMessageReceivedInternal(pushData) }
|
coroutineScope.launch(Dispatchers.IO) { handleInternal(pushData) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,12 +110,12 @@ class VectorPushHandler @Inject constructor(
|
||||||
*
|
*
|
||||||
* @param pushData Object containing message data.
|
* @param pushData Object containing message data.
|
||||||
*/
|
*/
|
||||||
private suspend fun onMessageReceivedInternal(pushData: PushData) {
|
private suspend fun handleInternal(pushData: PushData) {
|
||||||
try {
|
try {
|
||||||
if (buildMeta.lowPrivacyLoggingEnabled) {
|
if (buildMeta.lowPrivacyLoggingEnabled) {
|
||||||
Timber.tag(loggerTag.value).d("## onMessageReceivedInternal() : $pushData")
|
Timber.tag(loggerTag.value).d("## handleInternal() : $pushData")
|
||||||
} else {
|
} else {
|
||||||
Timber.tag(loggerTag.value).d("## onMessageReceivedInternal()")
|
Timber.tag(loggerTag.value).d("## handleInternal()")
|
||||||
}
|
}
|
||||||
|
|
||||||
val session = activeSessionHolder.getOrInitializeSession(startSync = false)
|
val session = activeSessionHolder.getOrInitializeSession(startSync = false)
|
||||||
|
@ -140,7 +135,7 @@ class VectorPushHandler @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Timber.tag(loggerTag.value).e(e, "## onMessageReceivedInternal() failed")
|
Timber.tag(loggerTag.value).e(e, "## handleInternal() failed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ private val loggerTag = LoggerTag("Push", LoggerTag.SYNC)
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class VectorUnifiedPushMessagingReceiver : MessagingReceiver() {
|
class VectorUnifiedPushMessagingReceiver : MessagingReceiver() {
|
||||||
@Inject lateinit var pushersManager: PushersManager
|
@Inject lateinit var pushersManager: PushersManager
|
||||||
|
@Inject lateinit var pushParser: PushParser
|
||||||
@Inject lateinit var activeSessionHolder: ActiveSessionHolder
|
@Inject lateinit var activeSessionHolder: ActiveSessionHolder
|
||||||
@Inject lateinit var vectorPreferences: VectorPreferences
|
@Inject lateinit var vectorPreferences: VectorPreferences
|
||||||
@Inject lateinit var vectorPushHandler: VectorPushHandler
|
@Inject lateinit var vectorPushHandler: VectorPushHandler
|
||||||
|
@ -57,7 +58,10 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() {
|
||||||
* @param instance connection, for multi-account
|
* @param instance connection, for multi-account
|
||||||
*/
|
*/
|
||||||
override fun onMessage(context: Context, message: ByteArray, instance: String) {
|
override fun onMessage(context: Context, message: ByteArray, instance: String) {
|
||||||
vectorPushHandler.onMessage(String(message))
|
Timber.tag(loggerTag.value).d("New message")
|
||||||
|
pushParser.parsePushDataUnifiedPush(message)?.let {
|
||||||
|
vectorPushHandler.handle(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNewEndpoint(context: Context, endpoint: String, instance: String) {
|
override fun onNewEndpoint(context: Context, endpoint: String, instance: String) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue