diff --git a/src/main/kotlin/com/looker/droidify/ui/compose/ItemRecyclers.kt b/src/main/kotlin/com/looker/droidify/ui/compose/ItemRecyclers.kt index 774a3330..fa4de383 100644 --- a/src/main/kotlin/com/looker/droidify/ui/compose/ItemRecyclers.kt +++ b/src/main/kotlin/com/looker/droidify/ui/compose/ItemRecyclers.kt @@ -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 ) } } diff --git a/src/main/kotlin/com/looker/droidify/ui/compose/components/ProductsListItem.kt b/src/main/kotlin/com/looker/droidify/ui/compose/components/ProductsListItem.kt index bcda991d..58a866bd 100644 --- a/src/main/kotlin/com/looker/droidify/ui/compose/components/ProductsListItem.kt +++ b/src/main/kotlin/com/looker/droidify/ui/compose/components/ProductsListItem.kt @@ -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 ) } - FilledTonalButton( - colors = buttonColors( - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer - ), - onClick = { onInstallClicked(item) } - ) { - Icon( - painter = painterResource(id = R.drawable.ic_download), - contentDescription = "Install" - ) - Text(text = "Install") + AnimatedVisibility(visible = installed == null || installed.launcherActivities.isNotEmpty()) { + FilledTonalButton( + colors = buttonColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer + ), + onClick = { onActionClicked(item) } + ) { + val action = when { + installed != null -> Action.LAUNCH + else -> Action.INSTALL + } + Icon( + painter = painterResource(id = action.iconResId), + contentDescription = stringResource(id = action.titleResId) + ) + Text(text = stringResource(id = action.titleResId)) + } } } } diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt index 55af3854..477a8434 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt @@ -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)) } ) } diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt index b7d7b6c8..6b21799c 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt @@ -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)) } ) } 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 acbf33fe..c57416c3 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt @@ -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)) } ) }