From 199342d476e3acf4fb02d671f54a9205bcc81429 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 8 Sep 2025 16:56:59 +0200 Subject: [PATCH] Improve rendering of title of the folder view --- .../impl/folder/ViewFolderPresenter.kt | 12 ++++++++- .../viewfolder/impl/folder/ViewFolderState.kt | 2 +- .../impl/folder/ViewFolderStateProvider.kt | 4 +-- .../viewfolder/impl/folder/ViewFolderView.kt | 2 +- .../test/folder/ViewFolderPresenterTest.kt | 27 ++++++++++++++++--- 5 files changed, 39 insertions(+), 8 deletions(-) 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 41b9219e52..096f6ec0f6 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,6 +18,7 @@ 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 io.element.android.libraries.core.meta.BuildMeta import kotlinx.collections.immutable.toImmutableList @Inject @@ -25,6 +26,7 @@ class ViewFolderPresenter( @Assisted val canGoUp: Boolean, @Assisted val path: String, private val folderExplorer: FolderExplorer, + private val buildMeta: BuildMeta, ) : Presenter { @AssistedFactory interface Factory { @@ -34,6 +36,14 @@ class ViewFolderPresenter( @Composable override fun present(): ViewFolderState { var content by remember { mutableStateOf(emptyList()) } + val title = remember { + buildString { + if (path.contains(buildMeta.applicationId)) { + append("…") + } + append(path.substringAfter(buildMeta.applicationId)) + } + } LaunchedEffect(Unit) { content = buildList { if (canGoUp) add(Item.Parent) @@ -41,7 +51,7 @@ class ViewFolderPresenter( } } return ViewFolderState( - path = path, + title = title, content = content.toImmutableList(), ) } 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 c1fa5bfa01..3eb48790a4 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 373601339d..cbaac89cc2 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 99de3badb8..bf5360f847 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 542525ee3f..715dfa711f 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, ) }