Improve rendering of title of the folder view

This commit is contained in:
Benoit Marty 2025-09-08 16:56:59 +02:00
parent 83647f2d0c
commit 199342d476
5 changed files with 39 additions and 8 deletions

View file

@ -18,6 +18,7 @@ import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.Inject import dev.zacsweers.metro.Inject
import io.element.android.features.viewfolder.impl.model.Item import io.element.android.features.viewfolder.impl.model.Item
import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.meta.BuildMeta
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
@Inject @Inject
@ -25,6 +26,7 @@ class ViewFolderPresenter(
@Assisted val canGoUp: Boolean, @Assisted val canGoUp: Boolean,
@Assisted val path: String, @Assisted val path: String,
private val folderExplorer: FolderExplorer, private val folderExplorer: FolderExplorer,
private val buildMeta: BuildMeta,
) : Presenter<ViewFolderState> { ) : Presenter<ViewFolderState> {
@AssistedFactory @AssistedFactory
interface Factory { interface Factory {
@ -34,6 +36,14 @@ class ViewFolderPresenter(
@Composable @Composable
override fun present(): ViewFolderState { override fun present(): ViewFolderState {
var content by remember { mutableStateOf(emptyList<Item>()) } var content by remember { mutableStateOf(emptyList<Item>()) }
val title = remember {
buildString {
if (path.contains(buildMeta.applicationId)) {
append("")
}
append(path.substringAfter(buildMeta.applicationId))
}
}
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
content = buildList { content = buildList {
if (canGoUp) add(Item.Parent) if (canGoUp) add(Item.Parent)
@ -41,7 +51,7 @@ class ViewFolderPresenter(
} }
} }
return ViewFolderState( return ViewFolderState(
path = path, title = title,
content = content.toImmutableList(), content = content.toImmutableList(),
) )
} }

View file

@ -11,6 +11,6 @@ import io.element.android.features.viewfolder.impl.model.Item
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
data class ViewFolderState( data class ViewFolderState(
val path: String, val title: String,
val content: ImmutableList<Item>, val content: ImmutableList<Item>,
) )

View file

@ -26,9 +26,9 @@ open class ViewFolderStateProvider : PreviewParameterProvider<ViewFolderState> {
} }
fun aViewFolderState( fun aViewFolderState(
path: String = "aPath", title: String = "aPath",
content: List<Item> = emptyList(), content: List<Item> = emptyList(),
) = ViewFolderState( ) = ViewFolderState(
path = path, title = title,
content = content.toImmutableList(), content = content.toImmutableList(),
) )

View file

@ -53,7 +53,7 @@ fun ViewFolderView(
navigationIcon = { navigationIcon = {
BackButton(onClick = onBackClick) BackButton(onClick = onBackClick)
}, },
titleStr = state.path, titleStr = state.title,
) )
}, },
content = { padding -> content = { padding ->

View file

@ -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.FolderExplorer
import io.element.android.features.viewfolder.impl.folder.ViewFolderPresenter import io.element.android.features.viewfolder.impl.folder.ViewFolderPresenter
import io.element.android.features.viewfolder.impl.model.Item 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.WarmUpRule
import io.element.android.tests.testutils.test
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
@ -30,11 +33,25 @@ class ViewFolderPresenterTest {
presenter.present() presenter.present()
}.test { }.test {
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.path).isEqualTo("aPath") assertThat(initialState.title).isEqualTo("aPath")
assertThat(initialState.content).isEmpty() 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 @Test
fun `present - list items from root`() = runTest { fun `present - list items from root`() = runTest {
val items = listOf( val items = listOf(
@ -50,7 +67,7 @@ class ViewFolderPresenterTest {
}.test { }.test {
skipItems(1) skipItems(1)
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.path).isEqualTo("aPath") assertThat(initialState.title).isEqualTo("aPath")
assertThat(initialState.content.toList()).isEqualTo(items) assertThat(initialState.content.toList()).isEqualTo(items)
} }
} }
@ -73,7 +90,7 @@ class ViewFolderPresenterTest {
}.test { }.test {
skipItems(1) skipItems(1)
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.path).isEqualTo("aPath") assertThat(initialState.title).isEqualTo("aPath")
assertThat(initialState.content.toList()).isEqualTo(listOf(Item.Parent) + items) assertThat(initialState.content.toList()).isEqualTo(listOf(Item.Parent) + items)
} }
} }
@ -82,9 +99,13 @@ class ViewFolderPresenterTest {
canGoUp: Boolean = false, canGoUp: Boolean = false,
path: String = "aPath", path: String = "aPath",
folderExplorer: FolderExplorer = FakeFolderExplorer(), folderExplorer: FolderExplorer = FakeFolderExplorer(),
buildMeta: BuildMeta = aBuildMeta(
applicationId = "appId",
),
) = ViewFolderPresenter( ) = ViewFolderPresenter(
path = path, path = path,
canGoUp = canGoUp, canGoUp = canGoUp,
folderExplorer = folderExplorer, folderExplorer = folderExplorer,
buildMeta = buildMeta,
) )
} }