From ee3abe7b9757d4618958022951247b75b2073a43 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 3 Mar 2025 14:15:21 +0100 Subject: [PATCH 01/12] Upgrade `com.github.UnifiedPush:android-connector` from 2.4.0 to 3.0.4 --- gradle/libs.versions.toml | 2 +- .../unifiedpush/RegisterUnifiedPushUseCase.kt | 2 +- .../UnregisterUnifiedPushUseCase.kt | 2 +- .../VectorUnifiedPushMessagingReceiver.kt | 23 +++++++++++-------- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 914c11473e0..47bb7d603fa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -177,7 +177,7 @@ sqldelight-driver-jvm = { module = "app.cash.sqldelight:sqlite-driver", version. sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" } sqlcipher = "net.zetetic:android-database-sqlcipher:4.5.4" sqlite = "androidx.sqlite:sqlite-ktx:2.5.0" -unifiedpush = "com.github.UnifiedPush:android-connector:2.4.0" +unifiedpush = "com.github.UnifiedPush:android-connector:3.0.4" otaliastudios_transcoder = "com.otaliastudios:transcoder:0.11.2" vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0" telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" } diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt index dc32dbff763..5df7c1e5c3a 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt @@ -33,7 +33,7 @@ class DefaultRegisterUnifiedPushUseCase @Inject constructor( UnifiedPush.saveDistributor(context, distributor.value) // This will trigger the callback // VectorUnifiedPushMessagingReceiver.onNewEndpoint - UnifiedPush.registerApp(context = context, instance = clientSecret) + UnifiedPush.register(context = context, instance = clientSecret) // Wait for VectorUnifiedPushMessagingReceiver.onNewEndpoint to proceed return runCatching { withTimeout(30.seconds) { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt index e41aa6a51f1..24b9676c11c 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt @@ -53,6 +53,6 @@ class DefaultUnregisterUnifiedPushUseCase @Inject constructor( override fun cleanup(clientSecret: String) { unifiedPushStore.storeUpEndpoint(clientSecret, null) unifiedPushStore.storePushGateway(clientSecret, null) - UnifiedPush.unregisterApp(context, clientSecret) + UnifiedPush.unregister(context, clientSecret) } } diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt index 684e08be5b3..7a3e2019628 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt @@ -16,7 +16,10 @@ import io.element.android.libraries.pushproviders.unifiedpush.registration.Endpo import io.element.android.libraries.pushproviders.unifiedpush.registration.RegistrationResult import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import org.unifiedpush.android.connector.FailedReason import org.unifiedpush.android.connector.MessagingReceiver +import org.unifiedpush.android.connector.data.PushEndpoint +import org.unifiedpush.android.connector.data.PushMessage import timber.log.Timber import javax.inject.Inject @@ -45,10 +48,10 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() { * @param message the message * @param instance connection, for multi-account */ - override fun onMessage(context: Context, message: ByteArray, instance: String) { - Timber.tag(loggerTag.value).w("New message") + override fun onMessage(context: Context, message: PushMessage, instance: String) { + Timber.tag(loggerTag.value).d("New message, correctly decrypted: ${message.decrypted}") coroutineScope.launch { - val pushData = pushParser.parse(message, instance) + val pushData = pushParser.parse(message.content, instance) if (pushData == null) { Timber.tag(loggerTag.value).w("Invalid data received from UnifiedPush") pushHandler.handleInvalid( @@ -68,20 +71,20 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() { * Called when a new endpoint is to be used for sending push messages. * You should send the endpoint to your application server and sync for missing notifications. */ - override fun onNewEndpoint(context: Context, endpoint: String, instance: String) { + override fun onNewEndpoint(context: Context, endpoint: PushEndpoint, instance: String) { Timber.tag(loggerTag.value).w("onNewEndpoint: $endpoint") coroutineScope.launch { - val gateway = unifiedPushGatewayResolver.getGateway(endpoint) + val gateway = unifiedPushGatewayResolver.getGateway(endpoint.url) .let { gatewayResult -> unifiedPushGatewayUrlResolver.resolve(gatewayResult, instance) } unifiedPushStore.storePushGateway(instance, gateway) - val result = newGatewayHandler.handle(endpoint, gateway, instance) + val result = newGatewayHandler.handle(endpoint.url, gateway, instance) .onFailure { Timber.tag(loggerTag.value).e(it, "Failed to handle new gateway") } .onSuccess { - unifiedPushStore.storeUpEndpoint(instance, endpoint) + unifiedPushStore.storeUpEndpoint(instance, endpoint.url) } endpointRegistrationHandler.registrationDone( RegistrationResult( @@ -96,8 +99,8 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() { /** * Called when the registration is not possible, eg. no network. */ - override fun onRegistrationFailed(context: Context, instance: String) { - Timber.tag(loggerTag.value).e("onRegistrationFailed for $instance") + override fun onRegistrationFailed(context: Context, reason: FailedReason, instance: String) { + Timber.tag(loggerTag.value).e("onRegistrationFailed for $instance, reason: $reason") /* Toast.makeText(context, "Push service registration failed", Toast.LENGTH_SHORT).show() val mode = BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME @@ -110,7 +113,7 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() { * Called when this application is unregistered from receiving push messages. */ override fun onUnregistered(context: Context, instance: String) { - Timber.tag(loggerTag.value).w("Unifiedpush: Unregistered") + Timber.tag(loggerTag.value).w("UnifiedPush: Unregistered") /* val mode = BackgroundSyncMode.FDROID_BACKGROUND_SYNC_MODE_FOR_REALTIME pushDataStore.setFdroidSyncBackgroundMode(mode) From 2dc96591f363e909d8318a5c18a97da9189ebc4f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Mar 2025 17:41:11 +0100 Subject: [PATCH 02/12] Do not use jitpack to get the unified push library --- gradle/libs.versions.toml | 2 +- settings.gradle.kts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 47bb7d603fa..434613e6fb8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -177,7 +177,7 @@ sqldelight-driver-jvm = { module = "app.cash.sqldelight:sqlite-driver", version. sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" } sqlcipher = "net.zetetic:android-database-sqlcipher:4.5.4" sqlite = "androidx.sqlite:sqlite-ktx:2.5.0" -unifiedpush = "com.github.UnifiedPush:android-connector:3.0.4" +unifiedpush = "org.unifiedpush.android:connector:3.0.4" otaliastudios_transcoder = "com.otaliastudios:transcoder:0.11.2" vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0" telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" } diff --git a/settings.gradle.kts b/settings.gradle.kts index d63017992fa..e594999bd8c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -39,7 +39,6 @@ dependencyResolutionManagement { maven { url = URI("https://www.jitpack.io") content { - includeModule("com.github.UnifiedPush", "android-connector") includeModule("com.github.matrix-org", "matrix-analytics-events") } } From 77a3826166eb800bb53f7bcc8b79f104614bc0fa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Mar 2025 17:52:52 +0100 Subject: [PATCH 03/12] implementation is ok --- libraries/pushproviders/unifiedpush/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index 1dec445c003..6abf133d269 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -42,7 +42,7 @@ dependencies { implementation(libs.serialization.json) // UnifiedPush library - api(libs.unifiedpush) + implementation(libs.unifiedpush) testImplementation(libs.coroutines.test) testImplementation(libs.test.junit) From f431ebe3b78a06282e0ee74c9f428702d463df45 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Mar 2025 18:57:33 +0100 Subject: [PATCH 04/12] Exclude com.google.crypto.tink to fix a compilation issue --- libraries/pushproviders/unifiedpush/build.gradle.kts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index 6abf133d269..2cbf68c6d4f 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -42,7 +42,13 @@ dependencies { implementation(libs.serialization.json) // UnifiedPush library - implementation(libs.unifiedpush) + implementation(libs.unifiedpush) { + // Exclude package com.google.crypto.tink + // Duplicate classes between + // tink-1.16.0.jar -> tink-1.16.0 (com.google.crypto.tink:tink:1.16.0) + // tink-android-1.8.0.jar tink-android-1.8.0 (com.google.crypto.tink:tink-android:1.8.0) + exclude(group = "com.google.crypto.tink", module = "tink") + } testImplementation(libs.coroutines.test) testImplementation(libs.test.junit) From 791c90a1e6305a4b3599910b7aa5c408d2ace17f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 4 Mar 2025 22:15:46 +0100 Subject: [PATCH 05/12] Fix tests. --- .../VectorUnifiedPushMessagingReceiverTest.kt | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverTest.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverTest.kt index bcacdc3d7a8..5bb0a6731fc 100644 --- a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverTest.kt +++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverTest.kt @@ -32,6 +32,10 @@ import org.junit.Assert.assertThrows import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner +import org.unifiedpush.android.connector.FailedReason +import org.unifiedpush.android.connector.data.PublicKeySet +import org.unifiedpush.android.connector.data.PushEndpoint +import org.unifiedpush.android.connector.data.PushMessage @RunWith(RobolectricTestRunner::class) class VectorUnifiedPushMessagingReceiverTest { @@ -56,7 +60,7 @@ class VectorUnifiedPushMessagingReceiverTest { fun `onRegistrationFailed does nothing`() = runTest { val context = InstrumentationRegistry.getInstrumentation().context val vectorUnifiedPushMessagingReceiver = createVectorUnifiedPushMessagingReceiver() - vectorUnifiedPushMessagingReceiver.onRegistrationFailed(context, A_SECRET) + vectorUnifiedPushMessagingReceiver.onRegistrationFailed(context, FailedReason.NETWORK, A_SECRET) } @Test @@ -68,7 +72,7 @@ class VectorUnifiedPushMessagingReceiverTest { handleResult = pushHandlerResult ), ) - vectorUnifiedPushMessagingReceiver.onMessage(context, UnifiedPushParserTest.UNIFIED_PUSH_DATA.toByteArray(), A_SECRET) + vectorUnifiedPushMessagingReceiver.onMessage(context, aPushMessage(), A_SECRET) advanceUntilIdle() pushHandlerResult.assertions() .isCalledOnce() @@ -96,7 +100,7 @@ class VectorUnifiedPushMessagingReceiverTest { handleInvalidResult = handleInvalidResult, ), ) - vectorUnifiedPushMessagingReceiver.onMessage(context, "".toByteArray(), A_SECRET) + vectorUnifiedPushMessagingReceiver.onMessage(context, aPushMessage(""), A_SECRET) advanceUntilIdle() handleInvalidResult.assertions().isCalledOnce() } @@ -127,7 +131,7 @@ class VectorUnifiedPushMessagingReceiverTest { unifiedPushNewGatewayHandler = unifiedPushNewGatewayHandler, ) endpointRegistrationHandler.state.test { - vectorUnifiedPushMessagingReceiver.onNewEndpoint(context, "anEndpoint", A_SECRET) + vectorUnifiedPushMessagingReceiver.onNewEndpoint(context, aPushEndpoint("anEndpoint"), A_SECRET) advanceUntilIdle() assertThat(awaitItem()).isEqualTo( RegistrationResult( @@ -170,7 +174,7 @@ class VectorUnifiedPushMessagingReceiverTest { unifiedPushNewGatewayHandler = unifiedPushNewGatewayHandler, ) endpointRegistrationHandler.state.test { - vectorUnifiedPushMessagingReceiver.onNewEndpoint(context, "anEndpoint", A_SECRET) + vectorUnifiedPushMessagingReceiver.onNewEndpoint(context, aPushEndpoint(), A_SECRET) advanceUntilIdle() assertThat(awaitItem()).isEqualTo( RegistrationResult( @@ -207,3 +211,19 @@ class VectorUnifiedPushMessagingReceiverTest { } } } + +private fun aPushMessage( + data: String = UnifiedPushParserTest.UNIFIED_PUSH_DATA, + decrypted: Boolean = true, +) = PushMessage( + content = data.toByteArray(), + decrypted = decrypted, +) + +private fun aPushEndpoint( + url: String = "anEndpoint", + pubKeySet: PublicKeySet? = null, +) = PushEndpoint( + url = url, + pubKeySet = pubKeySet, +) From ea36ff6a3604b8c2a2be0ea9123e8874163adb5a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 13 Mar 2025 09:53:40 +0100 Subject: [PATCH 06/12] Update log. --- .../unifiedpush/VectorUnifiedPushMessagingReceiver.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt index 7a3e2019628..c249a8cd6d5 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt @@ -49,7 +49,7 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() { * @param instance connection, for multi-account */ override fun onMessage(context: Context, message: PushMessage, instance: String) { - Timber.tag(loggerTag.value).d("New message, correctly decrypted: ${message.decrypted}") + Timber.tag(loggerTag.value).d("New message, decrypted: ${message.decrypted}") coroutineScope.launch { val pushData = pushParser.parse(message.content, instance) if (pushData == null) { From 57283a89c2ac878c53183cb75a1546218cee80a3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 17 Apr 2025 17:12:19 +0200 Subject: [PATCH 07/12] Revert "Exclude com.google.crypto.tink to fix a compilation issue" This reverts commit f431ebe3b78a06282e0ee74c9f428702d463df45. --- libraries/pushproviders/unifiedpush/build.gradle.kts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index 2cbf68c6d4f..6abf133d269 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -42,13 +42,7 @@ dependencies { implementation(libs.serialization.json) // UnifiedPush library - implementation(libs.unifiedpush) { - // Exclude package com.google.crypto.tink - // Duplicate classes between - // tink-1.16.0.jar -> tink-1.16.0 (com.google.crypto.tink:tink:1.16.0) - // tink-android-1.8.0.jar tink-android-1.8.0 (com.google.crypto.tink:tink-android:1.8.0) - exclude(group = "com.google.crypto.tink", module = "tink") - } + implementation(libs.unifiedpush) testImplementation(libs.coroutines.test) testImplementation(libs.test.junit) From 806f7ed29db872f154bf67fa4942f57df0f4724f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 17 Apr 2025 17:20:03 +0200 Subject: [PATCH 08/12] Fix compilation issue after rebase. --- .../unifiedpush/VectorUnifiedPushMessagingReceiver.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt index c249a8cd6d5..9cb7e8e60f7 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt @@ -56,7 +56,7 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() { Timber.tag(loggerTag.value).w("Invalid data received from UnifiedPush") pushHandler.handleInvalid( providerInfo = "${UnifiedPushConfig.NAME} - $instance", - data = String(message), + data = String(message.content), ) } else { pushHandler.handle( From 8410b44887b031eaf767828b6580dbc9287e4a76 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 18 Apr 2025 09:49:28 +0200 Subject: [PATCH 09/12] Exclude com.google.crypto.tink again. --- libraries/pushproviders/unifiedpush/build.gradle.kts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index 6abf133d269..5451c2aa703 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -42,7 +42,13 @@ dependencies { implementation(libs.serialization.json) // UnifiedPush library - implementation(libs.unifiedpush) + implementation(libs.unifiedpush) { + // Exclude package com.google.crypto.tink + // Duplicate classes between + // tink-1.16.0.jar -> tink-1.16.0 (com.google.crypto.tink:tink:1.16.0) + // tink-android-1.17.0.jar tink-android-1.8.0 (com.google.crypto.tink:tink-android:1.17.0) + exclude(group = "com.google.crypto.tink", module = "tink") + } testImplementation(libs.coroutines.test) testImplementation(libs.test.junit) From c6c897ccde8d86271806416d2f81dfd9186e655d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 23 Apr 2025 15:41:58 +0200 Subject: [PATCH 10/12] Try version 3.0.8 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 434613e6fb8..4d02cc35cd0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -177,7 +177,7 @@ sqldelight-driver-jvm = { module = "app.cash.sqldelight:sqlite-driver", version. sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" } sqlcipher = "net.zetetic:android-database-sqlcipher:4.5.4" sqlite = "androidx.sqlite:sqlite-ktx:2.5.0" -unifiedpush = "org.unifiedpush.android:connector:3.0.4" +unifiedpush = "org.unifiedpush.android:connector:3.0.8" otaliastudios_transcoder = "com.otaliastudios:transcoder:0.11.2" vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0" telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" } From 3010e0ea18fbd36c97e510ceb33385bf829c73cf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 May 2025 13:17:12 +0200 Subject: [PATCH 11/12] Use latest version 3.0.9 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4d02cc35cd0..a3043002e4d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -177,7 +177,7 @@ sqldelight-driver-jvm = { module = "app.cash.sqldelight:sqlite-driver", version. sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" } sqlcipher = "net.zetetic:android-database-sqlcipher:4.5.4" sqlite = "androidx.sqlite:sqlite-ktx:2.5.0" -unifiedpush = "org.unifiedpush.android:connector:3.0.8" +unifiedpush = "org.unifiedpush.android:connector:3.0.9" otaliastudios_transcoder = "com.otaliastudios:transcoder:0.11.2" vanniktech_blurhash = "com.vanniktech:blurhash:0.3.0" telephoto_zoomableimage = { module = "me.saket.telephoto:zoomable-image-coil", version.ref = "telephoto" } From 4168d9387b6994eed0edf94595ca722689edca29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Fri, 23 May 2025 16:48:06 +0200 Subject: [PATCH 12/12] Replace tink exclusion with dependency resolution --- app/build.gradle.kts | 9 +++++++++ libraries/pushproviders/unifiedpush/build.gradle.kts | 9 +-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8e6d68bada4..d06fb37cb3c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -337,3 +337,12 @@ fun Project.configureLicensesTasks(reportingExtension: ReportingExtension) { } } } + +configurations.all { + resolutionStrategy { + dependencySubstitution { + val tink = libs.google.tink.get() + substitute(module("com.google.crypto.tink:tink")).using(module("${tink.group}:${tink.name}:${tink.version}")) + } + } +} diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index 5451c2aa703..c98d98f64eb 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -42,14 +42,7 @@ dependencies { implementation(libs.serialization.json) // UnifiedPush library - implementation(libs.unifiedpush) { - // Exclude package com.google.crypto.tink - // Duplicate classes between - // tink-1.16.0.jar -> tink-1.16.0 (com.google.crypto.tink:tink:1.16.0) - // tink-android-1.17.0.jar tink-android-1.8.0 (com.google.crypto.tink:tink-android:1.17.0) - exclude(group = "com.google.crypto.tink", module = "tink") - } - + implementation(libs.unifiedpush) testImplementation(libs.coroutines.test) testImplementation(libs.test.junit) testImplementation(libs.test.robolectric)