From d31791ec02f406f219067d5c56e99f60d9774a55 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Sun, 26 Jun 2022 01:51:57 +0200 Subject: [PATCH] Update: Convert latest view to LazyColumn --- .../droidify/ui/fragments/LatestFragment.kt | 116 +++++++++--------- 1 file changed, 60 insertions(+), 56 deletions(-) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt index 710cc638..121c3312 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt @@ -7,12 +7,12 @@ import android.view.View import android.view.ViewGroup import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Settings import androidx.compose.material.icons.rounded.Sync @@ -38,8 +38,8 @@ import com.looker.droidify.database.entity.Repository import com.looker.droidify.service.SyncService import com.looker.droidify.ui.activities.PrefsActivityX import com.looker.droidify.ui.compose.ProductsHorizontalRecycler -import com.looker.droidify.ui.compose.ProductsVerticalRecycler import com.looker.droidify.ui.compose.components.ExpandableSearchAction +import com.looker.droidify.ui.compose.components.ProductsListItem import com.looker.droidify.ui.compose.components.TopBar import com.looker.droidify.ui.compose.components.TopBarAction import com.looker.droidify.ui.compose.theme.AppTheme @@ -109,70 +109,74 @@ class LatestFragment : MainNavFragmentX() { } } ) { padding -> - Column( + LazyColumn( Modifier .padding(padding) .background(MaterialTheme.colorScheme.background) - .fillMaxSize() + .fillMaxSize(), ) { - Text( - text = stringResource(id = R.string.new_applications), - modifier = Modifier.padding(8.dp) - ) - ProductsHorizontalRecycler(secondaryList, repositories) { item -> - mainActivityX.navigateProduct(item.packageName) - } - Row( - modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp), - verticalAlignment = Alignment.CenterVertically - ) { + item { Text( - text = stringResource(id = R.string.recently_updated), - modifier = Modifier.weight(1f), + text = stringResource(id = R.string.new_applications), + modifier = Modifier.padding(8.dp) ) - SuggestionChip( - shape = MaterialTheme.shapes.medium, - colors = SuggestionChipDefaults.suggestionChipColors( - containerColor = MaterialTheme.colorScheme.surface, - labelColor = MaterialTheme.colorScheme.onSurface, - ), - onClick = { }, // TODO add sort & filter - icon = { - Icon( - modifier = Modifier.size(18.dp), - painter = painterResource(id = R.drawable.ic_sort), - contentDescription = stringResource(id = R.string.sort_filter) + ProductsHorizontalRecycler(secondaryList, repositories) { item -> + mainActivityX.navigateProduct(item.packageName) + } + } + item { + Row( + modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = stringResource(id = R.string.recently_updated), + modifier = Modifier.weight(1f), + ) + SuggestionChip( + shape = MaterialTheme.shapes.medium, + colors = SuggestionChipDefaults.suggestionChipColors( + containerColor = MaterialTheme.colorScheme.surface, + labelColor = MaterialTheme.colorScheme.onSurface, + ), + onClick = { }, // TODO add sort & filter + icon = { + Icon( + modifier = Modifier.size(18.dp), + painter = painterResource(id = R.drawable.ic_sort), + contentDescription = stringResource(id = R.string.sort_filter) + ) + }, + label = { + Text(text = stringResource(id = R.string.sort_filter)) + } + ) + } + } + items( + items = primaryList?.map { it.toItem() } ?: emptyList(), + ) { item -> + ProductsListItem( + item = item, + repo = repositories[item.repositoryId], + isFavorite = favorites.contains(item.packageName), + onUserClick = { mainActivityX.navigateProduct(it.packageName) }, + onFavouriteClick = { + viewModel.setFavorite( + it.packageName, + !favorites.contains(it.packageName) ) }, - label = { - Text(text = stringResource(id = R.string.sort_filter)) + installed = installedList?.get(item.packageName), + onActionClick = { + val installed = installedList?.get(it.packageName) + if (installed != null && installed.launcherActivities.isNotEmpty()) + requireContext().onLaunchClick(installed, childFragmentManager) + else + mainActivityX.syncConnection.binder?.installApps(listOf(it)) } ) } - ProductsVerticalRecycler( - productsList = primaryList, - repositories = repositories, - favorites = favorites, - modifier = Modifier - .fillMaxWidth() - .weight(1f), - onUserClick = { item -> - mainActivityX.navigateProduct(item.packageName) - }, - onFavouriteClick = { item -> - viewModel.setFavorite( - item.packageName, - !favorites.contains(item.packageName) - ) - }, - getInstalled = { installedList?.get(it.packageName) } - ) { item -> - val installed = installedList?.get(item.packageName) - if (installed != null && installed.launcherActivities.isNotEmpty()) - requireContext().onLaunchClick(installed, childFragmentManager) - else - mainActivityX.syncConnection.binder?.installApps(listOf(item)) - } } } }