Start migrating Anvil KSP to Metro
This commit is contained in:
parent
d4d57b1e21
commit
b76a71ebf5
703 changed files with 3523 additions and 2820 deletions
|
|
@ -9,16 +9,17 @@ package io.element.android.features.viewfolder.impl
|
|||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.features.viewfolder.api.TextFileViewer
|
||||
import io.element.android.features.viewfolder.impl.file.ColorationMode
|
||||
import io.element.android.features.viewfolder.impl.file.FileContent
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import javax.inject.Inject
|
||||
import dev.zacsweers.metro.Inject
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultTextFileViewer @Inject constructor() : TextFileViewer {
|
||||
@Inject
|
||||
class DefaultTextFileViewer() : TextFileViewer {
|
||||
@Composable
|
||||
override fun Render(
|
||||
lines: ImmutableList<String>,
|
||||
|
|
|
|||
|
|
@ -10,15 +10,16 @@ package io.element.android.features.viewfolder.impl
|
|||
import com.bumble.appyx.core.modality.BuildContext
|
||||
import com.bumble.appyx.core.node.Node
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.features.viewfolder.api.ViewFolderEntryPoint
|
||||
import io.element.android.features.viewfolder.impl.root.ViewFolderRootNode
|
||||
import io.element.android.libraries.architecture.createNode
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import javax.inject.Inject
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.Inject
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultViewFolderEntryPoint @Inject constructor() : ViewFolderEntryPoint {
|
||||
@Inject
|
||||
class DefaultViewFolderEntryPoint() : ViewFolderEntryPoint {
|
||||
override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): ViewFolderEntryPoint.NodeBuilder {
|
||||
val plugins = ArrayList<Plugin>()
|
||||
|
||||
|
|
|
|||
|
|
@ -7,20 +7,21 @@
|
|||
|
||||
package io.element.android.features.viewfolder.impl.file
|
||||
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
import dev.zacsweers.metro.Inject
|
||||
|
||||
interface FileContentReader {
|
||||
suspend fun getLines(path: String): Result<List<String>>
|
||||
}
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultFileContentReader @Inject constructor(
|
||||
@Inject
|
||||
class DefaultFileContentReader(
|
||||
private val dispatchers: CoroutineDispatchers,
|
||||
) : FileContentReader {
|
||||
override suspend fun getLines(path: String): Result<List<String>> = withContext(dispatchers.io) {
|
||||
|
|
|
|||
|
|
@ -13,18 +13,18 @@ import android.os.Build
|
|||
import android.os.Environment
|
||||
import android.provider.MediaStore
|
||||
import androidx.annotation.RequiresApi
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.androidutils.system.toast
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||
import io.element.android.libraries.core.mimetype.MimeTypes
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import io.element.android.libraries.di.ApplicationContext
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import io.element.android.libraries.di.annotations.ApplicationContext
|
||||
import kotlinx.coroutines.withContext
|
||||
import timber.log.Timber
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import javax.inject.Inject
|
||||
import dev.zacsweers.metro.Inject
|
||||
|
||||
interface FileSave {
|
||||
suspend fun save(
|
||||
|
|
@ -33,7 +33,8 @@ interface FileSave {
|
|||
}
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultFileSave @Inject constructor(
|
||||
@Inject
|
||||
class DefaultFileSave(
|
||||
@ApplicationContext private val context: Context,
|
||||
private val dispatchers: CoroutineDispatchers,
|
||||
) : FileSave {
|
||||
|
|
|
|||
|
|
@ -11,17 +11,17 @@ import android.content.Context
|
|||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import androidx.core.content.FileProvider
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||
import io.element.android.libraries.core.meta.BuildMeta
|
||||
import io.element.android.libraries.core.mimetype.MimeTypes
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import io.element.android.libraries.di.ApplicationContext
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import io.element.android.libraries.di.annotations.ApplicationContext
|
||||
import kotlinx.coroutines.withContext
|
||||
import timber.log.Timber
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
import dev.zacsweers.metro.Inject
|
||||
|
||||
interface FileShare {
|
||||
suspend fun share(
|
||||
|
|
@ -30,7 +30,8 @@ interface FileShare {
|
|||
}
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultFileShare @Inject constructor(
|
||||
@Inject
|
||||
class DefaultFileShare(
|
||||
@ApplicationContext private val context: Context,
|
||||
private val dispatchers: CoroutineDispatchers,
|
||||
private val buildMeta: BuildMeta,
|
||||
|
|
|
|||
|
|
@ -13,15 +13,16 @@ import com.bumble.appyx.core.modality.BuildContext
|
|||
import com.bumble.appyx.core.node.Node
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import com.bumble.appyx.core.plugin.plugins
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedInject
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.anvilannotations.ContributesNode
|
||||
import io.element.android.libraries.architecture.NodeInputs
|
||||
import io.element.android.libraries.architecture.inputs
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import dev.zacsweers.metro.AppScope
|
||||
|
||||
@ContributesNode(AppScope::class)
|
||||
class ViewFileNode @AssistedInject constructor(
|
||||
@Inject
|
||||
class ViewFileNode(
|
||||
@Assisted buildContext: BuildContext,
|
||||
@Assisted plugins: List<Plugin>,
|
||||
presenterFactory: ViewFilePresenter.Factory,
|
||||
|
|
|
|||
|
|
@ -14,15 +14,16 @@ import androidx.compose.runtime.mutableStateOf
|
|||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.AssistedFactory
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class ViewFilePresenter @AssistedInject constructor(
|
||||
@Inject
|
||||
class ViewFilePresenter(
|
||||
@Assisted("path") val path: String,
|
||||
@Assisted("name") val name: String,
|
||||
private val fileContentReader: FileContentReader,
|
||||
|
|
|
|||
|
|
@ -7,21 +7,22 @@
|
|||
|
||||
package io.element.android.features.viewfolder.impl.folder
|
||||
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.features.viewfolder.impl.model.Item
|
||||
import io.element.android.libraries.androidutils.filesize.FileSizeFormatter
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
import dev.zacsweers.metro.Inject
|
||||
|
||||
interface FolderExplorer {
|
||||
suspend fun getItems(path: String): List<Item>
|
||||
}
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
class DefaultFolderExplorer @Inject constructor(
|
||||
@Inject
|
||||
class DefaultFolderExplorer(
|
||||
private val fileSizeFormatter: FileSizeFormatter,
|
||||
private val dispatchers: CoroutineDispatchers,
|
||||
) : FolderExplorer {
|
||||
|
|
|
|||
|
|
@ -13,19 +13,20 @@ import com.bumble.appyx.core.modality.BuildContext
|
|||
import com.bumble.appyx.core.node.Node
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import com.bumble.appyx.core.plugin.plugins
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedInject
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.anvilannotations.ContributesNode
|
||||
import io.element.android.features.viewfolder.impl.model.Item
|
||||
import io.element.android.libraries.architecture.NodeInputs
|
||||
import io.element.android.libraries.architecture.inputs
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import dev.zacsweers.metro.AppScope
|
||||
|
||||
@ContributesNode(AppScope::class)
|
||||
class ViewFolderNode @AssistedInject constructor(
|
||||
@Inject
|
||||
class ViewFolderNode(
|
||||
@Assisted buildContext: BuildContext,
|
||||
@Assisted plugins: List<Plugin>,
|
||||
presenterFactory: ViewFolderPresenter.Factory,
|
||||
// presenterFactory: ViewFolderPresenter.Factory,
|
||||
) : Node(buildContext, plugins = plugins) {
|
||||
data class Inputs(
|
||||
val canGoUp: Boolean,
|
||||
|
|
@ -39,10 +40,10 @@ class ViewFolderNode @AssistedInject constructor(
|
|||
|
||||
private val inputs: Inputs = inputs()
|
||||
|
||||
private val presenter = presenterFactory.create(
|
||||
canGoUp = inputs.canGoUp,
|
||||
path = inputs.path,
|
||||
)
|
||||
// private val presenter = presenterFactory.create(
|
||||
// canGoUp = inputs.canGoUp,
|
||||
// path = inputs.path,
|
||||
// )
|
||||
|
||||
private fun onBackClick() {
|
||||
plugins<Callback>().forEach { it.onBackClick() }
|
||||
|
|
@ -54,12 +55,12 @@ class ViewFolderNode @AssistedInject constructor(
|
|||
|
||||
@Composable
|
||||
override fun View(modifier: Modifier) {
|
||||
val state = presenter.present()
|
||||
ViewFolderView(
|
||||
state = state,
|
||||
modifier = modifier,
|
||||
onNavigateTo = ::onNavigateTo,
|
||||
onBackClick = ::onBackClick,
|
||||
)
|
||||
// val state = presenter.present()
|
||||
// ViewFolderView(
|
||||
// state = state,
|
||||
// modifier = modifier,
|
||||
// onNavigateTo = ::onNavigateTo,
|
||||
// onBackClick = ::onBackClick,
|
||||
// )
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,35 +13,36 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.AssistedFactory
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.features.viewfolder.impl.model.Item
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
|
||||
class ViewFolderPresenter @AssistedInject constructor(
|
||||
@Assisted val canGoUp: Boolean,
|
||||
@Assisted val path: String,
|
||||
private val folderExplorer: FolderExplorer,
|
||||
) : Presenter<ViewFolderState> {
|
||||
@AssistedFactory
|
||||
interface Factory {
|
||||
fun create(canGoUp: Boolean, path: String): ViewFolderPresenter
|
||||
}
|
||||
|
||||
@Composable
|
||||
override fun present(): ViewFolderState {
|
||||
var content by remember { mutableStateOf(emptyList<Item>()) }
|
||||
LaunchedEffect(Unit) {
|
||||
content = buildList {
|
||||
if (canGoUp) add(Item.Parent)
|
||||
addAll(folderExplorer.getItems(path))
|
||||
}
|
||||
}
|
||||
return ViewFolderState(
|
||||
path = path,
|
||||
content = content.toImmutableList(),
|
||||
)
|
||||
}
|
||||
}
|
||||
//@Inject
|
||||
//class ViewFolderPresenter(
|
||||
// @Assisted val canGoUp: Boolean,
|
||||
// @Assisted val path: String,
|
||||
// private val folderExplorer: FolderExplorer,
|
||||
//) : Presenter<ViewFolderState> {
|
||||
// @AssistedFactory
|
||||
// interface Factory {
|
||||
// fun create(canGoUp: Boolean, path: String): ViewFolderPresenter
|
||||
// }
|
||||
//
|
||||
// @Composable
|
||||
// override fun present(): ViewFolderState {
|
||||
// var content by remember { mutableStateOf(emptyList<Item>()) }
|
||||
// LaunchedEffect(Unit) {
|
||||
// content = buildList {
|
||||
// if (canGoUp) add(Item.Parent)
|
||||
// addAll(folderExplorer.getItems(path))
|
||||
// }
|
||||
// }
|
||||
// return ViewFolderState(
|
||||
// path = path,
|
||||
// content = content.toImmutableList(),
|
||||
// )
|
||||
// }
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ import com.bumble.appyx.core.plugin.plugins
|
|||
import com.bumble.appyx.navmodel.backstack.BackStack
|
||||
import com.bumble.appyx.navmodel.backstack.operation.pop
|
||||
import com.bumble.appyx.navmodel.backstack.operation.push
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedInject
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.anvilannotations.ContributesNode
|
||||
import io.element.android.features.viewfolder.api.ViewFolderEntryPoint
|
||||
import io.element.android.features.viewfolder.impl.file.ViewFileNode
|
||||
|
|
@ -29,11 +29,12 @@ import io.element.android.libraries.architecture.BaseFlowNode
|
|||
import io.element.android.libraries.architecture.NodeInputs
|
||||
import io.element.android.libraries.architecture.createNode
|
||||
import io.element.android.libraries.architecture.inputs
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@ContributesNode(AppScope::class)
|
||||
class ViewFolderRootNode @AssistedInject constructor(
|
||||
@Inject
|
||||
class ViewFolderRootNode(
|
||||
@Assisted buildContext: BuildContext,
|
||||
@Assisted plugins: List<Plugin>,
|
||||
) : BaseFlowNode<ViewFolderRootNode.NavTarget>(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue