Start migrating Anvil KSP to Metro

This commit is contained in:
Jorge Martín 2025-08-20 15:29:50 +02:00
parent d4d57b1e21
commit b76a71ebf5
703 changed files with 3523 additions and 2820 deletions

View file

@ -7,17 +7,18 @@
package io.element.android.libraries.pushproviders.firebase
import com.squareup.anvil.annotations.ContributesBinding
import dev.zacsweers.metro.ContributesBinding
import io.element.android.features.enterprise.api.EnterpriseService
import io.element.android.libraries.di.AppScope
import javax.inject.Inject
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.Inject
interface FirebaseGatewayProvider {
fun getFirebaseGateway(): String
}
@ContributesBinding(AppScope::class)
class DefaultFirebaseGatewayProvider @Inject constructor(
@Inject
class DefaultFirebaseGatewayProvider(
private val enterpriseService: EnterpriseService,
) : FirebaseGatewayProvider {
override fun getFirebaseGateway(): String {

View file

@ -7,10 +7,10 @@
package io.element.android.libraries.pushproviders.firebase
import com.squareup.anvil.annotations.ContributesBinding
import dev.zacsweers.metro.ContributesBinding
import io.element.android.libraries.core.extensions.flatMap
import io.element.android.libraries.core.log.logger.LoggerTag
import io.element.android.libraries.di.AppScope
import dev.zacsweers.metro.AppScope
import io.element.android.libraries.matrix.api.MatrixClientProvider
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.pushproviders.api.PusherSubscriber
@ -18,7 +18,7 @@ import io.element.android.libraries.pushstore.api.UserPushStoreFactory
import io.element.android.libraries.sessionstorage.api.SessionStore
import io.element.android.libraries.sessionstorage.api.toUserList
import timber.log.Timber
import javax.inject.Inject
import dev.zacsweers.metro.Inject
private val loggerTag = LoggerTag("FirebaseNewTokenHandler", LoggerTag.PushLoggerTag)
@ -30,7 +30,8 @@ interface FirebaseNewTokenHandler {
}
@ContributesBinding(AppScope::class)
class DefaultFirebaseNewTokenHandler @Inject constructor(
@Inject
class DefaultFirebaseNewTokenHandler(
private val pusherSubscriber: PusherSubscriber,
private val sessionStore: SessionStore,
private val userPushStoreFactory: UserPushStoreFactory,

View file

@ -8,9 +8,10 @@
package io.element.android.libraries.pushproviders.firebase
import io.element.android.libraries.pushproviders.api.PushData
import javax.inject.Inject
import dev.zacsweers.metro.Inject
class FirebasePushParser @Inject constructor() {
@Inject
class FirebasePushParser() {
fun parse(message: Map<String, String?>): PushData? {
val pushDataFirebase = PushDataFirebase(
eventId = message["event_id"],

View file

@ -7,9 +7,10 @@
package io.element.android.libraries.pushproviders.firebase
import com.squareup.anvil.annotations.ContributesMultibinding
import dev.zacsweers.metro.ContributesIntoSet
import dev.zacsweers.metro.Inject
import io.element.android.libraries.core.log.logger.LoggerTag
import io.element.android.libraries.di.AppScope
import dev.zacsweers.metro.AppScope
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig
@ -17,12 +18,12 @@ import io.element.android.libraries.pushproviders.api.Distributor
import io.element.android.libraries.pushproviders.api.PushProvider
import io.element.android.libraries.pushproviders.api.PusherSubscriber
import timber.log.Timber
import javax.inject.Inject
private val loggerTag = LoggerTag("FirebasePushProvider", LoggerTag.PushLoggerTag)
@ContributesMultibinding(AppScope::class)
class FirebasePushProvider @Inject constructor(
@ContributesIntoSet(AppScope::class)
@Inject
class FirebasePushProvider(
private val firebaseStore: FirebaseStore,
private val pusherSubscriber: PusherSubscriber,
private val isPlayServiceAvailable: IsPlayServiceAvailable,

View file

@ -9,13 +9,13 @@ package io.element.android.libraries.pushproviders.firebase
import android.content.SharedPreferences
import androidx.core.content.edit
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.AppScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.onCompletion
import kotlinx.coroutines.flow.onStart
import javax.inject.Inject
import dev.zacsweers.metro.Inject
/**
* This class store the Firebase token in SharedPrefs.
@ -27,7 +27,8 @@ interface FirebaseStore {
}
@ContributesBinding(AppScope::class)
class SharedPreferencesFirebaseStore @Inject constructor(
@Inject
class SharedPreferencesFirebaseStore(
private val sharedPreferences: SharedPreferences,
) : FirebaseStore {
override fun getFcmToken(): String? {

View file

@ -8,10 +8,10 @@
package io.element.android.libraries.pushproviders.firebase
import com.google.firebase.messaging.FirebaseMessaging
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.AppScope
import timber.log.Timber
import javax.inject.Inject
import dev.zacsweers.metro.Inject
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine
@ -24,7 +24,8 @@ interface FirebaseTokenDeleter {
}
@ContributesBinding(AppScope::class)
class DefaultFirebaseTokenDeleter @Inject constructor(
@Inject
class DefaultFirebaseTokenDeleter(
private val isPlayServiceAvailable: IsPlayServiceAvailable,
) : FirebaseTokenDeleter {
override suspend fun delete() {

View file

@ -8,10 +8,10 @@
package io.element.android.libraries.pushproviders.firebase
import com.google.firebase.messaging.FirebaseMessaging
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.AppScope
import timber.log.Timber
import javax.inject.Inject
import dev.zacsweers.metro.Inject
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine
@ -25,7 +25,8 @@ interface FirebaseTokenGetter {
}
@ContributesBinding(AppScope::class)
class DefaultFirebaseTokenGetter @Inject constructor(
@Inject
class DefaultFirebaseTokenGetter(
private val isPlayServiceAvailable: IsPlayServiceAvailable,
) : FirebaseTokenGetter {
override suspend fun get(): String {

View file

@ -7,10 +7,10 @@
package io.element.android.libraries.pushproviders.firebase
import com.squareup.anvil.annotations.ContributesBinding
import dev.zacsweers.metro.ContributesBinding
import io.element.android.libraries.core.extensions.runCatchingExceptions
import io.element.android.libraries.di.AppScope
import javax.inject.Inject
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.Inject
interface FirebaseTokenRotator {
suspend fun rotate(): Result<Unit>
@ -20,7 +20,8 @@ interface FirebaseTokenRotator {
* This class delete the Firebase token and generate a new one.
*/
@ContributesBinding(AppScope::class)
class DefaultFirebaseTokenRotator @Inject constructor(
@Inject
class DefaultFirebaseTokenRotator(
private val firebaseTokenDeleter: FirebaseTokenDeleter,
private val firebaseTokenGetter: FirebaseTokenGetter,
) : FirebaseTokenRotator {

View file

@ -7,10 +7,10 @@
package io.element.android.libraries.pushproviders.firebase
import com.squareup.anvil.annotations.ContributesBinding
import dev.zacsweers.metro.ContributesBinding
import io.element.android.libraries.core.extensions.runCatchingExceptions
import io.element.android.libraries.di.AppScope
import javax.inject.Inject
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.Inject
interface FirebaseTroubleshooter {
suspend fun troubleshoot(): Result<Unit>
@ -20,7 +20,8 @@ interface FirebaseTroubleshooter {
* This class force retrieving and storage of the Firebase token.
*/
@ContributesBinding(AppScope::class)
class DefaultFirebaseTroubleshooter @Inject constructor(
@Inject
class DefaultFirebaseTroubleshooter(
private val newTokenHandler: FirebaseNewTokenHandler,
private val firebaseTokenGetter: FirebaseTokenGetter,
) : FirebaseTroubleshooter {

View file

@ -10,11 +10,11 @@ package io.element.android.libraries.pushproviders.firebase
import android.content.Context
import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailabilityLight
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.ApplicationContext
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.AppScope
import io.element.android.libraries.di.annotations.ApplicationContext
import timber.log.Timber
import javax.inject.Inject
import dev.zacsweers.metro.Inject
interface IsPlayServiceAvailable {
fun isAvailable(): Boolean
@ -27,7 +27,8 @@ fun IsPlayServiceAvailable.checkAvailableOrThrow() {
}
@ContributesBinding(AppScope::class)
class DefaultIsPlayServiceAvailable @Inject constructor(
@Inject
class DefaultIsPlayServiceAvailable(
@ApplicationContext private val context: Context,
) : IsPlayServiceAvailable {
override fun isAvailable(): Boolean {

View file

@ -16,7 +16,7 @@ import io.element.android.libraries.pushproviders.api.PushHandler
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
import dev.zacsweers.metro.Inject
private val loggerTag = LoggerTag("VectorFirebaseMessagingService", LoggerTag.PushLoggerTag)

View file

@ -7,8 +7,8 @@
package io.element.android.libraries.pushproviders.firebase
import com.squareup.anvil.annotations.ContributesTo
import io.element.android.libraries.di.AppScope
import dev.zacsweers.metro.ContributesTo
import dev.zacsweers.metro.AppScope
@ContributesTo(AppScope::class)
interface VectorFirebaseMessagingServiceBindings {

View file

@ -7,8 +7,9 @@
package io.element.android.libraries.pushproviders.firebase.troubleshoot
import com.squareup.anvil.annotations.ContributesMultibinding
import io.element.android.libraries.di.AppScope
import dev.zacsweers.metro.ContributesIntoSet
import dev.zacsweers.metro.Inject
import dev.zacsweers.metro.AppScope
import io.element.android.libraries.pushproviders.firebase.FirebaseConfig
import io.element.android.libraries.pushproviders.firebase.IsPlayServiceAvailable
import io.element.android.libraries.pushproviders.firebase.R
@ -19,10 +20,10 @@ import io.element.android.libraries.troubleshoot.api.test.TestFilterData
import io.element.android.services.toolbox.api.strings.StringProvider
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.StateFlow
import javax.inject.Inject
@ContributesMultibinding(AppScope::class)
class FirebaseAvailabilityTest @Inject constructor(
@ContributesIntoSet(AppScope::class)
@Inject
class FirebaseAvailabilityTest(
private val isPlayServiceAvailable: IsPlayServiceAvailable,
private val stringProvider: StringProvider,
) : NotificationTroubleshootTest {

View file

@ -7,8 +7,9 @@
package io.element.android.libraries.pushproviders.firebase.troubleshoot
import com.squareup.anvil.annotations.ContributesMultibinding
import io.element.android.libraries.di.AppScope
import dev.zacsweers.metro.ContributesIntoSet
import dev.zacsweers.metro.Inject
import dev.zacsweers.metro.AppScope
import io.element.android.libraries.pushproviders.firebase.FirebaseConfig
import io.element.android.libraries.pushproviders.firebase.FirebaseStore
import io.element.android.libraries.pushproviders.firebase.FirebaseTroubleshooter
@ -23,10 +24,10 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import javax.inject.Inject
@ContributesMultibinding(AppScope::class)
class FirebaseTokenTest @Inject constructor(
@ContributesIntoSet(AppScope::class)
@Inject
class FirebaseTokenTest(
private val firebaseStore: FirebaseStore,
private val firebaseTroubleshooter: FirebaseTroubleshooter,
private val stringProvider: StringProvider,