Update: Flexibel extended card actions (only Install & Launch for now)

This commit is contained in:
machiav3lli 2022-05-13 11:24:12 +02:00
parent 5a648f9804
commit 40c8297322
5 changed files with 47 additions and 24 deletions

View File

@ -34,8 +34,8 @@ fun ProductsVerticalRecycler(
modifier: Modifier = Modifier.fillMaxSize(),
onUserClick: (ProductItem) -> Unit = {},
onFavouriteClick: (ProductItem) -> Unit = {},
onInstallClick: (ProductItem) -> Unit = {}
getInstalled: (ProductItem) -> Installed? = {null},
onActionClick: (ProductItem) -> Unit = {}
) {
VerticalItemList(list = productsList, modifier = modifier) {
it.toItem().let { item ->
@ -44,8 +44,8 @@ fun ProductsVerticalRecycler(
repositories[item.repositoryId],
onUserClick,
onFavouriteClick,
onInstallClick
getInstalled.invoke(item),
onActionClick
)
}
}

View File

@ -1,5 +1,6 @@
package com.looker.droidify.ui.compose.components
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@ -27,11 +28,12 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.looker.droidify.R
import com.looker.droidify.database.entity.Installed
import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Action
import com.looker.droidify.entity.ProductItem
import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.ui.compose.utils.ExpandableCard
@ -43,8 +45,8 @@ fun ProductsListItem(
repo: Repository? = null,
onUserClick: (ProductItem) -> Unit = {},
onFavouriteClick: (ProductItem) -> Unit = {},
onInstallClick: (ProductItem) -> Unit = {}
installed: Installed? = null,
onActionClick: (ProductItem) -> Unit = {}
) {
val product by remember(item) { mutableStateOf(item) }
val imageData by remember(product, repo) {
@ -67,7 +69,7 @@ fun ProductsListItem(
item = product,
installed = installed,
onFavourite = onFavouriteClick,
onInstallClicked = onInstallClick
onActionClicked = onActionClick
)
}
) {
@ -129,7 +131,7 @@ fun ExpandedItemContent(
installed: Installed? = null,
favourite: Boolean = false,
onFavourite: (ProductItem) -> Unit = {},
onInstallClicked: (ProductItem) -> Unit = {}
onActionClicked: (ProductItem) -> Unit = {}
) {
Box(contentAlignment = Alignment.CenterEnd) {
Row(
@ -144,18 +146,24 @@ fun ExpandedItemContent(
tint = if (favourite) Color.Red else MaterialTheme.colorScheme.outline
)
}
AnimatedVisibility(visible = installed == null || installed.launcherActivities.isNotEmpty()) {
FilledTonalButton(
colors = buttonColors(
containerColor = MaterialTheme.colorScheme.primaryContainer,
contentColor = MaterialTheme.colorScheme.onPrimaryContainer
),
onClick = { onInstallClicked(item) }
onClick = { onActionClicked(item) }
) {
val action = when {
installed != null -> Action.LAUNCH
else -> Action.INSTALL
}
Icon(
painter = painterResource(id = R.drawable.ic_download),
contentDescription = "Install"
painter = painterResource(id = action.iconResId),
contentDescription = stringResource(id = action.titleResId)
)
Text(text = "Install")
Text(text = stringResource(id = action.titleResId))
}
}
}
}

View File

@ -37,6 +37,7 @@ import com.looker.droidify.ui.compose.components.TopBarAction
import com.looker.droidify.ui.compose.pages.home.components.CategoryChipList
import com.looker.droidify.ui.compose.theme.AppTheme
import com.looker.droidify.utility.isDarkTheme
import com.looker.droidify.utility.onLaunchClick
class ExploreFragment : MainNavFragmentX() {
@ -133,9 +134,13 @@ class ExploreFragment : MainNavFragmentX() {
mainActivityX.navigateProduct(item.packageName)
},
onFavouriteClick = {},
onInstallClick = {
mainActivityX.syncConnection.binder?.installApps(listOf(it))
getInstalled = { installedList?.get(it.packageName) },
onActionClick = { item ->
val installed = installedList?.get(item.packageName)
if (installed != null && installed.launcherActivities.isNotEmpty())
requireContext().onLaunchClick(installed, childFragmentManager)
else
mainActivityX.syncConnection.binder?.installApps(listOf(item))
}
)
}

View File

@ -56,6 +56,7 @@ import com.looker.droidify.ui.compose.components.TopBar
import com.looker.droidify.ui.compose.components.TopBarAction
import com.looker.droidify.ui.compose.theme.AppTheme
import com.looker.droidify.utility.isDarkTheme
import com.looker.droidify.utility.onLaunchClick
class InstalledFragment : MainNavFragmentX() {
@ -223,9 +224,13 @@ class InstalledFragment : MainNavFragmentX() {
mainActivityX.navigateProduct(item.packageName)
},
onFavouriteClick = {},
onInstallClick = {
mainActivityX.syncConnection.binder?.installApps(listOf(it))
getInstalled = { installedList?.get(it.packageName) },
onActionClick = { item ->
val installed = installedList?.get(item.packageName)
if (installed != null && installed.launcherActivities.isNotEmpty())
requireContext().onLaunchClick(installed, childFragmentManager)
else
mainActivityX.syncConnection.binder?.installApps(listOf(item))
}
)
}

View File

@ -48,6 +48,7 @@ import com.looker.droidify.ui.compose.components.TopBar
import com.looker.droidify.ui.compose.components.TopBarAction
import com.looker.droidify.ui.compose.theme.AppTheme
import com.looker.droidify.utility.isDarkTheme
import com.looker.droidify.utility.onLaunchClick
class LatestFragment : MainNavFragmentX() {
@ -161,9 +162,13 @@ class LatestFragment : MainNavFragmentX() {
mainActivityX.navigateProduct(item.packageName)
},
onFavouriteClick = {},
onInstallClick = {
mainActivityX.syncConnection.binder?.installApps(listOf(it))
getInstalled = { installedList?.get(it.packageName) },
onActionClick = { item ->
val installed = installedList?.get(item.packageName)
if (installed != null && installed.launcherActivities.isNotEmpty())
requireContext().onLaunchClick(installed, childFragmentManager)
else
mainActivityX.syncConnection.binder?.installApps(listOf(item))
}
)
}