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