mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-02 08:23:00 +01:00
Add better loading states for story archive and starred.
This commit is contained in:
committed by
Cody Henthorne
parent
8a887b65a1
commit
46e6ae915c
@@ -18,6 +18,7 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -151,7 +152,7 @@ private fun StarredMessagesScreen(
|
||||
onNavigateBack: () -> Unit,
|
||||
onNavigateToMessage: (MessageRecord) -> Unit
|
||||
) {
|
||||
val messages by viewModel.getMessages().collectAsStateWithLifecycle(initialValue = emptyList())
|
||||
val messages by viewModel.getMessages().collectAsStateWithLifecycle(initialValue = null)
|
||||
val scope = rememberCoroutineScope()
|
||||
val context = LocalContext.current
|
||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
|
||||
@@ -174,24 +175,37 @@ private fun StarredMessagesScreen(
|
||||
.padding(padding)
|
||||
.fillMaxSize()
|
||||
) {
|
||||
StarredMessageList(
|
||||
messages = messages,
|
||||
onItemClick = onNavigateToMessage,
|
||||
onQuoteClick = onNavigateToMessage,
|
||||
onUnstarMessage = { messageId ->
|
||||
scope.launch {
|
||||
try {
|
||||
viewModel.unstarMessage(messageId)
|
||||
} catch (e: Exception) {
|
||||
Toast.makeText(context, "Failed to unstar message", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
when {
|
||||
messages == null -> {
|
||||
Box(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
CircularProgressIndicator()
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxSize()
|
||||
)
|
||||
}
|
||||
|
||||
if (messages.isEmpty()) {
|
||||
EmptyState(modifier = Modifier.fillMaxSize())
|
||||
messages.isNullOrEmpty() -> {
|
||||
EmptyState(modifier = Modifier.fillMaxSize())
|
||||
}
|
||||
|
||||
else -> {
|
||||
StarredMessageList(
|
||||
messages = messages!!,
|
||||
onItemClick = onNavigateToMessage,
|
||||
onQuoteClick = onNavigateToMessage,
|
||||
onUnstarMessage = { messageId ->
|
||||
scope.launch {
|
||||
try {
|
||||
viewModel.unstarMessage(messageId)
|
||||
} catch (e: Exception) {
|
||||
Toast.makeText(context, "Failed to unstar message", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
},
|
||||
modifier = Modifier.fillMaxSize()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.drop
|
||||
import kotlinx.coroutines.launch
|
||||
import org.signal.paging.PagedData
|
||||
import org.signal.paging.PagingConfig
|
||||
@@ -99,7 +100,7 @@ class StoryArchiveViewModel : ViewModel() {
|
||||
|
||||
pagedDataJob?.cancel()
|
||||
pagedDataJob = viewModelScope.launch {
|
||||
newPagedData.data.collectLatest { stories ->
|
||||
newPagedData.data.drop(1).collectLatest { stories ->
|
||||
_state.value = _state.value.copy(stories = stories, isLoading = false)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user