From cd50cf7bc4b33518da8471b56f1bf28e398c4b38 Mon Sep 17 00:00:00 2001 From: Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:16:25 -0500 Subject: [PATCH] Pull to refresh. --- .../activities/ModmailActivity.kt | 29 ++++++++----------- .../mod/ModMailConversationViewModel.kt | 9 +----- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ModmailActivity.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ModmailActivity.kt index 02495074..6c6a6f0d 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ModmailActivity.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ModmailActivity.kt @@ -2,7 +2,6 @@ package ml.docilealligator.infinityforreddit.activities import android.content.SharedPreferences import android.os.Bundle -import android.util.Log import android.widget.Toast import androidx.activity.compose.BackHandler import androidx.activity.compose.setContent @@ -27,15 +26,13 @@ import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator +import androidx.compose.material3.pulltorefresh.PullToRefreshBox import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.lifecycle.ViewModelProvider +import androidx.paging.LoadState import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems import ml.docilealligator.infinityforreddit.Infinity @@ -61,7 +58,6 @@ class ModmailActivity : BaseActivity() { lateinit var mCurrentAccountSharedPreferences: SharedPreferences @Inject lateinit var mCustomThemeWrapper: CustomThemeWrapper - lateinit var conversationViewModel: ModMailConversationViewModel override fun onCreate(savedInstanceState: Bundle?) { @@ -91,16 +87,18 @@ class ModmailActivity : BaseActivity() { Text(getString(R.string.modmail_activity_label)) } ) - } + }, + containerColor = Color(mCustomThemeWrapper.backgroundColor) ) { innerPadding -> Column( modifier = Modifier.padding(innerPadding), verticalArrangement = Arrangement.spacedBy(16.dp) ) { - val lazyPagingItems: LazyPagingItems = conversationViewModel.flow.collectAsLazyPagingItems() val listState: LazyListState = rememberLazyListState() val navigator = rememberListDetailPaneScaffoldNavigator() + val pagingItems: LazyPagingItems = conversationViewModel.flow.collectAsLazyPagingItems() + BackHandler(navigator.canNavigateBack()) { navigator.navigateBack() } @@ -111,7 +109,7 @@ class ModmailActivity : BaseActivity() { value = navigator.scaffoldValue, listPane = { AnimatedPane { - ConversationListView(lazyPagingItems, navigator, listState) + ConversationListView(pagingItems, navigator, listState) } }, detailPane = { @@ -145,9 +143,11 @@ class ModmailActivity : BaseActivity() { @Composable fun ConversationListView(pagingItems: LazyPagingItems, navigator: ThreePaneScaffoldNavigator, listState: LazyListState) { - when { - pagingItems.itemCount == 0 -> ConversationsLoadingView() - else -> { + PullToRefreshBox( + isRefreshing = pagingItems.loadState.refresh == LoadState.Loading, + onRefresh = { pagingItems.refresh() } + ) { + if (pagingItems.itemCount > 0) { LazyColumn( verticalArrangement = Arrangement.spacedBy(16.dp), state = listState, @@ -218,9 +218,4 @@ class ModmailActivity : BaseActivity() { fun MessageView(message: ModMessage) { } - - @Composable - fun ConversationsLoadingView() { - - } } \ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/mod/ModMailConversationViewModel.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/mod/ModMailConversationViewModel.kt index ba6fc0ad..080fd6a0 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/mod/ModMailConversationViewModel.kt +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/mod/ModMailConversationViewModel.kt @@ -14,19 +14,12 @@ class ModMailConversationViewModel( accessToken: String, sharedPreferences: SharedPreferences ) : ViewModel() { - private val pagingSource: ModMailConversationPagingSource = - ModMailConversationPagingSource(oauthRetrofit, accessToken, sharedPreferences) - val flow = Pager( PagingConfig(20, 4) ) { - pagingSource + ModMailConversationPagingSource(oauthRetrofit, accessToken, sharedPreferences) }.flow.cachedIn(viewModelScope) - fun refresh() { - pagingSource.invalidate() - } - @Suppress("UNCHECKED_CAST") class Factory( private val oauthRetrofit: Retrofit,