From fcf7f40af3efec034884b8d4cd892e33c7f3e18c Mon Sep 17 00:00:00 2001 From: Mohamed Date: Wed, 29 May 2024 16:55:49 +0300 Subject: [PATCH] Add animateItemPlacement to LazyColumn items --- .../omnivore/feature/library/LibraryView.kt | 25 +++++++++---------- .../omnivore/feature/library/SearchView.kt | 5 +++- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/library/LibraryView.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/library/LibraryView.kt index 4357371bd..f619d0dbf 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/library/LibraryView.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/library/LibraryView.kt @@ -1,12 +1,11 @@ package app.omnivore.omnivore.feature.library import android.content.Intent -import android.content.pm.PackageManager import android.util.Log -import android.widget.Toast import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.FloatTweenSpec import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -58,8 +57,6 @@ import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavHostController @@ -80,7 +77,6 @@ import app.omnivore.omnivore.navigation.TopLevelDestination import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.launch -import java.util.jar.Manifest @Composable internal fun LibraryView( @@ -91,12 +87,11 @@ internal fun LibraryView( viewModel: LibraryViewModel = hiltViewModel() ) { val snackbarHostState = remember { SnackbarHostState() } - val coroutineScope = rememberCoroutineScope() val uiState by viewModel.uiState.collectAsStateWithLifecycle() - viewModel.snackbarMessage?.let { - coroutineScope.launch { + LaunchedEffect(viewModel.snackbarMessage) { + viewModel.snackbarMessage?.let { snackbarHostState.showSnackbar(it) viewModel.clearSnackbarMessage() } @@ -135,7 +130,8 @@ internal fun LibraryView( } LibraryBottomSheetState.EDIT -> { - EditBottomSheet(editInfoViewModel, + EditBottomSheet( + editInfoViewModel, deleteCurrentItem = { viewModel.currentItem.value = null }, { viewModel.refresh() }, viewModel.currentSavedItemUnderEdit() @@ -318,13 +314,15 @@ fun EditBottomSheet( } -@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class) +@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class, + ExperimentalFoundationApi::class +) @Composable fun LibraryViewContent( itemsFilter: SavedItemFilter, activeLabels: List, sortFilter: SavedItemSortFilter, - updateSavedItemFilter:(SavedItemFilter) -> Unit, + updateSavedItemFilter: (SavedItemFilter) -> Unit, updateSavedItemSortFilter: (SavedItemSortFilter) -> Unit, setBottomSheetState: (LibraryBottomSheetState) -> Unit, updateAppliedLabels: (List) -> Unit, @@ -415,6 +413,7 @@ fun LibraryViewContent( true }) SwipeToDismiss( + modifier = Modifier.animateItemPlacement(), state = swipeState, directions = setOf( DismissDirection.StartToEnd, DismissDirection.EndToStart @@ -535,7 +534,7 @@ fun InfiniteListHandler( LaunchedEffect(loadMore) { snapshotFlow { loadMore.value }.distinctUntilChanged().collect { - onLoadMore() - } + onLoadMore() + } } } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/library/SearchView.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/library/SearchView.kt index 9a77a9cca..452589ee8 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/library/SearchView.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/feature/library/SearchView.kt @@ -1,6 +1,7 @@ package app.omnivore.omnivore.feature.library import android.content.Intent +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -151,6 +152,7 @@ fun SearchView( } } +@OptIn(ExperimentalFoundationApi::class) @Composable fun TypeaheadSearchViewContent(viewModel: SearchViewModel, modifier: Modifier) { val context = LocalContext.current @@ -169,8 +171,9 @@ fun TypeaheadSearchViewContent(viewModel: SearchViewModel, modifier: Modifier) { .fillMaxSize() ) { - items(searchedCardsData) { cardData -> + items(searchedCardsData, key = { it.savedItemId } ) { cardData -> TypeaheadSearchCard( + modifier = Modifier.animateItemPlacement(), cardData = cardData, onClickHandler = { // val activityClass = if (cardData.isPDF()) PDFReaderActivity::class.java else WebReaderLoadingContainerActivity::class.java