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