feat: change message style
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user