Trying to plumb list changes...
This commit is contained in:
@@ -83,8 +83,12 @@ dependencies {
|
||||
implementation "androidx.navigation:navigation-compose:$nav_version"
|
||||
|
||||
implementation 'androidx.activity:activity-compose:1.4.3'
|
||||
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
|
||||
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1'
|
||||
|
||||
// Lifecycle
|
||||
def lifecycle_version = "2.6.1"
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-compose:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"
|
||||
|
||||
implementation "androidx.compose.ui:ui:1.4.3"
|
||||
implementation 'androidx.compose.material:material:1.4.3'
|
||||
|
||||
@@ -21,6 +21,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import net.buzzert.kordophone.backend.model.Conversation
|
||||
|
||||
@@ -29,7 +30,7 @@ fun ConversationListScreen(
|
||||
viewModel: ConversationListViewModel = hiltViewModel(),
|
||||
onConversationSelected: (conversationID: String) -> Unit
|
||||
) {
|
||||
val conversations by viewModel.conversations.collectAsState(initial = listOf())
|
||||
val conversations by viewModel.conversations.collectAsStateWithLifecycle(initialValue = listOf())
|
||||
ConversationListView(conversations = conversations, onConversationSelected = onConversationSelected)
|
||||
}
|
||||
|
||||
@@ -56,6 +57,7 @@ fun ConversationListView(
|
||||
name = conversation.formattedDisplayName(),
|
||||
id = conversation.guid,
|
||||
isUnread = conversation.unreadCount > 0,
|
||||
lastMessagePreview = conversation.lastMessagePreview ?: "",
|
||||
onClick = { onConversationSelected(conversation.guid) }
|
||||
)
|
||||
}
|
||||
@@ -68,6 +70,7 @@ fun ConversationListItem(
|
||||
name: String,
|
||||
id: String,
|
||||
isUnread: Boolean,
|
||||
lastMessagePreview: String,
|
||||
onClick: () -> Unit
|
||||
) {
|
||||
val unreadSize = 12.dp
|
||||
@@ -113,7 +116,7 @@ fun ConversationListItem(
|
||||
Spacer(Modifier.width(horizontalPadding))
|
||||
}
|
||||
|
||||
Text("This is a test.")
|
||||
Text(lastMessagePreview)
|
||||
|
||||
Spacer(Modifier.height(verticalPadding))
|
||||
Divider()
|
||||
@@ -139,7 +142,7 @@ fun UnreadIndicator(size: Dp, modifier: Modifier = Modifier) {
|
||||
@Composable
|
||||
fun ConversationListItemPreview() {
|
||||
Column(modifier = Modifier.background(MaterialTheme.colors.background)) {
|
||||
ConversationListItem(name = "James Magahern", id = "asdf", isUnread = true) {}
|
||||
ConversationListItem(name = "James Magahern", id = "asdf", lastMessagePreview = "This is a test", isUnread = true) {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package net.buzzert.kordophonedroid.ui.conversationlist
|
||||
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import net.buzzert.kordophone.backend.model.Conversation
|
||||
import net.buzzert.kordophone.backend.server.ChatRepository
|
||||
@@ -15,6 +18,10 @@ class ConversationListViewModel @Inject constructor(
|
||||
) : ViewModel() {
|
||||
val conversations: Flow<List<Conversation>>
|
||||
get() = repository.conversationChanges
|
||||
.map {
|
||||
it.sortedBy { it.date }
|
||||
.reversed()
|
||||
}
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
@@ -24,5 +31,11 @@ class ConversationListViewModel @Inject constructor(
|
||||
viewModelScope.launch {
|
||||
repository.beginWatchingForUpdates(this)
|
||||
}
|
||||
|
||||
viewModelScope.launch {
|
||||
repository.conversationChanges.collect {
|
||||
Log.v("ViewModel", "Got conversationChanges")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,9 +122,11 @@ class ChatRepository(
|
||||
val conversations = fetchConversations()
|
||||
database.writeConversations(conversations)
|
||||
|
||||
// TODO: Delete non-existent conversations.
|
||||
|
||||
// Sync top N number of conversations' message content
|
||||
Log.d(REPO_LOG, "Synchronizing messages")
|
||||
val sortedConversations = conversations.sortedBy { it.date }
|
||||
val sortedConversations = conversations.sortedBy { it.date }.reversed()
|
||||
for (conversation in sortedConversations.take(CONVERSATION_MESSAGE_SYNC_COUNT)) {
|
||||
val messages = fetchMessages(conversation)
|
||||
database.writeMessages(messages, conversation)
|
||||
|
||||
Reference in New Issue
Block a user