yayan hace 1 año
padre
commit
5914ae2ba6

+ 2 - 0
app/src/main/java/io/nexilis/alpha/MainActivity.kt

@@ -3,6 +3,7 @@ package io.nexilis.alpha
 import android.os.Bundle
 import androidx.activity.ComponentActivity
 import androidx.activity.compose.setContent
+import androidx.activity.enableEdgeToEdge
 import dagger.hilt.android.AndroidEntryPoint
 import io.nexilis.alpha.ui.main.Root
 import io.nexilis.alpha.ui.theme.AlphaTheme
@@ -13,6 +14,7 @@ class MainActivity : ComponentActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        enableEdgeToEdge()
         setContent {
             AlphaTheme {
                 Root()

+ 13 - 15
app/src/main/java/io/nexilis/alpha/ui/main/Chat.kt

@@ -5,6 +5,7 @@ import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.*
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.foundation.text.KeyboardOptions
@@ -38,10 +39,11 @@ import io.nexilis.service.data.viewmodels.MessageViewModel
 import kotlinx.serialization.encodeToString
 import kotlinx.serialization.json.Json
 
+@OptIn(ExperimentalLayoutApi::class)
 @Composable
 fun Chat(
     navController: NavHostController,
-    contentPadding: PaddingValues = PaddingValues(0.dp),
+    contentPadding: PaddingValues,
     pin: String,
     me: Buddy
 ) {
@@ -52,28 +54,25 @@ fun Chat(
     val list by messageModel.getOpposite(pin).observeAsState()
     val state = rememberLazyListState()
     val context = LocalContext.current
-    LaunchedEffect(key1 = list) {
-        list?.size?.let { size ->
-            if (size > 0) {
-                size.minus(1).let { state.scrollToItem(it) }
-            }
-        }
-    }
     var openAlertDialog by remember { mutableStateOf(false) }
     val attachments = remember { mutableStateListOf<Uri>() }
     Column(
         modifier = Modifier
             .fillMaxSize()
             .background(color = MaterialTheme.colorScheme.surfaceContainer)
-            .padding(contentPadding)
+            .consumeWindowInsets(contentPadding)
+            .imePadding()
+            .imeNestedScroll()
     ) {
         LazyColumn(
-            modifier = Modifier.weight(1.0f),
-            state = state
+            modifier = Modifier
+                .weight(1f),
+            state = state,
+//            contentPadding = contentPadding,
+            reverseLayout = true
         ) {
-            items(count = list?.size ?: 0) {
-                list?.let { l ->
-                    val message = l[it]
+            list?.let { l ->
+                items(l) { message ->
                     ListItem(modifier = Modifier.fillMaxWidth(), headlineContent = {
                         Row(
                             modifier = Modifier.fillMaxWidth(),
@@ -105,7 +104,6 @@ fun Chat(
                         }
                     }, colors = ListItemDefaults.colors(containerColor = Color.Transparent))
                 }
-
             }
         }
         TextField(

+ 1 - 0
app/src/main/java/io/nexilis/alpha/ui/main/Main.kt

@@ -103,6 +103,7 @@ fun Main(navController: NavHostController, me: Buddy) {
                         ?.let { pin ->
                             Chat(
                                 navController = navMainController,
+                                contentPadding = contentPadding,
                                 pin = pin,
                                 me = me
                             )

+ 1 - 1
cpaas-lite/src/main/java/io/nexilis/service/data/daos/MessageDao.kt

@@ -19,7 +19,7 @@ abstract class MessageDao {
     @Query("select * from Message where message_id = :id")
     abstract fun getSync(id: String): Message?
 
-    @Query("select * from Message where opposite_pin = :pin order by server_date asc")
+    @Query("select * from Message where opposite_pin = :pin order by server_date desc")
     abstract fun getOpposite(pin: String): LiveData<List<Message>>
 
     @Insert(onConflict = OnConflictStrategy.REPLACE)