|
@@ -1,7 +1,9 @@
|
|
|
package io.nexilis.alpha.ui.main
|
|
|
|
|
|
import android.text.format.DateUtils
|
|
|
+import androidx.compose.foundation.ExperimentalFoundationApi
|
|
|
import androidx.compose.foundation.background
|
|
|
+import androidx.compose.foundation.combinedClickable
|
|
|
import androidx.compose.foundation.layout.*
|
|
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
|
@@ -10,7 +12,9 @@ import androidx.compose.foundation.shape.RoundedCornerShape
|
|
|
import androidx.compose.foundation.text.KeyboardOptions
|
|
|
import androidx.compose.material.icons.Icons
|
|
|
import androidx.compose.material.icons.automirrored.filled.Send
|
|
|
+import androidx.compose.material.icons.filled.AccessTime
|
|
|
import androidx.compose.material.icons.filled.Add
|
|
|
+import androidx.compose.material.icons.filled.Done
|
|
|
import androidx.compose.material.icons.filled.DoneAll
|
|
|
import androidx.compose.material3.*
|
|
|
import androidx.compose.runtime.*
|
|
@@ -29,9 +33,12 @@ import androidx.hilt.navigation.compose.hiltViewModel
|
|
|
import androidx.navigation.NavHostController
|
|
|
import io.nexilis.alpha.ui.viewmodel.MainViewModel
|
|
|
import io.nexilis.service.data.entities.Message
|
|
|
+import io.nexilis.service.data.entities.MessageStatus
|
|
|
import io.nexilis.service.data.viewmodels.BuddyViewModel
|
|
|
+import io.nexilis.service.data.viewmodels.MessageStatusViewModel
|
|
|
import io.nexilis.service.data.viewmodels.MessageViewModel
|
|
|
|
|
|
+@OptIn(ExperimentalFoundationApi::class)
|
|
|
@Composable
|
|
|
fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewModel) {
|
|
|
var textInput by rememberSaveable(stateSaver = TextFieldValue.Saver) {
|
|
@@ -42,6 +49,7 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
|
|
|
val buddy by buddyViewModel.getBuddy(pin).observeAsState()
|
|
|
val messageModel: MessageViewModel = hiltViewModel()
|
|
|
val list by messageModel.getOpposite(pin).observeAsState()
|
|
|
+ val messageStatusModel: MessageStatusViewModel = hiltViewModel()
|
|
|
LaunchedEffect(buddy) {
|
|
|
buddy?.first_name?.let {
|
|
|
mainViewModel.setTitle("$it ${buddy?.last_name ?: ""}".trim())
|
|
@@ -83,6 +91,7 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
|
|
|
shape = RoundedCornerShape(16.dp)
|
|
|
clip = true
|
|
|
}
|
|
|
+ .combinedClickable(onLongClick = {}, onClick = {})
|
|
|
.background(color = MaterialTheme.colorScheme.primaryContainer)
|
|
|
.padding(8.dp),
|
|
|
text = list?.get(it)?.message_text ?: "",
|
|
@@ -103,14 +112,24 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
|
|
|
style = MaterialTheme.typography.bodySmall,
|
|
|
)
|
|
|
Spacer(modifier = Modifier.width(6.dp))
|
|
|
- Icon(
|
|
|
- imageVector = Icons.Default.DoneAll,
|
|
|
- contentDescription = "",
|
|
|
- modifier = Modifier
|
|
|
- .align(Alignment.Bottom)
|
|
|
- .size(16.dp),
|
|
|
- tint = Color(0xFF0075F1)
|
|
|
- )
|
|
|
+ message?.message_id?.let {
|
|
|
+ val messageStatus by messageStatusModel.get(it, pin)
|
|
|
+ .observeAsState()
|
|
|
+ Icon(
|
|
|
+ imageVector = when (messageStatus?.status) {
|
|
|
+ 1, 2 -> Icons.Default.Done
|
|
|
+ 3 -> Icons.Default.DoneAll
|
|
|
+ 4 -> Icons.Default.DoneAll
|
|
|
+ else -> Icons.Default.AccessTime
|
|
|
+ },
|
|
|
+ contentDescription = "",
|
|
|
+ modifier = Modifier
|
|
|
+ .align(Alignment.Bottom)
|
|
|
+ .size(16.dp),
|
|
|
+ tint = if (messageStatus?.status == 4) Color(0xFF0075F1) else Color.Gray
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
@@ -126,6 +145,7 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
|
|
|
shape = RoundedCornerShape(16.dp)
|
|
|
clip = true
|
|
|
}
|
|
|
+ .combinedClickable(onLongClick = {}, onClick = {})
|
|
|
.background(color = MaterialTheme.colorScheme.surface)
|
|
|
.padding(8.dp),
|
|
|
text = list?.get(it)?.message_text ?: "",
|
|
@@ -134,7 +154,7 @@ fun Chat(navController: NavHostController, pin: String, mainViewModel: MainViewM
|
|
|
Row(
|
|
|
modifier = Modifier
|
|
|
.padding(3.dp)
|
|
|
- .align(Alignment.Start)
|
|
|
+ .align(Alignment.End)
|
|
|
) {
|
|
|
Text(
|
|
|
text = DateUtils.formatDateTime(
|