From 90eeb6cdb1af696b4b4bd8ae8bc1e23cff0cf9fc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 17 Jun 2024 17:22:11 +0200 Subject: [PATCH] Update PushProvider API, remove `isAvailable()`, but instead rely on `getDistributors()` to eventually return an empty list of Distributors. --- .../android/libraries/push/api/PushService.kt | 3 +- .../libraries/push/impl/DefaultPushService.kt | 1 - .../pushproviders/api/PushProvider.kt | 4 +-- .../firebase/FirebasePushProvider.kt | 8 ++--- .../firebase/FirebasePushProviderTest.kt | 31 ++++++++----------- .../pushproviders/test/FakePushProvider.kt | 2 -- .../unifiedpush/UnifiedPushProvider.kt | 11 ------- .../unifiedpush/UnifiedPushProviderTest.kt | 2 -- 8 files changed, 18 insertions(+), 44 deletions(-) diff --git a/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt b/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt index 7212f0534a..af21bd1168 100644 --- a/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt +++ b/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt @@ -29,8 +29,7 @@ interface PushService { suspend fun getCurrentPushProvider(): PushProvider? /** - * Return the list of push providers, available at compile time, and - * available at runtime, sorted by index. + * Return the list of push providers, available at compile time, sorted by index. */ fun getAvailablePushProviders(): List diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt index b6efaa2c71..46105a68db 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt @@ -44,7 +44,6 @@ class DefaultPushService @Inject constructor( override fun getAvailablePushProviders(): List { return pushProviders - .filter { it.isAvailable() } .sortedBy { it.index } } diff --git a/libraries/pushproviders/api/src/main/kotlin/io/element/android/libraries/pushproviders/api/PushProvider.kt b/libraries/pushproviders/api/src/main/kotlin/io/element/android/libraries/pushproviders/api/PushProvider.kt index d111dc139f..763c4fa88a 100644 --- a/libraries/pushproviders/api/src/main/kotlin/io/element/android/libraries/pushproviders/api/PushProvider.kt +++ b/libraries/pushproviders/api/src/main/kotlin/io/element/android/libraries/pushproviders/api/PushProvider.kt @@ -33,10 +33,8 @@ interface PushProvider { val name: String /** - * Return true if the push provider is available on this device. + * Return the list of available distributors. */ - fun isAvailable(): Boolean - fun getDistributors(): List /** diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt index 0228f8f74b..f12de0f4d2 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt @@ -38,12 +38,10 @@ class FirebasePushProvider @Inject constructor( override val index = FirebaseConfig.INDEX override val name = FirebaseConfig.NAME - override fun isAvailable(): Boolean { - return isPlayServiceAvailable.isAvailable() - } - override fun getDistributors(): List { - return listOf(firebaseDistributor) + return listOfNotNull( + firebaseDistributor.takeIf { isPlayServiceAvailable.isAvailable() } + ) } override suspend fun registerWith(matrixClient: MatrixClient, distributor: Distributor): Result { diff --git a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt index 880be2f053..75e77d9fd9 100644 --- a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt +++ b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProviderTest.kt @@ -38,12 +38,23 @@ class FirebasePushProviderTest { } @Test - fun `getDistributors return the unique distributor`() { - val firebasePushProvider = createFirebasePushProvider() + fun `getDistributors return the unique distributor if available`() { + val firebasePushProvider = createFirebasePushProvider( + isPlayServiceAvailable = FakeIsPlayServiceAvailable(isAvailable = true) + ) val result = firebasePushProvider.getDistributors() assertThat(result).containsExactly(Distributor("Firebase", "Firebase")) } + @Test + fun `getDistributors return empty list if service is not available`() { + val firebasePushProvider = createFirebasePushProvider( + isPlayServiceAvailable = FakeIsPlayServiceAvailable(isAvailable = false) + ) + val result = firebasePushProvider.getDistributors() + assertThat(result).isEmpty() + } + @Test fun `getCurrentDistributor always return the unique distributor`() = runTest { val firebasePushProvider = createFirebasePushProvider() @@ -51,22 +62,6 @@ class FirebasePushProviderTest { assertThat(result).isEqualTo(Distributor("Firebase", "Firebase")) } - @Test - fun `isAvailable true`() { - val firebasePushProvider = createFirebasePushProvider( - isPlayServiceAvailable = FakeIsPlayServiceAvailable(isAvailable = true) - ) - assertThat(firebasePushProvider.isAvailable()).isTrue() - } - - @Test - fun `isAvailable false`() { - val firebasePushProvider = createFirebasePushProvider( - isPlayServiceAvailable = FakeIsPlayServiceAvailable(isAvailable = false) - ) - assertThat(firebasePushProvider.isAvailable()).isFalse() - } - @Test fun `register ok`() = runTest { val matrixClient = FakeMatrixClient() diff --git a/libraries/pushproviders/test/src/main/kotlin/io/element/android/libraries/pushproviders/test/FakePushProvider.kt b/libraries/pushproviders/test/src/main/kotlin/io/element/android/libraries/pushproviders/test/FakePushProvider.kt index 4f83cde911..cd68568d66 100644 --- a/libraries/pushproviders/test/src/main/kotlin/io/element/android/libraries/pushproviders/test/FakePushProvider.kt +++ b/libraries/pushproviders/test/src/main/kotlin/io/element/android/libraries/pushproviders/test/FakePushProvider.kt @@ -25,14 +25,12 @@ import io.element.android.tests.testutils.lambda.lambdaError class FakePushProvider( override val index: Int = 0, override val name: String = "aFakePushProvider", - private val isAvailable: Boolean = true, private val distributors: List = listOf(Distributor("aDistributorValue", "aDistributorName")), private val currentDistributor: () -> Distributor? = { distributors.firstOrNull() }, private val currentUserPushConfig: CurrentUserPushConfig? = null, private val registerWithResult: (MatrixClient, Distributor) -> Result = { _, _ -> lambdaError() }, private val unregisterWithResult: (MatrixClient) -> Result = { lambdaError() }, ) : PushProvider { - override fun isAvailable(): Boolean = isAvailable override fun getDistributors(): List = distributors diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt index 4530a4667f..f302a6016f 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt @@ -43,17 +43,6 @@ class UnifiedPushProvider @Inject constructor( override val index = UnifiedPushConfig.INDEX override val name = UnifiedPushConfig.NAME - override fun isAvailable(): Boolean { - val isAvailable = getDistributors().isNotEmpty() - return if (isAvailable) { - Timber.tag(loggerTag.value).d("UnifiedPush is available") - true - } else { - Timber.tag(loggerTag.value).w("UnifiedPush is not available") - false - } - } - override fun getDistributors(): List { return unifiedPushDistributorProvider.getDistributors() } diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProviderTest.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProviderTest.kt index 826f08a1b0..0e3bf1655c 100644 --- a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProviderTest.kt +++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProviderTest.kt @@ -58,7 +58,6 @@ class UnifiedPushProviderTest { ) val result = unifiedPushProvider.getDistributors() assertThat(result).containsExactly(Distributor("value", "Name")) - assertThat(unifiedPushProvider.isAvailable()).isTrue() } @Test @@ -70,7 +69,6 @@ class UnifiedPushProviderTest { ) val result = unifiedPushProvider.getDistributors() assertThat(result).isEmpty() - assertThat(unifiedPushProvider.isAvailable()).isFalse() } @Test