Avoid remembering Modifier
This commit is contained in:
@@ -0,0 +1,143 @@
|
|||||||
|
package com.vitorpamplona.amethyst.ui.layouts
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.material3.Divider
|
||||||
|
import androidx.compose.material3.ListItem
|
||||||
|
import androidx.compose.material3.LocalTextStyle
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.MutableState
|
||||||
|
import androidx.compose.runtime.derivedStateOf
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.layout.ContentScale
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.text.style.TextDirection
|
||||||
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import com.vitorpamplona.amethyst.R
|
||||||
|
import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.NewItemsBubble
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.NonClickableUserPictures
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.RoomNameDisplay
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.TimeAgo
|
||||||
|
import com.vitorpamplona.amethyst.ui.note.timeAgo
|
||||||
|
import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.AccountPictureModifier
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.ChatHeadlineBorders
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.DividerThickness
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.Height4dpModifier
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.Size55Modifier
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.Size55dp
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.StdTopPadding
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.grayText
|
||||||
|
import com.vitorpamplona.quartz.events.ChatroomKey
|
||||||
|
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||||
|
|
||||||
|
@SuppressLint("UnrememberedMutableState")
|
||||||
|
@Composable
|
||||||
|
@Preview
|
||||||
|
fun ChannelNamePreview() {
|
||||||
|
Column {
|
||||||
|
ChatHeaderLayout(
|
||||||
|
channelPicture = {
|
||||||
|
Image(
|
||||||
|
painter = painterResource(R.drawable.github),
|
||||||
|
contentDescription = stringResource(id = R.string.profile_banner),
|
||||||
|
contentScale = ContentScale.FillWidth
|
||||||
|
)
|
||||||
|
},
|
||||||
|
firstRow = {
|
||||||
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
|
Text("This is my author", Modifier.weight(1f))
|
||||||
|
TimeAgo(TimeUtils.now())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
secondRow = {
|
||||||
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
|
Text("This is a message from this person", Modifier.weight(1f))
|
||||||
|
NewItemsBubble()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onClick = {
|
||||||
|
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Divider()
|
||||||
|
|
||||||
|
ListItem(
|
||||||
|
headlineContent = {
|
||||||
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
|
Text("This is my author", Modifier.weight(1f))
|
||||||
|
TimeAgo(TimeUtils.now())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
supportingContent = {
|
||||||
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||||
|
Text("This is a message from this person", Modifier.weight(1f))
|
||||||
|
NewItemsBubble()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
leadingContent = {
|
||||||
|
Image(
|
||||||
|
painter = painterResource(R.drawable.github),
|
||||||
|
contentDescription = stringResource(id = R.string.profile_banner),
|
||||||
|
contentScale = ContentScale.FillWidth,
|
||||||
|
modifier = Size55Modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun ChatHeaderLayout(
|
||||||
|
channelPicture: @Composable () -> Unit,
|
||||||
|
firstRow: @Composable () -> Unit,
|
||||||
|
secondRow: @Composable () -> Unit,
|
||||||
|
onClick: () -> Unit
|
||||||
|
) {
|
||||||
|
Column(modifier = remember { Modifier.clickable(onClick = onClick) }) {
|
||||||
|
Row(
|
||||||
|
modifier = ChatHeadlineBorders,
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
Box(Size55Modifier) {
|
||||||
|
channelPicture()
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = DoubleHorzSpacer)
|
||||||
|
|
||||||
|
Column(
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
) {
|
||||||
|
firstRow()
|
||||||
|
|
||||||
|
|
||||||
|
Spacer(modifier = Height4dpModifier)
|
||||||
|
|
||||||
|
secondRow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Divider(
|
||||||
|
modifier = StdTopPadding,
|
||||||
|
thickness = DividerThickness
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -57,9 +57,11 @@ import com.vitorpamplona.amethyst.ui.theme.DividerThickness
|
|||||||
import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer
|
import com.vitorpamplona.amethyst.ui.theme.DoubleHorzSpacer
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Height4dpModifier
|
import com.vitorpamplona.amethyst.ui.theme.Height4dpModifier
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size55Modifier
|
import com.vitorpamplona.amethyst.ui.theme.Size55Modifier
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.AccountPictureModifier
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size55dp
|
import com.vitorpamplona.amethyst.ui.theme.Size55dp
|
||||||
import com.vitorpamplona.amethyst.ui.theme.Size75dp
|
import com.vitorpamplona.amethyst.ui.theme.Size75dp
|
||||||
import com.vitorpamplona.amethyst.ui.theme.StdTopPadding
|
import com.vitorpamplona.amethyst.ui.theme.StdTopPadding
|
||||||
|
import com.vitorpamplona.amethyst.ui.theme.emptyLineItemModifier
|
||||||
import com.vitorpamplona.amethyst.ui.theme.grayText
|
import com.vitorpamplona.amethyst.ui.theme.grayText
|
||||||
import com.vitorpamplona.amethyst.ui.theme.placeholderText
|
import com.vitorpamplona.amethyst.ui.theme.placeholderText
|
||||||
import com.vitorpamplona.quartz.encoders.HexKey
|
import com.vitorpamplona.quartz.encoders.HexKey
|
||||||
@@ -120,11 +122,7 @@ private fun ChatroomPrivateMessages(
|
|||||||
if (room != null) {
|
if (room != null) {
|
||||||
UserRoomCompose(baseNote, room, accountViewModel, nav)
|
UserRoomCompose(baseNote, room, accountViewModel, nav)
|
||||||
} else {
|
} else {
|
||||||
Box(
|
Box(emptyLineItemModifier) {
|
||||||
Modifier
|
|
||||||
.height(Size75dp)
|
|
||||||
.fillMaxWidth()
|
|
||||||
) {
|
|
||||||
// Makes sure just a max amount of objects are loaded.
|
// Makes sure just a max amount of objects are loaded.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,12 +452,7 @@ fun ChannelName(
|
|||||||
robot = channelIdHex,
|
robot = channelIdHex,
|
||||||
model = channelPicture,
|
model = channelPicture,
|
||||||
contentDescription = stringResource(R.string.channel_image),
|
contentDescription = stringResource(R.string.channel_image),
|
||||||
modifier = remember {
|
modifier = AccountPictureModifier,
|
||||||
Modifier
|
|
||||||
.width(Size55dp)
|
|
||||||
.height(Size55dp)
|
|
||||||
.clip(shape = CircleShape)
|
|
||||||
},
|
|
||||||
loadProfilePicture = loadProfilePicture
|
loadProfilePicture = loadProfilePicture
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -158,3 +158,5 @@ val IconRowTextModifier = Modifier.padding(start = 16.dp)
|
|||||||
val IconRowModifier = Modifier
|
val IconRowModifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 15.dp, horizontal = 25.dp)
|
.padding(vertical = 15.dp, horizontal = 25.dp)
|
||||||
|
|
||||||
|
val emptyLineItemModifier = Modifier.height(Size75dp).fillMaxWidth()
|
||||||
Reference in New Issue
Block a user