mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-24 11:52:13 +00:00
Update: Flexibel extended card actions (only Install & Launch for now)
This commit is contained in:
parent
5a648f9804
commit
40c8297322
@ -34,8 +34,8 @@ fun ProductsVerticalRecycler(
|
|||||||
modifier: Modifier = Modifier.fillMaxSize(),
|
modifier: Modifier = Modifier.fillMaxSize(),
|
||||||
onUserClick: (ProductItem) -> Unit = {},
|
onUserClick: (ProductItem) -> Unit = {},
|
||||||
onFavouriteClick: (ProductItem) -> Unit = {},
|
onFavouriteClick: (ProductItem) -> Unit = {},
|
||||||
onInstallClick: (ProductItem) -> Unit = {}
|
|
||||||
getInstalled: (ProductItem) -> Installed? = {null},
|
getInstalled: (ProductItem) -> Installed? = {null},
|
||||||
|
onActionClick: (ProductItem) -> Unit = {}
|
||||||
) {
|
) {
|
||||||
VerticalItemList(list = productsList, modifier = modifier) {
|
VerticalItemList(list = productsList, modifier = modifier) {
|
||||||
it.toItem().let { item ->
|
it.toItem().let { item ->
|
||||||
@ -44,8 +44,8 @@ fun ProductsVerticalRecycler(
|
|||||||
repositories[item.repositoryId],
|
repositories[item.repositoryId],
|
||||||
onUserClick,
|
onUserClick,
|
||||||
onFavouriteClick,
|
onFavouriteClick,
|
||||||
onInstallClick
|
|
||||||
getInstalled.invoke(item),
|
getInstalled.invoke(item),
|
||||||
|
onActionClick
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.looker.droidify.ui.compose.components
|
package com.looker.droidify.ui.compose.components
|
||||||
|
|
||||||
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
@ -27,11 +28,12 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.looker.droidify.R
|
|
||||||
import com.looker.droidify.database.entity.Installed
|
import com.looker.droidify.database.entity.Installed
|
||||||
import com.looker.droidify.database.entity.Repository
|
import com.looker.droidify.database.entity.Repository
|
||||||
|
import com.looker.droidify.entity.Action
|
||||||
import com.looker.droidify.entity.ProductItem
|
import com.looker.droidify.entity.ProductItem
|
||||||
import com.looker.droidify.network.CoilDownloader
|
import com.looker.droidify.network.CoilDownloader
|
||||||
import com.looker.droidify.ui.compose.utils.ExpandableCard
|
import com.looker.droidify.ui.compose.utils.ExpandableCard
|
||||||
@ -43,8 +45,8 @@ fun ProductsListItem(
|
|||||||
repo: Repository? = null,
|
repo: Repository? = null,
|
||||||
onUserClick: (ProductItem) -> Unit = {},
|
onUserClick: (ProductItem) -> Unit = {},
|
||||||
onFavouriteClick: (ProductItem) -> Unit = {},
|
onFavouriteClick: (ProductItem) -> Unit = {},
|
||||||
onInstallClick: (ProductItem) -> Unit = {}
|
|
||||||
installed: Installed? = null,
|
installed: Installed? = null,
|
||||||
|
onActionClick: (ProductItem) -> Unit = {}
|
||||||
) {
|
) {
|
||||||
val product by remember(item) { mutableStateOf(item) }
|
val product by remember(item) { mutableStateOf(item) }
|
||||||
val imageData by remember(product, repo) {
|
val imageData by remember(product, repo) {
|
||||||
@ -67,7 +69,7 @@ fun ProductsListItem(
|
|||||||
item = product,
|
item = product,
|
||||||
installed = installed,
|
installed = installed,
|
||||||
onFavourite = onFavouriteClick,
|
onFavourite = onFavouriteClick,
|
||||||
onInstallClicked = onInstallClick
|
onActionClicked = onActionClick
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
@ -129,7 +131,7 @@ fun ExpandedItemContent(
|
|||||||
installed: Installed? = null,
|
installed: Installed? = null,
|
||||||
favourite: Boolean = false,
|
favourite: Boolean = false,
|
||||||
onFavourite: (ProductItem) -> Unit = {},
|
onFavourite: (ProductItem) -> Unit = {},
|
||||||
onInstallClicked: (ProductItem) -> Unit = {}
|
onActionClicked: (ProductItem) -> Unit = {}
|
||||||
) {
|
) {
|
||||||
Box(contentAlignment = Alignment.CenterEnd) {
|
Box(contentAlignment = Alignment.CenterEnd) {
|
||||||
Row(
|
Row(
|
||||||
@ -144,18 +146,24 @@ fun ExpandedItemContent(
|
|||||||
tint = if (favourite) Color.Red else MaterialTheme.colorScheme.outline
|
tint = if (favourite) Color.Red else MaterialTheme.colorScheme.outline
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
AnimatedVisibility(visible = installed == null || installed.launcherActivities.isNotEmpty()) {
|
||||||
FilledTonalButton(
|
FilledTonalButton(
|
||||||
colors = buttonColors(
|
colors = buttonColors(
|
||||||
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
||||||
contentColor = MaterialTheme.colorScheme.onPrimaryContainer
|
contentColor = MaterialTheme.colorScheme.onPrimaryContainer
|
||||||
),
|
),
|
||||||
onClick = { onInstallClicked(item) }
|
onClick = { onActionClicked(item) }
|
||||||
) {
|
) {
|
||||||
|
val action = when {
|
||||||
|
installed != null -> Action.LAUNCH
|
||||||
|
else -> Action.INSTALL
|
||||||
|
}
|
||||||
Icon(
|
Icon(
|
||||||
painter = painterResource(id = R.drawable.ic_download),
|
painter = painterResource(id = action.iconResId),
|
||||||
contentDescription = "Install"
|
contentDescription = stringResource(id = action.titleResId)
|
||||||
)
|
)
|
||||||
Text(text = "Install")
|
Text(text = stringResource(id = action.titleResId))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.pages.home.components.CategoryChipList
|
||||||
import com.looker.droidify.ui.compose.theme.AppTheme
|
import com.looker.droidify.ui.compose.theme.AppTheme
|
||||||
import com.looker.droidify.utility.isDarkTheme
|
import com.looker.droidify.utility.isDarkTheme
|
||||||
|
import com.looker.droidify.utility.onLaunchClick
|
||||||
|
|
||||||
class ExploreFragment : MainNavFragmentX() {
|
class ExploreFragment : MainNavFragmentX() {
|
||||||
|
|
||||||
@ -133,9 +134,13 @@ class ExploreFragment : MainNavFragmentX() {
|
|||||||
mainActivityX.navigateProduct(item.packageName)
|
mainActivityX.navigateProduct(item.packageName)
|
||||||
},
|
},
|
||||||
onFavouriteClick = {},
|
onFavouriteClick = {},
|
||||||
onInstallClick = {
|
|
||||||
mainActivityX.syncConnection.binder?.installApps(listOf(it))
|
|
||||||
getInstalled = { installedList?.get(it.packageName) },
|
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))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -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.components.TopBarAction
|
||||||
import com.looker.droidify.ui.compose.theme.AppTheme
|
import com.looker.droidify.ui.compose.theme.AppTheme
|
||||||
import com.looker.droidify.utility.isDarkTheme
|
import com.looker.droidify.utility.isDarkTheme
|
||||||
|
import com.looker.droidify.utility.onLaunchClick
|
||||||
|
|
||||||
class InstalledFragment : MainNavFragmentX() {
|
class InstalledFragment : MainNavFragmentX() {
|
||||||
|
|
||||||
@ -223,9 +224,13 @@ class InstalledFragment : MainNavFragmentX() {
|
|||||||
mainActivityX.navigateProduct(item.packageName)
|
mainActivityX.navigateProduct(item.packageName)
|
||||||
},
|
},
|
||||||
onFavouriteClick = {},
|
onFavouriteClick = {},
|
||||||
onInstallClick = {
|
|
||||||
mainActivityX.syncConnection.binder?.installApps(listOf(it))
|
|
||||||
getInstalled = { installedList?.get(it.packageName) },
|
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))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -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.components.TopBarAction
|
||||||
import com.looker.droidify.ui.compose.theme.AppTheme
|
import com.looker.droidify.ui.compose.theme.AppTheme
|
||||||
import com.looker.droidify.utility.isDarkTheme
|
import com.looker.droidify.utility.isDarkTheme
|
||||||
|
import com.looker.droidify.utility.onLaunchClick
|
||||||
|
|
||||||
class LatestFragment : MainNavFragmentX() {
|
class LatestFragment : MainNavFragmentX() {
|
||||||
|
|
||||||
@ -161,9 +162,13 @@ class LatestFragment : MainNavFragmentX() {
|
|||||||
mainActivityX.navigateProduct(item.packageName)
|
mainActivityX.navigateProduct(item.packageName)
|
||||||
},
|
},
|
||||||
onFavouriteClick = {},
|
onFavouriteClick = {},
|
||||||
onInstallClick = {
|
|
||||||
mainActivityX.syncConnection.binder?.installApps(listOf(it))
|
|
||||||
getInstalled = { installedList?.get(it.packageName) },
|
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))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user