Private
Public Access
1
0

Trying to plumb list changes...

This commit is contained in:
2023-08-17 01:07:15 -07:00
parent b38c51d108
commit 770bb496f5
4 changed files with 28 additions and 6 deletions

View File

@@ -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'

View File

@@ -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) {}
}
}

View File

@@ -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")
}
}
}
}

View File

@@ -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)