Merge pull request #1491 from KotlinGeekDev/set-management-fixes

Set management UI fixes
This commit is contained in:
Vitor Pamplona
2025-09-24 08:40:58 -04:00
committed by GitHub
5 changed files with 45 additions and 27 deletions

View File

@@ -32,7 +32,6 @@ import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@@ -203,11 +202,15 @@ fun CustomListsScreen(
},
)
},
) {
) { paddingValues ->
Column(
Modifier
.padding(it)
.fillMaxHeight(),
.padding(
top = paddingValues.calculateTopPadding(),
bottom = paddingValues.calculateBottomPadding(),
start = 10.dp,
end = 10.dp,
).fillMaxHeight(),
) {
HorizontalPager(state = pagerState) { page ->
when (page) {
@@ -246,7 +249,7 @@ private fun FollowSetFabsAndMenu(
isSetAdditionDialogOpen.value = true
},
shape = CircleShape,
containerColor = ButtonDefaults.filledTonalButtonColors().containerColor,
containerColor = MaterialTheme.colorScheme.primary,
) {
Icon(
painter = painterResource(R.drawable.lock_plus),
@@ -259,7 +262,7 @@ private fun FollowSetFabsAndMenu(
isSetAdditionDialogOpen.value = true
},
shape = CircleShape,
containerColor = ButtonDefaults.filledTonalButtonColors().containerColor,
containerColor = MaterialTheme.colorScheme.primary,
) {
Icon(
painter = painterResource(R.drawable.earth_plus),

View File

@@ -20,14 +20,12 @@
*/
package com.vitorpamplona.amethyst.ui.screen.loggedIn.lists
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.People
import androidx.compose.material3.AlertDialog
@@ -54,7 +52,6 @@ import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.vitorpamplona.amethyst.R
@@ -79,12 +76,7 @@ fun CustomSetItem(
Row(
modifier =
modifier
.clickable(onClick = onFollowSetClick)
.border(
width = Dp.Hairline,
color = Color.Gray,
shape = RoundedCornerShape(percent = 20),
).padding(horizontal = 10.dp),
.clickable(onClick = onFollowSetClick),
) {
Row(
modifier =

View File

@@ -28,6 +28,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -38,6 +39,7 @@ import com.vitorpamplona.amethyst.ui.feeds.FeedError
import com.vitorpamplona.amethyst.ui.feeds.LoadingFeed
import com.vitorpamplona.amethyst.ui.feeds.RefresheableBox
import com.vitorpamplona.amethyst.ui.stringRes
import com.vitorpamplona.amethyst.ui.theme.DividerThickness
import com.vitorpamplona.amethyst.ui.theme.FeedPadding
import com.vitorpamplona.amethyst.ui.theme.StdVertSpacer
@@ -102,7 +104,7 @@ fun FollowSetLoaded(
) {
itemsIndexed(loadedFeedState, key = { _, item -> item.identifierTag }) { _, set ->
CustomSetItem(
modifier = Modifier.animateItem(),
modifier = Modifier.fillMaxSize().animateItem(),
followSet = set,
onFollowSetClick = {
onItemClick(set.identifierTag)
@@ -114,7 +116,7 @@ fun FollowSetLoaded(
onItemDelete(set)
},
)
Spacer(modifier = StdVertSpacer)
HorizontalDivider(thickness = DividerThickness)
}
}
}

View File

@@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.lists.followsets
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@@ -29,12 +30,14 @@ import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -58,6 +61,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.lifecycle.viewmodel.compose.viewModel
@@ -72,7 +76,9 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.lists.FollowSet
import com.vitorpamplona.amethyst.ui.screen.loggedIn.lists.ListVisibility
import com.vitorpamplona.amethyst.ui.screen.loggedIn.lists.NostrUserListFeedViewModel
import com.vitorpamplona.amethyst.ui.screen.loggedIn.qrcode.BackButton
import com.vitorpamplona.amethyst.ui.theme.ButtonBorder
import com.vitorpamplona.amethyst.ui.theme.FeedPadding
import com.vitorpamplona.amethyst.ui.theme.HalfPadding
import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer
import com.vitorpamplona.amethyst.ui.theme.StdPadding
import com.vitorpamplona.quartz.nip51Lists.peopleList.PeopleListEvent
@@ -180,8 +186,6 @@ fun FollowSetScreen(
Modifier
.fillMaxSize()
.padding(
start = 10.dp,
end = 10.dp,
top = padding.calculateTopPadding(),
bottom = padding.calculateBottomPadding(),
).consumeWindowInsets(padding)
@@ -294,7 +298,7 @@ fun FollowSetListItem(
Row {
UserCompose(
user,
overallModifier = StdPadding.weight(1f, fill = false),
overallModifier = HalfPadding.weight(1f, fill = false),
accountViewModel = accountViewModel,
nav = nav,
)
@@ -303,16 +307,17 @@ fun FollowSetListItem(
onDeleteUser(user.pubkeyHex)
},
modifier =
StdPadding
HalfPadding
.align(Alignment.CenterVertically)
.background(
color = MaterialTheme.colorScheme.errorContainer,
shape = RoundedCornerShape(size = 15.dp),
shape = RoundedCornerShape(percent = 80),
),
) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = null,
modifier = Modifier.size(20.dp),
)
}
}
@@ -329,6 +334,17 @@ fun ListActionsMenuButton(
val isActionListOpen = remember { mutableStateOf(false) }
ClickableBox(
modifier =
StdPadding
.size(30.dp)
.border(
width = Dp.Hairline,
color = ButtonDefaults.filledTonalButtonColors().containerColor,
shape = ButtonBorder,
).background(
color = ButtonDefaults.filledTonalButtonColors().containerColor,
shape = ButtonBorder,
),
onClick = { isActionListOpen.value = true },
) {
VerticalDotsIcon()
@@ -362,6 +378,7 @@ fun ListActionsMenu(
onCloseMenu()
},
)
HorizontalDivider()
DropdownMenuItem(
text = {
Text("Delete List")

View File

@@ -245,10 +245,11 @@ fun BackActionButton(
OutlinedButton(
onClick = onBack,
shape = ButtonBorder,
colors = ButtonDefaults.filledTonalButtonColors(),
colors = ButtonDefaults.buttonColors(),
border = ButtonDefaults.outlinedButtonBorder(false),
elevation = ButtonDefaults.elevatedButtonElevation(defaultElevation = 6.0.dp),
) {
Text(text = stringRes(R.string.back), fontWeight = FontWeight.SemiBold)
Text(text = stringRes(R.string.back), fontWeight = FontWeight.Bold, color = Color.White)
}
}
@@ -399,7 +400,7 @@ fun FollowSetItem(
if (isUserInList) {
MaterialTheme.colorScheme.errorContainer
} else {
ButtonDefaults.filledTonalButtonColors().containerColor
MaterialTheme.colorScheme.primary
},
shape = RoundedCornerShape(percent = 80),
),
@@ -414,11 +415,14 @@ fun FollowSetItem(
Icon(
imageVector = Icons.Filled.Add,
contentDescription = null,
tint = MaterialTheme.colorScheme.onBackground,
tint = Color.White,
)
}
}
Text(text = stringRes(if (isUserInList) R.string.remove else R.string.add), color = Color.Gray)
Text(
text = stringRes(if (isUserInList) R.string.remove else R.string.add),
color = MaterialTheme.colorScheme.onBackground,
)
}
}
}