Simplifies navigation row

This commit is contained in:
Vitor Pamplona
2026-03-26 15:48:47 -04:00
parent 9cbcb3b39d
commit e92d5c8a5c
2 changed files with 72 additions and 45 deletions
@@ -20,18 +20,23 @@
*/ */
package com.vitorpamplona.amethyst.ui.navigation.drawer package com.vitorpamplona.amethyst.ui.navigation.drawer
import androidx.compose.foundation.Image import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
@@ -39,6 +44,7 @@ import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
@@ -67,13 +73,17 @@ import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.LinkAnnotation
import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextLinkStyles import androidx.compose.ui.text.TextLinkStyles
@@ -112,6 +122,7 @@ import com.vitorpamplona.amethyst.ui.theme.IconRowModifier
import com.vitorpamplona.amethyst.ui.theme.IconRowTextModifier import com.vitorpamplona.amethyst.ui.theme.IconRowTextModifier
import com.vitorpamplona.amethyst.ui.theme.Size20Modifier import com.vitorpamplona.amethyst.ui.theme.Size20Modifier
import com.vitorpamplona.amethyst.ui.theme.Size22Modifier import com.vitorpamplona.amethyst.ui.theme.Size22Modifier
import com.vitorpamplona.amethyst.ui.theme.Size22ModifierWith4Padding
import com.vitorpamplona.amethyst.ui.theme.Size26Modifier import com.vitorpamplona.amethyst.ui.theme.Size26Modifier
import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.Width16Space import com.vitorpamplona.amethyst.ui.theme.Width16Space
@@ -123,6 +134,7 @@ import com.vitorpamplona.quartz.nip01Core.core.Address
import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlin.text.ifEmpty
@Composable @Composable
fun DrawerContent( fun DrawerContent(
@@ -524,7 +536,9 @@ fun ListContent(
icon = Icons.Default.AccountCircle, icon = Icons.Default.AccountCircle,
tint = MaterialTheme.colorScheme.primary, tint = MaterialTheme.colorScheme.primary,
nav = nav, nav = nav,
route = remember { Route.Profile(accountViewModel.userProfile().pubkeyHex) }, computeRoute = {
Route.Profile(accountViewModel.userProfile().pubkeyHex)
},
) )
NavigationRow( NavigationRow(
@@ -661,6 +675,25 @@ fun NavigationRow(
) )
} }
@Composable
fun NavigationRow(
title: Int,
icon: ImageVector,
tint: Color,
nav: INav,
computeRoute: () -> Route,
) {
IconRow(
title = title,
icon = icon,
tint = tint,
onClick = {
nav.closeDrawer()
nav.nav(computeRoute)
},
)
}
@Composable @Composable
fun IconRow( fun IconRow(
title: Int, title: Int,
@@ -669,30 +702,26 @@ fun IconRow(
tint: Color, tint: Color,
onClick: () -> Unit, onClick: () -> Unit,
) { ) {
val title = stringRes(title)
Row( Row(
modifier = modifier =
Modifier IconRowModifier.clickable(
.fillMaxWidth() onClick = onClick,
.clickable( ),
onClick = onClick, verticalAlignment = Alignment.CenterVertically,
),
) { ) {
Row( Icon(
modifier = IconRowModifier, painter = painterRes(icon, iconReference),
verticalAlignment = Alignment.CenterVertically, contentDescription = title,
) { modifier = Size22Modifier,
Icon( tint = tint,
painter = painterRes(icon, iconReference), )
contentDescription = stringRes(title), Text(
modifier = Size22Modifier, modifier = IconRowTextModifier,
tint = tint, text = title,
) fontSize = Font18SP,
Text( )
modifier = IconRowTextModifier,
text = stringRes(title),
fontSize = Font18SP,
)
}
} }
} }
@@ -703,32 +732,28 @@ fun IconRow(
tint: Color, tint: Color,
onClick: () -> Unit, onClick: () -> Unit,
) { ) {
val title = stringRes(title)
Row( Row(
modifier = modifier =
Modifier IconRowModifier.clickable(
.fillMaxWidth() onClickLabel = title,
.clickable( onClick = onClick,
onClickLabel = stringRes(title), ),
onClick = onClick, verticalAlignment = Alignment.CenterVertically,
),
) { ) {
Row( Icon(
modifier = IconRowModifier, imageVector = icon,
verticalAlignment = Alignment.CenterVertically, contentDescription = title,
) { modifier = Size22ModifierWith4Padding,
Icon( tint = tint,
imageVector = icon, )
contentDescription = stringRes(title),
modifier = Size22Modifier.padding(end = 4.dp),
tint = tint,
)
Text( Text(
modifier = IconRowTextModifier, modifier = IconRowTextModifier,
text = stringRes(title), text = title,
fontSize = Font18SP, fontSize = Font18SP,
) )
}
} }
} }
@@ -389,3 +389,5 @@ val SuggestionListDefaultHeightChat = Modifier.heightIn(0.dp, 200.dp)
val SuggestionListDefaultHeightPage = Modifier.heightIn(0.dp, 300.dp) val SuggestionListDefaultHeightPage = Modifier.heightIn(0.dp, 300.dp)
val FollowPackHeaderModifier = Modifier.fillMaxWidth().height(TopBarSize) val FollowPackHeaderModifier = Modifier.fillMaxWidth().height(TopBarSize)
val Size22ModifierWith4Padding = Modifier.size(22.dp).padding(end = 4.dp)