@@ -22,11 +22,15 @@ import androidx.compose.foundation.lazy.LazyListState
2222import androidx.compose.foundation.lazy.rememberLazyListState
2323import androidx.compose.runtime.Composable
2424import androidx.compose.runtime.LaunchedEffect
25+ import androidx.compose.runtime.getValue
26+ import androidx.compose.runtime.mutableStateOf
2527import androidx.compose.runtime.remember
28+ import androidx.compose.runtime.setValue
2629import androidx.compose.ui.platform.LocalContext
2730import androidx.compose.ui.platform.LocalInspectionMode
2831import androidx.hilt.navigation.compose.hiltViewModel
2932import androidx.paging.LoadState
33+ import androidx.paging.compose.LazyPagingItems
3034import androidx.paging.compose.collectAsLazyPagingItems
3135import com.wire.android.R
3236import com.wire.android.appLogger
@@ -57,6 +61,7 @@ import com.ramcosta.composedestinations.generated.app.destinations.OtherUserProf
5761import com.wire.android.ui.home.conversations.PermissionPermanentlyDeniedDialogState
5862import com.wire.android.ui.home.conversationslist.common.ConversationList
5963import com.wire.android.ui.home.conversationslist.model.ConversationItem
64+ import com.wire.android.ui.home.conversationslist.model.ConversationItemType
6065import com.wire.android.ui.home.conversationslist.model.ConversationsSource
6166import com.wire.android.ui.home.conversationslist.search.SearchConversationsEmptyContent
6267import 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+
260273private const val TAG = " BaseConversationsScreen"
261274
262275@PreviewMultipleThemes
0 commit comments