feat: material 3-ise session settings further

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2024-01-08 00:43:54 +01:00
parent 1e68aa843f
commit c53fd360f2
3 changed files with 34 additions and 47 deletions

View File

@ -1,27 +1,18 @@
package chat.revolt.components.settings.sessions package chat.revolt.components.settings.sessions
import android.text.format.DateUtils import android.text.format.DateUtils
import androidx.compose.foundation.background import androidx.compose.material.IconButton
import androidx.compose.foundation.layout.Arrangement import androidx.compose.material3.Icon
import androidx.compose.foundation.layout.Column import androidx.compose.material3.ListItem
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.surfaceColorAtElevation
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
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.res.painterResource
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import chat.revolt.R import chat.revolt.R
import chat.revolt.api.internals.ULID import chat.revolt.api.internals.ULID
import chat.revolt.api.schemas.Session import chat.revolt.api.schemas.Session
@ -33,7 +24,6 @@ fun SessionItem(
currentSession: Boolean = false, currentSession: Boolean = false,
onLogout: (Session) -> Unit onLogout: (Session) -> Unit
) { ) {
val context = LocalContext.current
val decodedUlid by remember(session) { mutableLongStateOf(ULID.asTimestamp(session.id)) } val decodedUlid by remember(session) { mutableLongStateOf(ULID.asTimestamp(session.id)) }
val formattedTimestamp = remember(decodedUlid) { val formattedTimestamp = remember(decodedUlid) {
DateUtils.getRelativeTimeSpanString( DateUtils.getRelativeTimeSpanString(
@ -43,45 +33,33 @@ fun SessionItem(
) )
} }
Row( ListItem(
modifier = modifier headlineContent = {
.fillMaxWidth()
.clip(shape = MaterialTheme.shapes.medium)
.background(
color = if (currentSession) {
MaterialTheme.colorScheme.surfaceColorAtElevation(4.dp)
} else {
MaterialTheme.colorScheme.surfaceColorAtElevation(2.dp)
}
)
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
Column(
modifier = Modifier
.weight(1f)
.padding(end = 16.dp)
) {
Text( Text(
text = session.name, text = session.name,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis, overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.labelLarge
) )
},
supportingContent = {
Text( Text(
text = stringResource(R.string.settings_sessions_first_seen, formattedTimestamp), text = stringResource(R.string.settings_sessions_first_seen, formattedTimestamp),
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis, overflow = TextOverflow.Ellipsis
style = MaterialTheme.typography.labelSmall
) )
} },
trailingContent = {
if (!currentSession) { if (!currentSession) {
ElevatedButton(onClick = { onLogout(session) }) { IconButton(onClick = {
Text(stringResource(R.string.logout)) onLogout(session)
}) {
Icon(
painter = painterResource(R.drawable.ic_logout_24dp),
contentDescription = stringResource(R.string.logout)
)
}
} }
} },
} modifier = modifier
)
} }

View File

@ -199,7 +199,7 @@ fun SessionSettingsScreen(
item(key = "logoutOtherSessions") { item(key = "logoutOtherSessions") {
Row( Row(
modifier = Modifier modifier = Modifier
.padding(8.dp) .padding(vertical = 8.dp, horizontal = 16.dp)
.fillMaxWidth() .fillMaxWidth()
.clip(shape = MaterialTheme.shapes.medium) .clip(shape = MaterialTheme.shapes.medium)
.background( .background(

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#ffffff"
android:pathData="M17 7L15.59 8.41L18.17 11H8V13H18.17L15.59 15.58L17 17L22 12M4 5H12V3H4C2.9 3 2 3.9 2 5V19C2 20.1 2.9 21 4 21H12V19H4V5Z" />
</vector>