Give ability to configure the Firebase push gateway.

This commit is contained in:
Benoit Marty 2025-03-12 16:50:12 +01:00
parent 3ca624648b
commit cf60f943a8
10 changed files with 70 additions and 11 deletions

View file

@ -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.firebase
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 FirebaseGatewayProvider {
fun getFirebaseGateway(): String
}
@ContributesBinding(AppScope::class)
class DefaultFirebaseGatewayProvider @Inject constructor(
private val enterpriseService: EnterpriseService,
) : FirebaseGatewayProvider {
override fun getFirebaseGateway(): String {
return enterpriseService.firebasePushGateway() ?: FirebaseConfig.PUSHER_HTTP_URL
}
}

View file

@ -36,6 +36,7 @@ class DefaultFirebaseNewTokenHandler @Inject constructor(
private val userPushStoreFactory: UserPushStoreFactory,
private val matrixClientProvider: MatrixClientProvider,
private val firebaseStore: FirebaseStore,
private val firebaseGatewayProvider: FirebaseGatewayProvider,
) : FirebaseNewTokenHandler {
override suspend fun handle(firebaseToken: String) {
firebaseStore.storeFcmToken(firebaseToken)
@ -55,7 +56,7 @@ class DefaultFirebaseNewTokenHandler @Inject constructor(
.registerPusher(
matrixClient = client,
pushKey = firebaseToken,
gateway = FirebaseConfig.PUSHER_HTTP_URL,
gateway = firebaseGatewayProvider.getFirebaseGateway(),
)
.onFailure {
Timber.tag(loggerTag.value).e(it, "Failed to register pusher for session $sessionId")

View file

@ -27,6 +27,7 @@ class FirebasePushProvider @Inject constructor(
private val pusherSubscriber: PusherSubscriber,
private val isPlayServiceAvailable: IsPlayServiceAvailable,
private val firebaseTokenRotator: FirebaseTokenRotator,
private val firebaseGatewayProvider: FirebaseGatewayProvider,
) : PushProvider {
override val index = FirebaseConfig.INDEX
override val name = FirebaseConfig.NAME
@ -48,7 +49,7 @@ class FirebasePushProvider @Inject constructor(
return pusherSubscriber.registerPusher(
matrixClient = matrixClient,
pushKey = pushKey,
gateway = FirebaseConfig.PUSHER_HTTP_URL,
gateway = firebaseGatewayProvider.getFirebaseGateway(),
)
}
@ -60,7 +61,7 @@ class FirebasePushProvider @Inject constructor(
Timber.tag(loggerTag.value).w("Unable to unregister pusher, Firebase token is not known.")
Result.success(Unit)
} else {
pusherSubscriber.unregisterPusher(matrixClient, pushKey, FirebaseConfig.PUSHER_HTTP_URL)
pusherSubscriber.unregisterPusher(matrixClient, pushKey, firebaseGatewayProvider.getFirebaseGateway())
}
}
@ -72,7 +73,7 @@ class FirebasePushProvider @Inject constructor(
override suspend fun getCurrentUserPushConfig(): CurrentUserPushConfig? {
return firebaseStore.getFcmToken()?.let { fcmToken ->
CurrentUserPushConfig(
url = FirebaseConfig.PUSHER_HTTP_URL,
url = firebaseGatewayProvider.getFirebaseGateway(),
pushKey = fcmToken
)
}