feat: change message style

This commit is contained in:
2025-06-06 01:23:41 +03:00
parent ea783c9f27
commit 0384626d83
3 changed files with 35 additions and 12 deletions
@@ -1,7 +1,6 @@
/*
* Created by sweetbread
* Copyright (c) 2025. All rights reserved.
* Last modified 03.03.2025, 20:22
*/
package ru.risdeveau.pixeldragon.ui.activity
@@ -18,16 +17,23 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults.topAppBarColors
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import ru.risdeveau.pixeldragon.api.Me
import ru.risdeveau.pixeldragon.api.getMe
import ru.risdeveau.pixeldragon.ui.layout.Room
import ru.risdeveau.pixeldragon.ui.layout.RoomList
import ru.risdeveau.pixeldragon.ui.theme.PixelDragonTheme
var ME: Me? = null
class MainActivity : ComponentActivity() {
@OptIn(ExperimentalMaterial3Api::class)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -52,6 +58,12 @@ class MainActivity : ComponentActivity() {
) { innerPadding ->
val navController = rememberNavController()
LaunchedEffect(Unit) {
withContext(Dispatchers.IO) {
ME = getMe()
}
}
NavHost(navController = navController, startDestination = "rooms") {
composable("rooms") { RoomList(Modifier.padding(innerPadding), navController) }
composable(
@@ -15,7 +15,6 @@ import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
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 coil3.compose.AsyncImagePainter
@@ -36,6 +35,7 @@ enum class ImageLoadState {
fun MXCImage(
mxcUrl: String,
modifier: Modifier = Modifier,
contentScale: ContentScale = ContentScale.Fit,
contentDescription: String = ""
) {
val loadState = remember { mutableStateOf(ImageLoadState.Loading) }
@@ -59,13 +59,12 @@ fun MXCImage(
)
Box(
modifier = modifier,
contentAlignment = Alignment.Center
modifier = modifier.fillMaxSize()
) {
Image(
painter = painter,
contentDescription = contentDescription,
contentScale = ContentScale.Crop,
contentScale = contentScale,
modifier = Modifier.fillMaxSize()
)
@@ -14,6 +14,8 @@ import android.webkit.WebViewClient
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
@@ -31,8 +33,8 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
@@ -47,7 +49,7 @@ import org.jsoup.safety.Safelist
import ru.risdeveau.pixeldragon.api.Event
import ru.risdeveau.pixeldragon.api.getAccountData
import ru.risdeveau.pixeldragon.api.getEventsAround
import ru.risdeveau.pixeldragon.api.getMe
import ru.risdeveau.pixeldragon.ui.activity.ME
import ru.risdeveau.pixeldragon.ui.item.MXCImage
@Composable
@@ -59,7 +61,7 @@ fun Room(modifier: Modifier = Modifier, rid: String) {
LaunchedEffect(true) {
coroutineScope.launch {
withContext(Dispatchers.IO) {
val readMark = getAccountData(getMe()!!.userId, rid, "m.fully_read")
val readMark = getAccountData(ME!!.userId, rid, "m.fully_read")
val eventsAround = getEventsAround(rid, readMark!!.getString("event_id")) //FIXME: Null check
eventsId = eventsAround.let {
it.before + listOf(it.base) + it.after
@@ -88,12 +90,21 @@ fun EventItem(event: Event) {
when (event.type) {
"m.room.message" -> Column(
Modifier
.align(Alignment.CenterStart)
.fillMaxSize()
.then (
if (event.sender != ME!!.userId)
Modifier.padding(end = 16.dp)
else
Modifier.padding(start = 16.dp)
)
.padding(4.dp)
.background(
color = MaterialTheme.colorScheme.surfaceContainer,
shape = RoundedCornerShape(16.dp)
if (event.sender != ME?.userId)
MaterialTheme.colorScheme.surfaceContainer
else
MaterialTheme.colorScheme.primaryContainer
)
.clip(RoundedCornerShape(16.dp))
.padding(4.dp)
) {
Text(event.sender, maxLines = 1, fontWeight = FontWeight.Bold)
@@ -107,7 +118,7 @@ fun EventItem(event: Event) {
}
"m.image" ->
MXCImage(event.content.getString("url"))
MXCImage(event.content.getString("url"), Modifier.fillMaxWidth(.9f))
null -> Text(event.content.toString(2))
@@ -118,6 +129,7 @@ fun EventItem(event: Event) {
else -> Text(event.type,
Modifier
.fillMaxHeight()
.padding(4.dp)
.background(MaterialTheme.colorScheme.errorContainer)
.padding(4.dp)