Better database syncing... maybe
This commit is contained in:
@@ -17,6 +17,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -24,6 +25,22 @@ import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import net.buzzert.kordophone.backend.model.Conversation
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalDateTime
|
||||
import java.time.LocalTime
|
||||
import java.time.ZoneId
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.util.Date
|
||||
|
||||
fun formatDateTime(dateTime: LocalDateTime): String {
|
||||
val formatter: DateTimeFormatter = if (LocalDate.now().isEqual(dateTime.toLocalDate())) {
|
||||
DateTimeFormatter.ofPattern("HH:mm") // show just the time
|
||||
} else {
|
||||
DateTimeFormatter.ofPattern("M/d/yy") // show day/month/year
|
||||
}
|
||||
|
||||
return dateTime.format(formatter)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ConversationListScreen(
|
||||
@@ -58,6 +75,7 @@ fun ConversationListView(
|
||||
id = conversation.guid,
|
||||
isUnread = conversation.unreadCount > 0,
|
||||
lastMessagePreview = conversation.lastMessagePreview ?: "",
|
||||
date = conversation.date,
|
||||
onClick = { onConversationSelected(conversation.guid) }
|
||||
)
|
||||
}
|
||||
@@ -71,11 +89,12 @@ fun ConversationListItem(
|
||||
id: String,
|
||||
isUnread: Boolean,
|
||||
lastMessagePreview: String,
|
||||
date: Date,
|
||||
onClick: () -> Unit
|
||||
) {
|
||||
val unreadSize = 12.dp
|
||||
val horizontalPadding = 8.dp
|
||||
val verticalPadding = 12.dp
|
||||
val verticalPadding = 14.dp
|
||||
|
||||
Row(
|
||||
Modifier
|
||||
@@ -108,7 +127,12 @@ fun ConversationListItem(
|
||||
|
||||
Spacer(Modifier.weight(1f))
|
||||
|
||||
Text("13:37",
|
||||
Text(
|
||||
formatDateTime(
|
||||
date.toInstant()
|
||||
.atZone(ZoneId.systemDefault())
|
||||
.toLocalDateTime()
|
||||
),
|
||||
modifier = Modifier.align(Alignment.CenterVertically),
|
||||
color = MaterialTheme.colors.onBackground.copy(alpha = 0.4f)
|
||||
)
|
||||
@@ -116,7 +140,7 @@ fun ConversationListItem(
|
||||
Spacer(Modifier.width(horizontalPadding))
|
||||
}
|
||||
|
||||
Text(lastMessagePreview)
|
||||
Text(lastMessagePreview, maxLines = 1, overflow = TextOverflow.Ellipsis)
|
||||
|
||||
Spacer(Modifier.height(verticalPadding))
|
||||
Divider()
|
||||
@@ -142,7 +166,7 @@ fun UnreadIndicator(size: Dp, modifier: Modifier = Modifier) {
|
||||
@Composable
|
||||
fun ConversationListItemPreview() {
|
||||
Column(modifier = Modifier.background(MaterialTheme.colors.background)) {
|
||||
ConversationListItem(name = "James Magahern", id = "asdf", lastMessagePreview = "This is a test", isUnread = true) {}
|
||||
ConversationListItem(name = "James Magahern", id = "asdf", lastMessagePreview = "This is a test", date = Date(), isUnread = true) {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,13 +4,16 @@ import android.util.Log
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import net.buzzert.kordophone.backend.model.Conversation
|
||||
import net.buzzert.kordophone.backend.server.ChatRepository
|
||||
import javax.inject.Inject
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
@HiltViewModel
|
||||
class ConversationListViewModel @Inject constructor(
|
||||
@@ -28,7 +31,9 @@ class ConversationListViewModel @Inject constructor(
|
||||
// TODO: Need error handling (exceptions thrown below)
|
||||
|
||||
viewModelScope.launch {
|
||||
repository.synchronize()
|
||||
withContext(Dispatchers.IO) {
|
||||
repository.synchronize()
|
||||
}
|
||||
}
|
||||
|
||||
viewModelScope.launch {
|
||||
|
||||
Reference in New Issue
Block a user