diff --git a/app/src/main/java/ru/risdeveau/pixeldragon/ui/activity/MainActivity.kt b/app/src/main/java/ru/risdeveau/pixeldragon/ui/activity/MainActivity.kt index 4b50ac9..e0bef14 100755 --- a/app/src/main/java/ru/risdeveau/pixeldragon/ui/activity/MainActivity.kt +++ b/app/src/main/java/ru/risdeveau/pixeldragon/ui/activity/MainActivity.kt @@ -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( diff --git a/app/src/main/java/ru/risdeveau/pixeldragon/ui/item/Image.kt b/app/src/main/java/ru/risdeveau/pixeldragon/ui/item/Image.kt index a09de9e..a19a85b 100755 --- a/app/src/main/java/ru/risdeveau/pixeldragon/ui/item/Image.kt +++ b/app/src/main/java/ru/risdeveau/pixeldragon/ui/item/Image.kt @@ -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() ) diff --git a/app/src/main/java/ru/risdeveau/pixeldragon/ui/layout/Room.kt b/app/src/main/java/ru/risdeveau/pixeldragon/ui/layout/Room.kt index 11c2f9e..e036f92 100755 --- a/app/src/main/java/ru/risdeveau/pixeldragon/ui/layout/Room.kt +++ b/app/src/main/java/ru/risdeveau/pixeldragon/ui/layout/Room.kt @@ -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)