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

@ -13,20 +13,21 @@ import coil3.ImageLoader
import coil3.gif.AnimatedImageDecoder
import coil3.gif.GifDecoder
import coil3.network.okhttp.OkHttpNetworkFetcherFactory
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 io.element.android.libraries.matrix.api.MatrixClient
import okhttp3.OkHttpClient
import javax.inject.Inject
import javax.inject.Provider
import dev.zacsweers.metro.Inject
import dev.zacsweers.metro.Provider
interface LoggedInImageLoaderFactory {
fun newImageLoader(matrixClient: MatrixClient): ImageLoader
}
@ContributesBinding(AppScope::class)
class DefaultLoggedInImageLoaderFactory @Inject constructor(
@Inject
class DefaultLoggedInImageLoaderFactory(
@ApplicationContext private val context: Context,
private val okHttpClient: Provider<OkHttpClient>,
) : LoggedInImageLoaderFactory {
@ -37,7 +38,7 @@ class DefaultLoggedInImageLoaderFactory @Inject constructor(
OkHttpNetworkFetcherFactory(
callFactory = {
// Use newBuilder, see https://coil-kt.github.io/coil/network/#using-a-custom-okhttpclient
okHttpClient.get().newBuilder().build()
okHttpClient().newBuilder().build()
}
)
)
@ -56,7 +57,8 @@ class DefaultLoggedInImageLoaderFactory @Inject constructor(
}
}
class NotLoggedInImageLoaderFactory @Inject constructor(
@Inject
class NotLoggedInImageLoaderFactory(
@ApplicationContext private val context: Context,
private val okHttpClient: Provider<OkHttpClient>,
) {
@ -67,7 +69,7 @@ class NotLoggedInImageLoaderFactory @Inject constructor(
OkHttpNetworkFetcherFactory(
callFactory = {
// Use newBuilder, see https://coil-kt.github.io/coil/network/#using-a-custom-okhttpclient
okHttpClient.get().newBuilder().build()
okHttpClient().newBuilder().build()
}
)
)

View file

@ -8,14 +8,14 @@
package io.element.android.libraries.matrix.ui.media
import coil3.ImageLoader
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.SingleIn
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.SingleIn
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.sessionstorage.api.observer.SessionListener
import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
import javax.inject.Inject
import dev.zacsweers.metro.Inject
interface ImageLoaderHolder {
fun get(client: MatrixClient): ImageLoader
@ -24,7 +24,8 @@ interface ImageLoaderHolder {
@ContributesBinding(AppScope::class)
@SingleIn(AppScope::class)
class DefaultImageLoaderHolder @Inject constructor(
@Inject
class DefaultImageLoaderHolder(
private val loggedInImageLoaderFactory: LoggedInImageLoaderFactory,
private val sessionObserver: SessionObserver,
) : ImageLoaderHolder {

View file

@ -8,17 +8,18 @@
package io.element.android.libraries.matrix.ui.messages
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SingleIn
import dev.zacsweers.metro.SingleIn
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.runningFold
import javax.inject.Inject
import dev.zacsweers.metro.Inject
@SingleIn(RoomScope::class)
class RoomMemberProfilesCache @Inject constructor() {
@Inject
class RoomMemberProfilesCache() {
private val cache = MutableStateFlow(mapOf<UserId, RoomMember>())
val updateFlow = cache.drop(1).runningFold(0) { acc, _ -> acc + 1 }

View file

@ -8,7 +8,7 @@
package io.element.android.libraries.matrix.ui.messages
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SingleIn
import dev.zacsweers.metro.SingleIn
import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
@ -16,10 +16,11 @@ import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.runningFold
import javax.inject.Inject
import dev.zacsweers.metro.Inject
@SingleIn(RoomScope::class)
class RoomNamesCache @Inject constructor() {
@Inject
class RoomNamesCache() {
private val cache = MutableStateFlow(mapOf<RoomIdOrAlias, String?>())
val updateFlow = cache.drop(1).runningFold(0) { acc, _ -> acc + 1 }

View file

@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import javax.inject.Inject
import dev.zacsweers.metro.Inject
@Immutable
sealed interface LoadingRoomState {
@ -36,7 +36,8 @@ open class LoadingRoomStateProvider : PreviewParameterProvider<LoadingRoomState>
)
}
class LoadingRoomStateFlowFactory @Inject constructor(private val matrixClient: MatrixClient) {
@Inject
class LoadingRoomStateFlowFactory(private val matrixClient: MatrixClient) {
fun create(lifecycleScope: CoroutineScope, roomId: RoomId): StateFlow<LoadingRoomState> =
getJoinedRoomFlow(roomId)
.map { room ->