From 4585757ac26a24799167e21254bc29b24882309a Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Fri, 5 Mar 2021 12:22:52 +0530 Subject: [PATCH] app: add support for refreshing hottest posts list Signed-off-by: Harsh Shandilya --- .../msfjarvis/lobsters/ui/main/LobstersApp.kt | 38 +++++++++++++++++++ .../ui/viewmodel/LobstersViewModel.kt | 4 ++ app/src/main/res/drawable/ic_refresh_24px.xml | 9 +++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 52 insertions(+) create mode 100644 app/src/main/res/drawable/ic_refresh_24px.xml diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt index 0febc3df..a64680d5 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt @@ -1,11 +1,14 @@ package dev.msfjarvis.lobsters.ui.main +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.BottomNavigation import androidx.compose.material.BottomNavigationItem import androidx.compose.material.Scaffold import androidx.compose.material.Text +import androidx.compose.material.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue @@ -13,6 +16,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.KEY_ROUTE import androidx.navigation.compose.NavHost @@ -21,6 +25,7 @@ import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.navigate import androidx.navigation.compose.rememberNavController import androidx.paging.compose.collectAsLazyPagingItems +import dev.msfjarvis.lobsters.R import dev.msfjarvis.lobsters.ui.navigation.Destination import dev.msfjarvis.lobsters.ui.posts.HottestPosts import dev.msfjarvis.lobsters.ui.posts.SavedPosts @@ -51,6 +56,12 @@ fun LobstersApp() { } Scaffold( + topBar = { + LobstersTopBar( + currentDestination = currentDestination, + reloadPosts = { viewModel.reloadPosts() }, + ) + }, bottomBar = { LobstersBottomNav( currentDestination, @@ -80,6 +91,33 @@ fun LobstersApp() { } } +@OptIn(ExperimentalAnimationApi::class) +@Composable +fun LobstersTopBar( + currentDestination: Destination, + reloadPosts: () -> Unit, +) { + TopAppBar( + title = { + Text( + text = stringResource(id = R.string.app_name), + modifier = Modifier.padding(vertical = 8.dp), + ) + }, + actions = { + if (currentDestination == Destination.Hottest) { + IconResource( + resourceId = R.drawable.ic_refresh_24px, + contentDescription = stringResource(id = R.string.refresh_posts_content_description), + modifier = Modifier + .padding(horizontal = 8.dp, vertical = 8.dp) + .clickable { reloadPosts() }, + ) + } + } + ) +} + @Composable fun LobstersBottomNav( currentDestination: Destination, diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt index c4e2fd4a..b03ee7c8 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/viewmodel/LobstersViewModel.kt @@ -35,6 +35,10 @@ class LobstersViewModel @Inject constructor( }.launchIn(viewModelScope) } + fun reloadPosts() { + pagingSource.invalidate() + } + fun toggleSave(post: SavedPost) { viewModelScope.launch { val isSaved = lobstersRepository.isPostSaved(post.shortId) diff --git a/app/src/main/res/drawable/ic_refresh_24px.xml b/app/src/main/res/drawable/ic_refresh_24px.xml new file mode 100644 index 00000000..843368df --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh_24px.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 94b2c294..c6140868 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,4 +8,5 @@ %1$s\'s avatar Add to saved posts Remove from saved posts + Refresh posts