From 5cab146eed5c4cbf918fcfb952424fc648c31050 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 12 Mar 2025 17:10:33 +0100 Subject: [PATCH] Give ability to configure the UnifiedPush default push gateway. --- .../enterprise/api/EnterpriseService.kt | 1 + .../impl/DefaultEnterpriseService.kt | 1 + .../enterprise/test/FakeEnterpriseService.kt | 5 ++++ .../unifiedpush/build.gradle.kts | 2 ++ .../DefaultPushGatewayHttpUrlProvider.kt | 26 +++++++++++++++++++ .../UnifiedPushGatewayUrlResolver.kt | 3 ++- ...efaultUnifiedPushGatewayUrlResolverTest.kt | 6 +++-- .../FakeDefaultPushGatewayHttpUrlProvider.kt | 18 +++++++++++++ 8 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt create mode 100644 libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeDefaultPushGatewayHttpUrlProvider.kt diff --git a/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt b/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt index 12c7d6f21d..9c1cb8b981 100644 --- a/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt +++ b/features/enterprise/api/src/main/kotlin/io/element/android/features/enterprise/api/EnterpriseService.kt @@ -19,4 +19,5 @@ interface EnterpriseService { fun semanticColorsDark(): SemanticColors fun firebasePushGateway(): String? + fun unifiedPushDefaultPushGateway(): String? } diff --git a/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt b/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt index f2fe0df49c..2d66bb3968 100644 --- a/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt +++ b/features/enterprise/impl/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt @@ -29,4 +29,5 @@ class DefaultEnterpriseService @Inject constructor() : EnterpriseService { override fun semanticColorsDark(): SemanticColors = compoundColorsDark override fun firebasePushGateway(): String? = null + override fun unifiedPushDefaultPushGateway(): String? = null } diff --git a/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt b/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt index 2dfe4165bf..ae71bf6b76 100644 --- a/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt +++ b/features/enterprise/test/src/main/kotlin/io/element/android/features/enterprise/test/FakeEnterpriseService.kt @@ -20,6 +20,7 @@ class FakeEnterpriseService( private val semanticColorsLightResult: () -> SemanticColors = { lambdaError() }, private val semanticColorsDarkResult: () -> SemanticColors = { lambdaError() }, private val firebasePushGatewayResult: () -> String? = { lambdaError() }, + private val unifiedPushDefaultPushGatewayResult: () -> String? = { lambdaError() }, ) : EnterpriseService { override suspend fun isEnterpriseUser(sessionId: SessionId): Boolean = simulateLongTask { isEnterpriseUserResult(sessionId) @@ -41,6 +42,10 @@ class FakeEnterpriseService( return firebasePushGatewayResult() } + override fun unifiedPushDefaultPushGateway(): String? { + return unifiedPushDefaultPushGatewayResult() + } + companion object { const val A_FAKE_HOMESERVER = "a_fake_homeserver" } diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index fd502263e9..db8ced9a78 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -19,6 +19,7 @@ setupAnvil() dependencies { implementation(libs.dagger) + implementation(projects.features.enterprise.api) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) implementation(projects.libraries.matrix.api) @@ -48,6 +49,7 @@ dependencies { testImplementation(libs.test.robolectric) testImplementation(libs.test.truth) testImplementation(libs.test.turbine) + testImplementation(projects.features.enterprise.test) testImplementation(projects.libraries.matrix.test) testImplementation(projects.libraries.push.test) testImplementation(projects.libraries.pushproviders.test) diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt new file mode 100644 index 0000000000..af434c3020 --- /dev/null +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.pushproviders.unifiedpush + +import com.squareup.anvil.annotations.ContributesBinding +import io.element.android.features.enterprise.api.EnterpriseService +import io.element.android.libraries.di.AppScope +import javax.inject.Inject + +interface DefaultPushGatewayHttpUrlProvider { + fun provide(): String +} + +@ContributesBinding(AppScope::class) +class DefaultDefaultPushGatewayHttpUrlProvider @Inject constructor( + private val enterpriseService: EnterpriseService, +) : DefaultPushGatewayHttpUrlProvider { + override fun provide(): String { + return enterpriseService.unifiedPushDefaultPushGateway() ?: UnifiedPushConfig.DEFAULT_PUSH_GATEWAY_HTTP_URL + } +} diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt index 918db35e4e..e7e31cfd67 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt @@ -21,6 +21,7 @@ interface UnifiedPushGatewayUrlResolver { @ContributesBinding(AppScope::class) class DefaultUnifiedPushGatewayUrlResolver @Inject constructor( private val unifiedPushStore: UnifiedPushStore, + private val defaultPushGatewayHttpUrlProvider: DefaultPushGatewayHttpUrlProvider, ) : UnifiedPushGatewayUrlResolver { override fun resolve( gatewayResult: UnifiedPushGatewayResolverResult, @@ -33,7 +34,7 @@ class DefaultUnifiedPushGatewayUrlResolver @Inject constructor( } UnifiedPushGatewayResolverResult.ErrorInvalidUrl, UnifiedPushGatewayResolverResult.NoMatrixGateway -> { - UnifiedPushConfig.DEFAULT_PUSH_GATEWAY_HTTP_URL + defaultPushGatewayHttpUrlProvider.provide() } is UnifiedPushGatewayResolverResult.Success -> { gatewayResult.gateway diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnifiedPushGatewayUrlResolverTest.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnifiedPushGatewayUrlResolverTest.kt index 7edc223f73..27008d96ec 100644 --- a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnifiedPushGatewayUrlResolverTest.kt +++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultUnifiedPushGatewayUrlResolverTest.kt @@ -18,7 +18,7 @@ class DefaultUnifiedPushGatewayUrlResolverTest { gatewayResult = UnifiedPushGatewayResolverResult.ErrorInvalidUrl, instance = "", ) - assertThat(result).isEqualTo(UnifiedPushConfig.DEFAULT_PUSH_GATEWAY_HTTP_URL) + assertThat(result).isEqualTo(A_UNIFIED_PUSH_GATEWAY) } @Test @@ -28,7 +28,7 @@ class DefaultUnifiedPushGatewayUrlResolverTest { gatewayResult = UnifiedPushGatewayResolverResult.NoMatrixGateway, instance = "", ) - assertThat(result).isEqualTo(UnifiedPushConfig.DEFAULT_PUSH_GATEWAY_HTTP_URL) + assertThat(result).isEqualTo(A_UNIFIED_PUSH_GATEWAY) } @Test @@ -77,7 +77,9 @@ class DefaultUnifiedPushGatewayUrlResolverTest { private fun createDefaultUnifiedPushGatewayUrlResolver( unifiedPushStore: UnifiedPushStore = FakeUnifiedPushStore(), + defaultPushGatewayHttpUrlProvider: DefaultPushGatewayHttpUrlProvider = FakeDefaultPushGatewayHttpUrlProvider(), ) = DefaultUnifiedPushGatewayUrlResolver( unifiedPushStore = unifiedPushStore, + defaultPushGatewayHttpUrlProvider = defaultPushGatewayHttpUrlProvider, ) } diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeDefaultPushGatewayHttpUrlProvider.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeDefaultPushGatewayHttpUrlProvider.kt new file mode 100644 index 0000000000..de0a293fc2 --- /dev/null +++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/FakeDefaultPushGatewayHttpUrlProvider.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.libraries.pushproviders.unifiedpush + +const val A_UNIFIED_PUSH_GATEWAY = "aGateway" + +class FakeDefaultPushGatewayHttpUrlProvider( + private val provideResult: () -> String = { A_UNIFIED_PUSH_GATEWAY } +) : DefaultPushGatewayHttpUrlProvider { + override fun provide(): String { + return provideResult() + } +}