From 4b61beb237d426f69ee954ac3502c536f71bf9be Mon Sep 17 00:00:00 2001 From: Diogo Date: Thu, 5 Sep 2024 11:30:15 +0100 Subject: [PATCH] split inactive user picker between platforms --- .../views/chatlist/UserPicker.android.kt | 79 +++++++++++++++++++ .../common/views/chatlist/UserPicker.kt | 72 +++-------------- .../views/chatlist/UserPicker.desktop.kt | 15 ++++ 3 files changed, 104 insertions(+), 62 deletions(-) create mode 100644 apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.android.kt create mode 100644 apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.desktop.kt diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.android.kt new file mode 100644 index 0000000000..801da7e79b --- /dev/null +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.android.kt @@ -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, + 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) + ) + } + } + } + } + } +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt index ba9686f624..2a3195421d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt @@ -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, - 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, + stopped: Boolean, + onShowAllProfilesClicked: () -> Unit, + onUserClicked: (user: User) -> Unit, +) + @Composable fun DevicePill( active: Boolean, diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.desktop.kt new file mode 100644 index 0000000000..7885552d03 --- /dev/null +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.desktop.kt @@ -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, + stopped: Boolean, + onShowAllProfilesClicked: () -> Unit, + onUserClicked: (user: User) -> Unit, +) { +}