split inactive user picker between platforms

This commit is contained in:
Diogo
2024-09-05 11:30:15 +01:00
parent 0db7ab964b
commit 4b61beb237
3 changed files with 104 additions and 62 deletions
@@ -0,0 +1,79 @@
package chat.simplex.common.views.chatlist
import SectionItemView
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import chat.simplex.common.model.User
import chat.simplex.common.model.UserInfo
import chat.simplex.common.ui.theme.CurrentColors
import chat.simplex.common.ui.theme.DEFAULT_PADDING
import chat.simplex.common.views.helpers.fontSizeSqrtMultiplier
import chat.simplex.res.MR
import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
@Composable
actual fun UserPickerInactiveUsersSection(
users: List<UserInfo>,
stopped: Boolean,
onShowAllProfilesClicked: () -> Unit,
onUserClicked: (user: User) -> Unit,
) {
val scrollState = rememberScrollState()
SectionItemView(minHeight = 80.dp, padding = PaddingValues(start = 16.dp), disabled = stopped) {
Box {
Row(modifier = Modifier.padding(end = DEFAULT_PADDING).horizontalScroll(scrollState)) {
users.forEach { u ->
val size = 60
UserPickerInactiveUserBadge(u, stopped) {
onUserClicked(it)
}
Spacer(Modifier.width((size * 0.618).dp))
}
}
Box(
contentAlignment = Alignment.CenterEnd,
modifier = Modifier.fillMaxWidth()
) {
Row(
horizontalArrangement = Arrangement.End,
modifier = Modifier.fillMaxWidth().padding(end = DEFAULT_PADDING).height(60.dp)
) {
Canvas(modifier = Modifier.height(60.dp).width(200.dp)) {
drawRect(
brush = Brush.linearGradient(
colors = listOf(
Color.Transparent,
CurrentColors.value.colors.surface,
)
),
)
}
}
IconButton(
onClick = onShowAllProfilesClicked,
enabled = !stopped,
) {
Box(
contentAlignment = Alignment.CenterEnd
) {
Icon(
painterResource(MR.images.ic_chevron_right),
stringResource(MR.strings.your_chat_profiles),
tint = MaterialTheme.colors.secondary,
modifier = Modifier.size(60.dp * fontSizeSqrtMultiplier)
)
}
}
}
}
}
}
@@ -26,7 +26,6 @@ import dev.icerock.moko.resources.compose.painterResource
import androidx.compose.ui.text.capitalize
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.*
import chat.simplex.common.model.*
import chat.simplex.common.model.ChatController.appPrefs
@@ -189,7 +188,7 @@ private fun ActiveUserSection(
}
@Composable
private fun InactiveUserBadge(userInfo: UserInfo, stopped: Boolean, onClick: (user: User) -> Unit) {
fun UserPickerInactiveUserBadge(userInfo: UserInfo, stopped: Boolean, onClick: (user: User) -> Unit) {
Box {
IconButton(
onClick = { onClick(userInfo.user) },
@@ -205,65 +204,6 @@ private fun InactiveUserBadge(userInfo: UserInfo, stopped: Boolean, onClick: (us
}
}
@Composable
private fun InactiveUsersSection(
users: List<UserInfo>,
stopped: Boolean,
onShowAllProfilesClicked: () -> Unit,
onUserClicked: (user: User) -> Unit,
) {
val scrollState = rememberScrollState()
SectionItemView(minHeight = 80.dp, padding = PaddingValues(start = 16.dp), disabled = stopped) {
Box {
Row(modifier = Modifier.padding(end = DEFAULT_PADDING).horizontalScroll(scrollState)) {
users.forEach { u ->
val size = 60
InactiveUserBadge(u, stopped) {
onUserClicked(it)
}
Spacer(Modifier.width((size * 0.618).dp))
}
}
Box(
contentAlignment = Alignment.CenterEnd,
modifier = Modifier.fillMaxWidth()
) {
Row(
horizontalArrangement = Arrangement.End,
modifier = Modifier.fillMaxWidth().padding(end = DEFAULT_PADDING).height(60.dp)
) {
Canvas(modifier = Modifier.height(60.dp).width(200.dp)) {
drawRect(
brush = Brush.linearGradient(
colors = listOf(
Color.Transparent,
CurrentColors.value.colors.surface,
)
),
)
}
}
IconButton(
onClick = onShowAllProfilesClicked,
enabled = !stopped,
) {
Box(
contentAlignment = Alignment.CenterEnd
) {
Icon(
painterResource(MR.images.ic_chevron_right),
stringResource(MR.strings.your_chat_profiles),
tint = MaterialTheme.colors.secondary,
modifier = Modifier.size(60.dp * fontSizeSqrtMultiplier)
)
}
}
}
}
}
}
@Composable
private fun GlobalSettingsSection(
chatModel: ChatModel,
@@ -282,7 +222,7 @@ private fun GlobalSettingsSection(
SectionView {
if (users.isNotEmpty()) {
InactiveUsersSection(
UserPickerInactiveUsersSection(
users = users,
onShowAllProfilesClicked = onShowAllProfilesClicked,
onUserClicked = onUserClicked,
@@ -762,6 +702,14 @@ private fun DevicePickerRow(
}
}
@Composable
expect fun UserPickerInactiveUsersSection(
users: List<UserInfo>,
stopped: Boolean,
onShowAllProfilesClicked: () -> Unit,
onUserClicked: (user: User) -> Unit,
)
@Composable
fun DevicePill(
active: Boolean,
@@ -0,0 +1,15 @@
package chat.simplex.common.views.chatlist
import androidx.compose.runtime.Composable
import chat.simplex.common.model.User
import chat.simplex.common.model.UserInfo
@Composable
actual fun UserPickerInactiveUsersSection(
users: List<UserInfo>,
stopped: Boolean,
onShowAllProfilesClicked: () -> Unit,
onUserClicked: (user: User) -> Unit,
) {
}