Skip to content

Commit 61075c7

Browse files
bmartyjmartinesp
andauthored
Update UnifiedPush library (#4358)
* Upgrade `com.github.UnifiedPush:android-connector` from 2.4.0 to 3.0.4 * Do not use jitpack to get the unified push library * implementation is ok * Exclude com.google.crypto.tink to fix a compilation issue * Fix tests. * Update log. * Revert "Exclude com.google.crypto.tink to fix a compilation issue" This reverts commit f431ebe. * Fix compilation issue after rebase. * Exclude com.google.crypto.tink again. * Try version 3.0.8 * Use latest version 3.0.9 * Replace tink exclusion with dependency resolution --------- Co-authored-by: Jorge Martín <jorgem@element.io>
1 parent 7306154 commit 61075c7

8 files changed

Lines changed: 52 additions & 22 deletions

File tree

app/build.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,3 +354,12 @@ fun Project.configureLicensesTasks(reportingExtension: ReportingExtension) {
354354
}
355355
}
356356
}
357+
358+
configurations.all {
359+
resolutionStrategy {
360+
dependencySubstitution {
361+
val tink = libs.google.tink.get()
362+
substitute(module("com.google.crypto.tink:tink")).using(module("${tink.group}:${tink.name}:${tink.version}"))
363+
}
364+
}
365+
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ sqldelight-driver-jvm = { module = "app.cash.sqldelight:sqlite-driver", version.
177177
sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" }
178178
sqlcipher = "net.zetetic:android-database-sqlcipher:4.5.4"
179179
sqlite = "androidx.sqlite:sqlite-ktx:2.5.1"
180-
unifiedpush = "com.github.UnifiedPush:android-connector:2.4.0"
180+
unifiedpush = "org.unifiedpush.android:connector:3.0.9"
181181
otaliastudios_transcoder = "com.otaliastudios:transcoder:0.11.2"
182182
vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0"
183183
telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" }

libraries/pushproviders/unifiedpush/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ dependencies {
4242
implementation(libs.serialization.json)
4343

4444
// UnifiedPush library
45-
api(libs.unifiedpush)
46-
45+
implementation(libs.unifiedpush)
4746
testImplementation(libs.coroutines.test)
4847
testImplementation(libs.test.junit)
4948
testImplementation(libs.test.robolectric)

libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class DefaultRegisterUnifiedPushUseCase @Inject constructor(
3333
UnifiedPush.saveDistributor(context, distributor.value)
3434
// This will trigger the callback
3535
// VectorUnifiedPushMessagingReceiver.onNewEndpoint
36-
UnifiedPush.registerApp(context = context, instance = clientSecret)
36+
UnifiedPush.register(context = context, instance = clientSecret)
3737
// Wait for VectorUnifiedPushMessagingReceiver.onNewEndpoint to proceed
3838
return runCatching {
3939
withTimeout(30.seconds) {

libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,6 @@ class DefaultUnregisterUnifiedPushUseCase @Inject constructor(
5353
override fun cleanup(clientSecret: String) {
5454
unifiedPushStore.storeUpEndpoint(clientSecret, null)
5555
unifiedPushStore.storePushGateway(clientSecret, null)
56-
UnifiedPush.unregisterApp(context, clientSecret)
56+
UnifiedPush.unregister(context, clientSecret)
5757
}
5858
}

libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ import io.element.android.libraries.pushproviders.unifiedpush.registration.Endpo
1616
import io.element.android.libraries.pushproviders.unifiedpush.registration.RegistrationResult
1717
import kotlinx.coroutines.CoroutineScope
1818
import kotlinx.coroutines.launch
19+
import org.unifiedpush.android.connector.FailedReason
1920
import org.unifiedpush.android.connector.MessagingReceiver
21+
import org.unifiedpush.android.connector.data.PushEndpoint
22+
import org.unifiedpush.android.connector.data.PushMessage
2023
import timber.log.Timber
2124
import javax.inject.Inject
2225

@@ -45,15 +48,15 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() {
4548
* @param message the message
4649
* @param instance connection, for multi-account
4750
*/
48-
override fun onMessage(context: Context, message: ByteArray, instance: String) {
49-
Timber.tag(loggerTag.value).w("New message")
51+
override fun onMessage(context: Context, message: PushMessage, instance: String) {
52+
Timber.tag(loggerTag.value).d("New message, decrypted: ${message.decrypted}")
5053
coroutineScope.launch {
51-
val pushData = pushParser.parse(message, instance)
54+
val pushData = pushParser.parse(message.content, instance)
5255
if (pushData == null) {
5356
Timber.tag(loggerTag.value).w("Invalid data received from UnifiedPush")
5457
pushHandler.handleInvalid(
5558
providerInfo = "${UnifiedPushConfig.NAME} - $instance",
56-
data = String(message),
59+
data = String(message.content),
5760
)
5861
} else {
5962
pushHandler.handle(
@@ -68,20 +71,20 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() {
6871
* Called when a new endpoint is to be used for sending push messages.
6972
* You should send the endpoint to your application server and sync for missing notifications.
7073
*/
71-
override fun onNewEndpoint(context: Context, endpoint: String, instance: String) {
74+
override fun onNewEndpoint(context: Context, endpoint: PushEndpoint, instance: String) {
7275
Timber.tag(loggerTag.value).w("onNewEndpoint: $endpoint")
7376
coroutineScope.launch {
74-
val gateway = unifiedPushGatewayResolver.getGateway(endpoint)
77+
val gateway = unifiedPushGatewayResolver.getGateway(endpoint.url)
7578
.let { gatewayResult ->
7679
unifiedPushGatewayUrlResolver.resolve(gatewayResult, instance)
7780
}
7881
unifiedPushStore.storePushGateway(instance, gateway)
79-
val result = newGatewayHandler.handle(endpoint, gateway, instance)
82+
val result = newGatewayHandler.handle(endpoint.url, gateway, instance)
8083
.onFailure {
8184
Timber.tag(loggerTag.value).e(it, "Failed to handle new gateway")
8285
}
8386
.onSuccess {
84-
unifiedPushStore.storeUpEndpoint(instance, endpoint)
87+
unifiedPushStore.storeUpEndpoint(instance, endpoint.url)
8588
}
8689
endpointRegistrationHandler.registrationDone(
8790
RegistrationResult(
@@ -96,8 +99,8 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() {
9699
/**
97100
* Called when the registration is not possible, eg. no network.
98101
*/
99-
override fun onRegistrationFailed(context: Context, instance: String) {
100-
Timber.tag(loggerTag.value).e("onRegistrationFailed for $instance")
102+
override fun onRegistrationFailed(context: Context, reason: FailedReason, instance: String) {
103+
Timber.tag(loggerTag.value).e("onRegistrationFailed for $instance, reason: $reason")
101104
/*
102105
Toast.makeText(context, "Push service registration failed", Toast.LENGTH_SHORT).show()
103106
val mode = BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME
@@ -110,7 +113,7 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() {
110113
* Called when this application is unregistered from receiving push messages.
111114
*/
112115
override fun onUnregistered(context: Context, instance: String) {
113-
Timber.tag(loggerTag.value).w("Unifiedpush: Unregistered")
116+
Timber.tag(loggerTag.value).w("UnifiedPush: Unregistered")
114117
/*
115118
val mode = BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME
116119
pushDataStore.setFdroidSyncBackgroundMode(mode)

libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverTest.kt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ import org.junit.Assert.assertThrows
3232
import org.junit.Test
3333
import org.junit.runner.RunWith
3434
import org.robolectric.RobolectricTestRunner
35+
import org.unifiedpush.android.connector.FailedReason
36+
import org.unifiedpush.android.connector.data.PublicKeySet
37+
import org.unifiedpush.android.connector.data.PushEndpoint
38+
import org.unifiedpush.android.connector.data.PushMessage
3539

3640
@RunWith(RobolectricTestRunner::class)
3741
class VectorUnifiedPushMessagingReceiverTest {
@@ -56,7 +60,7 @@ class VectorUnifiedPushMessagingReceiverTest {
5660
fun `onRegistrationFailed does nothing`() = runTest {
5761
val context = InstrumentationRegistry.getInstrumentation().context
5862
val vectorUnifiedPushMessagingReceiver = createVectorUnifiedPushMessagingReceiver()
59-
vectorUnifiedPushMessagingReceiver.onRegistrationFailed(context, A_SECRET)
63+
vectorUnifiedPushMessagingReceiver.onRegistrationFailed(context, FailedReason.NETWORK, A_SECRET)
6064
}
6165

6266
@Test
@@ -68,7 +72,7 @@ class VectorUnifiedPushMessagingReceiverTest {
6872
handleResult = pushHandlerResult
6973
),
7074
)
71-
vectorUnifiedPushMessagingReceiver.onMessage(context, UnifiedPushParserTest.UNIFIED_PUSH_DATA.toByteArray(), A_SECRET)
75+
vectorUnifiedPushMessagingReceiver.onMessage(context, aPushMessage(), A_SECRET)
7276
advanceUntilIdle()
7377
pushHandlerResult.assertions()
7478
.isCalledOnce()
@@ -96,7 +100,7 @@ class VectorUnifiedPushMessagingReceiverTest {
96100
handleInvalidResult = handleInvalidResult,
97101
),
98102
)
99-
vectorUnifiedPushMessagingReceiver.onMessage(context, "".toByteArray(), A_SECRET)
103+
vectorUnifiedPushMessagingReceiver.onMessage(context, aPushMessage(""), A_SECRET)
100104
advanceUntilIdle()
101105
handleInvalidResult.assertions().isCalledOnce()
102106
}
@@ -127,7 +131,7 @@ class VectorUnifiedPushMessagingReceiverTest {
127131
unifiedPushNewGatewayHandler = unifiedPushNewGatewayHandler,
128132
)
129133
endpointRegistrationHandler.state.test {
130-
vectorUnifiedPushMessagingReceiver.onNewEndpoint(context, "anEndpoint", A_SECRET)
134+
vectorUnifiedPushMessagingReceiver.onNewEndpoint(context, aPushEndpoint("anEndpoint"), A_SECRET)
131135
advanceUntilIdle()
132136
assertThat(awaitItem()).isEqualTo(
133137
RegistrationResult(
@@ -170,7 +174,7 @@ class VectorUnifiedPushMessagingReceiverTest {
170174
unifiedPushNewGatewayHandler = unifiedPushNewGatewayHandler,
171175
)
172176
endpointRegistrationHandler.state.test {
173-
vectorUnifiedPushMessagingReceiver.onNewEndpoint(context, "anEndpoint", A_SECRET)
177+
vectorUnifiedPushMessagingReceiver.onNewEndpoint(context, aPushEndpoint(), A_SECRET)
174178
advanceUntilIdle()
175179
assertThat(awaitItem()).isEqualTo(
176180
RegistrationResult(
@@ -207,3 +211,19 @@ class VectorUnifiedPushMessagingReceiverTest {
207211
}
208212
}
209213
}
214+
215+
private fun aPushMessage(
216+
data: String = UnifiedPushParserTest.UNIFIED_PUSH_DATA,
217+
decrypted: Boolean = true,
218+
) = PushMessage(
219+
content = data.toByteArray(),
220+
decrypted = decrypted,
221+
)
222+
223+
private fun aPushEndpoint(
224+
url: String = "anEndpoint",
225+
pubKeySet: PublicKeySet? = null,
226+
) = PushEndpoint(
227+
url = url,
228+
pubKeySet = pubKeySet,
229+
)

settings.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ dependencyResolutionManagement {
3939
maven {
4040
url = URI("https://www.jitpack.io")
4141
content {
42-
includeModule("com.github.UnifiedPush", "android-connector")
4342
includeModule("com.github.matrix-org", "matrix-analytics-events")
4443
}
4544
}

0 commit comments

Comments
 (0)