Room directory search : branch entry point

This commit is contained in:
ganfra
2024-03-20 15:35:54 +01:00
parent 94020677ae
commit 3de4e8c91e
5 changed files with 57 additions and 1 deletions

View File

@@ -53,6 +53,7 @@ import io.element.android.features.lockscreen.api.LockScreenService
import io.element.android.features.networkmonitor.api.NetworkMonitor
import io.element.android.features.networkmonitor.api.NetworkStatus
import io.element.android.features.preferences.api.PreferencesEntryPoint
import io.element.android.features.roomdirectory.api.RoomDirectoryEntryPoint
import io.element.android.features.roomlist.api.RoomListEntryPoint
import io.element.android.features.securebackup.api.SecureBackupEntryPoint
import io.element.android.features.verifysession.api.VerifySessionEntryPoint
@@ -97,6 +98,7 @@ class LoggedInFlowNode @AssistedInject constructor(
private val ftueState: FtueState,
private val lockScreenEntryPoint: LockScreenEntryPoint,
private val lockScreenStateService: LockScreenService,
private val roomDirectoryEntryPoint: RoomDirectoryEntryPoint,
private val matrixClient: MatrixClient,
snackbarDispatcher: SnackbarDispatcher,
) : BaseFlowNode<LoggedInFlowNode.NavTarget>(
@@ -225,6 +227,9 @@ class LoggedInFlowNode @AssistedInject constructor(
@Parcelize
data object Ftue : NavTarget
@Parcelize
data object RoomDirectorySearch : NavTarget
}
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
@@ -270,6 +275,10 @@ class LoggedInFlowNode @AssistedInject constructor(
override fun onReportBugClicked() {
plugins<Callback>().forEach { it.onOpenBugReport() }
}
override fun onRoomDirectorySearchClicked() {
backstack.push(NavTarget.RoomDirectorySearch)
}
}
roomListEntryPoint
.nodeBuilder(this, buildContext)
@@ -377,6 +386,15 @@ class LoggedInFlowNode @AssistedInject constructor(
})
.build()
}
NavTarget.RoomDirectorySearch -> {
roomDirectoryEntryPoint.nodeBuilder(this, buildContext)
.callback(object : RoomDirectoryEntryPoint.Callback {
override fun onRoomJoined(roomId: RoomId) {
coroutineScope.launch { attachRoom(roomId) }
}
})
.build()
}
}
}

View File

@@ -38,5 +38,6 @@ interface RoomListEntryPoint : FeatureEntryPoint {
fun onInvitesClicked()
fun onRoomSettingsClicked(roomId: RoomId)
fun onReportBugClicked()
fun onRoomDirectorySearchClicked()
}
}

View File

@@ -91,6 +91,10 @@ class RoomListNode @AssistedInject constructor(
}
}
private fun onRoomDirectorySearchClicked() {
plugins<RoomListEntryPoint.Callback>().forEach { it.onRoomDirectorySearchClicked() }
}
@Composable
override fun View(modifier: Modifier) {
val state = presenter.present()
@@ -105,6 +109,7 @@ class RoomListNode @AssistedInject constructor(
onInvitesClicked = this::onInvitesClicked,
onRoomSettingsClicked = this::onRoomSettingsClicked,
onMenuActionClicked = { onMenuActionClicked(activity, it) },
onRoomDirectorySearchClicked = this::onRoomDirectorySearchClicked,
modifier = modifier,
)
}

View File

@@ -59,6 +59,7 @@ fun RoomListView(
onInvitesClicked: () -> Unit,
onRoomSettingsClicked: (roomId: RoomId) -> Unit,
onMenuActionClicked: (RoomListMenuAction) -> Unit,
onRoomDirectorySearchClicked: () -> Unit,
modifier: Modifier = Modifier,
) {
ConnectivityIndicatorContainer(
@@ -99,6 +100,7 @@ fun RoomListView(
state = state.searchState,
onRoomClicked = onRoomClicked,
onRoomLongClicked = { onRoomLongClicked(it) },
onRoomDirectorySearchClicked = onRoomDirectorySearchClicked,
modifier = Modifier
.statusBarsPadding()
.padding(top = topPadding)
@@ -197,5 +199,6 @@ internal fun RoomListViewPreview(@PreviewParameter(RoomListStateProvider::class)
onInvitesClicked = {},
onRoomSettingsClicked = {},
onMenuActionClicked = {},
onRoomDirectorySearchClicked = {},
)
}

View File

@@ -26,6 +26,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.QrCode
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.TextFieldDefaults
@@ -50,8 +52,10 @@ import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.modifiers.applyIf
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.IconSource
import io.element.android.libraries.designsystem.theme.components.Scaffold
import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.designsystem.theme.components.TopAppBar
@@ -64,6 +68,7 @@ internal fun RoomListSearchView(
state: RoomListSearchState,
onRoomClicked: (RoomId) -> Unit,
onRoomLongClicked: (RoomListRoomSummary) -> Unit,
onRoomDirectorySearchClicked: () -> Unit,
modifier: Modifier = Modifier,
) {
BackHandler(enabled = state.isSearchActive) {
@@ -87,6 +92,7 @@ internal fun RoomListSearchView(
state = state,
onRoomClicked = onRoomClicked,
onRoomLongClicked = onRoomLongClicked,
onRoomDirectorySearchClicked = onRoomDirectorySearchClicked,
)
}
}
@@ -99,6 +105,7 @@ private fun RoomListSearchContent(
state: RoomListSearchState,
onRoomClicked: (RoomId) -> Unit,
onRoomLongClicked: (RoomListRoomSummary) -> Unit,
onRoomDirectorySearchClicked: () -> Unit,
) {
val borderColor = MaterialTheme.colorScheme.tertiary
val strokeWidth = 1.dp
@@ -169,6 +176,14 @@ private fun RoomListSearchContent(
.padding(padding)
.consumeWindowInsets(padding)
) {
if(state.query.isEmpty()){
RoomDirectorySearchButton(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 24.dp, horizontal = 16.dp),
onClick = onRoomDirectorySearchClicked
)
}
LazyColumn(
modifier = Modifier.weight(1f),
) {
@@ -187,12 +202,26 @@ private fun RoomListSearchContent(
}
}
@Composable
private fun RoomDirectorySearchButton(
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
Button(
text = "Room directory",
leadingIcon = IconSource.Vector(CompoundIcons.ListBulleted()),
onClick = onClick,
modifier = modifier,
)
}
@PreviewsDayNight
@Composable
internal fun RoomListSearchResultContentPreview(@PreviewParameter(RoomListSearchStateProvider::class) state: RoomListSearchState) = ElementPreview {
RoomListSearchContent(
state = state,
onRoomClicked = {},
onRoomLongClicked = {}
onRoomLongClicked = {},
onRoomDirectorySearchClicked = {},
)
}