Skip to content

Commit 61338db

Browse files
authored
chore: loading state blinking (WPB-23296) (#4597)
1 parent dba2398 commit 61338db

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

app/src/main/kotlin/com/wire/android/ui/home/conversationslist/ConversationsScreenContent.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ import androidx.compose.foundation.lazy.LazyListState
2222
import androidx.compose.foundation.lazy.rememberLazyListState
2323
import androidx.compose.runtime.Composable
2424
import androidx.compose.runtime.LaunchedEffect
25+
import androidx.compose.runtime.getValue
26+
import androidx.compose.runtime.mutableStateOf
2527
import androidx.compose.runtime.remember
28+
import androidx.compose.runtime.setValue
2629
import androidx.compose.ui.platform.LocalContext
2730
import androidx.compose.ui.platform.LocalInspectionMode
2831
import androidx.hilt.navigation.compose.hiltViewModel
2932
import androidx.paging.LoadState
33+
import androidx.paging.compose.LazyPagingItems
3034
import androidx.paging.compose.collectAsLazyPagingItems
3135
import com.wire.android.R
3236
import com.wire.android.appLogger
@@ -57,6 +61,7 @@ import com.ramcosta.composedestinations.generated.app.destinations.OtherUserProf
5761
import com.wire.android.ui.home.conversations.PermissionPermanentlyDeniedDialogState
5862
import com.wire.android.ui.home.conversationslist.common.ConversationList
5963
import com.wire.android.ui.home.conversationslist.model.ConversationItem
64+
import com.wire.android.ui.home.conversationslist.model.ConversationItemType
6065
import com.wire.android.ui.home.conversationslist.model.ConversationsSource
6166
import com.wire.android.ui.home.conversationslist.search.SearchConversationsEmptyContent
6267
import com.wire.android.ui.theme.WireTheme
@@ -160,11 +165,10 @@ fun ConversationsScreenContent(
160165
when (val state = conversationListViewModel.conversationListState) {
161166
is ConversationListState.Paginated -> {
162167
val lazyPagingItems = state.conversations.collectAsLazyPagingItems()
163-
val showLoading = lazyPagingItems.loadState.refresh == LoadState.Loading && lazyPagingItems.itemCount == 0
164168
searchBarState.searchVisibleChanged(lazyPagingItems.itemCount > 0 || searchBarState.isSearchActive)
165169
when {
166170
// when conversation list is not yet fetched, show loading indicator
167-
showLoading -> loadingListContent(lazyListState)
171+
lazyPagingItems.isLoading() -> loadingListContent(lazyListState)
168172
// when there is at least one conversation
169173
lazyPagingItems.itemCount > 0 -> ConversationList(
170174
lazyPagingConversations = lazyPagingItems,
@@ -257,6 +261,15 @@ fun ConversationsScreenContent(
257261
})
258262
}
259263

264+
@Composable
265+
private fun LazyPagingItems<ConversationItemType>.isLoading(): Boolean {
266+
var initialLoadCompleted by remember { mutableStateOf(false) }
267+
if (loadState.refresh is LoadState.NotLoading) {
268+
initialLoadCompleted = true
269+
}
270+
return !initialLoadCompleted && loadState.refresh == LoadState.Loading && itemCount == 0
271+
}
272+
260273
private const val TAG = "BaseConversationsScreen"
261274

262275
@PreviewMultipleThemes

0 commit comments

Comments
 (0)