diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt index 92a1d0c4723..527a467ba97 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt @@ -29,11 +29,11 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @Inject - class DeclineAndBlockPresenter( +class DeclineAndBlockPresenter( @Assisted private val inviteData: InviteData, private val declineInvite: DeclineInvite, private val snackbarDispatcher: SnackbarDispatcher, - ) : Presenter { +) : Presenter { @AssistedFactory interface Factory { fun create(inviteData: InviteData): DeclineAndBlockPresenter @@ -90,4 +90,4 @@ import kotlinx.coroutines.launch } } } - } +} diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt index cf1e717e120..fce49faffbf 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt @@ -26,7 +26,7 @@ import io.element.android.libraries.architecture.inputs class ViewFolderNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, -// presenterFactory: ViewFolderPresenter.Factory, + presenterFactory: ViewFolderPresenter.Factory, ) : Node(buildContext, plugins = plugins) { data class Inputs( val canGoUp: Boolean, @@ -40,10 +40,10 @@ class ViewFolderNode( 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().forEach { it.onBackClick() } @@ -55,12 +55,12 @@ class ViewFolderNode( @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, + ) } } diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt index 6a7b4a8fa19..8e392855d82 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt @@ -18,14 +18,17 @@ 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 +import io.element.android.libraries.core.meta.BuildMeta +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList @Inject - class ViewFolderPresenter( +class ViewFolderPresenter( @Assisted val canGoUp: Boolean, @Assisted val path: String, private val folderExplorer: FolderExplorer, - ) : Presenter { + private val buildMeta: BuildMeta, +) : Presenter { @AssistedFactory interface Factory { fun create(canGoUp: Boolean, path: String): ViewFolderPresenter @@ -33,16 +36,24 @@ import kotlinx.collections.immutable.toImmutableList @Composable override fun present(): ViewFolderState { - var content by remember { mutableStateOf(emptyList()) } + var content by remember { mutableStateOf(persistentListOf()) } + val title = remember { + buildString { + if (path.contains(buildMeta.applicationId)) { + append("…") + } + append(path.substringAfter(buildMeta.applicationId)) + } + } LaunchedEffect(Unit) { content = buildList { if (canGoUp) add(Item.Parent) addAll(folderExplorer.getItems(path)) - } + }.toPersistentList() } return ViewFolderState( - path = path, - content = content.toImmutableList(), + title = title, + content = content, ) } - } +} diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderState.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderState.kt index c1fa5bfa017..3eb48790a4f 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderState.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderState.kt @@ -11,6 +11,6 @@ import io.element.android.features.viewfolder.impl.model.Item import kotlinx.collections.immutable.ImmutableList data class ViewFolderState( - val path: String, + val title: String, val content: ImmutableList, ) diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderStateProvider.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderStateProvider.kt index 373601339d2..cbaac89cc27 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderStateProvider.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderStateProvider.kt @@ -26,9 +26,9 @@ open class ViewFolderStateProvider : PreviewParameterProvider { } fun aViewFolderState( - path: String = "aPath", + title: String = "aPath", content: List = emptyList(), ) = ViewFolderState( - path = path, + title = title, content = content.toImmutableList(), ) diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderView.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderView.kt index 99de3badb84..bf5360f8477 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderView.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderView.kt @@ -53,7 +53,7 @@ fun ViewFolderView( navigationIcon = { BackButton(onClick = onBackClick) }, - titleStr = state.path, + titleStr = state.title, ) }, content = { padding -> diff --git a/features/viewfolder/impl/src/test/kotlin/io/element/android/features/viewfolder/test/folder/ViewFolderPresenterTest.kt b/features/viewfolder/impl/src/test/kotlin/io/element/android/features/viewfolder/test/folder/ViewFolderPresenterTest.kt index 542525ee3f0..715dfa711f8 100644 --- a/features/viewfolder/impl/src/test/kotlin/io/element/android/features/viewfolder/test/folder/ViewFolderPresenterTest.kt +++ b/features/viewfolder/impl/src/test/kotlin/io/element/android/features/viewfolder/test/folder/ViewFolderPresenterTest.kt @@ -14,7 +14,10 @@ import com.google.common.truth.Truth.assertThat import io.element.android.features.viewfolder.impl.folder.FolderExplorer import io.element.android.features.viewfolder.impl.folder.ViewFolderPresenter import io.element.android.features.viewfolder.impl.model.Item +import io.element.android.libraries.core.meta.BuildMeta +import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.tests.testutils.WarmUpRule +import io.element.android.tests.testutils.test import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test @@ -30,11 +33,25 @@ class ViewFolderPresenterTest { presenter.present() }.test { val initialState = awaitItem() - assertThat(initialState.path).isEqualTo("aPath") + assertThat(initialState.title).isEqualTo("aPath") assertThat(initialState.content).isEmpty() } } + @Test + fun `present - title is built regarding the applicationId`() = runTest { + val presenter = createPresenter( + path = "/data/user/O/appId/cache/logs", + buildMeta = aBuildMeta( + applicationId = "appId", + ) + ) + presenter.test { + val initialState = awaitItem() + assertThat(initialState.title).isEqualTo("…/cache/logs") + } + } + @Test fun `present - list items from root`() = runTest { val items = listOf( @@ -50,7 +67,7 @@ class ViewFolderPresenterTest { }.test { skipItems(1) val initialState = awaitItem() - assertThat(initialState.path).isEqualTo("aPath") + assertThat(initialState.title).isEqualTo("aPath") assertThat(initialState.content.toList()).isEqualTo(items) } } @@ -73,7 +90,7 @@ class ViewFolderPresenterTest { }.test { skipItems(1) val initialState = awaitItem() - assertThat(initialState.path).isEqualTo("aPath") + assertThat(initialState.title).isEqualTo("aPath") assertThat(initialState.content.toList()).isEqualTo(listOf(Item.Parent) + items) } } @@ -82,9 +99,13 @@ class ViewFolderPresenterTest { canGoUp: Boolean = false, path: String = "aPath", folderExplorer: FolderExplorer = FakeFolderExplorer(), + buildMeta: BuildMeta = aBuildMeta( + applicationId = "appId", + ), ) = ViewFolderPresenter( path = path, canGoUp = canGoUp, folderExplorer = folderExplorer, + buildMeta = buildMeta, ) }