Update: Clean up actions management in AppSheet

This commit is contained in:
machiav3lli 2022-07-01 01:08:08 +02:00
parent 24dd888e5b
commit a64afc3d6a
3 changed files with 6 additions and 16 deletions

View File

@ -44,7 +44,6 @@ fun AppInfoHeader(
appSize: String, appSize: String,
appDev: String, appDev: String,
mainAction: ActionState?, mainAction: ActionState?,
secondaryAction: ActionState? = null,
possibleActions: Set<ActionState>, possibleActions: Set<ActionState>,
onSource: () -> Unit = { }, onSource: () -> Unit = { },
onSourceLong: () -> Unit = { }, onSourceLong: () -> Unit = { },
@ -74,8 +73,8 @@ fun AppInfoHeader(
horizontalArrangement = Arrangement.spacedBy(8.dp) horizontalArrangement = Arrangement.spacedBy(8.dp)
) { ) {
if (possibleActions.size == 1) { if (possibleActions.size == 1) {
SecondaryActionButton(packageState = secondaryAction, onClick = { SecondaryActionButton(packageState = possibleActions.first(), onClick = {
onAction(secondaryAction) onAction(possibleActions.first())
}) })
} else if (possibleActions.size > 1) { } else if (possibleActions.size > 1) {
SecondaryActionButton( SecondaryActionButton(

View File

@ -354,7 +354,6 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), Callbacks {
val downloadState by viewModel.downloadState.observeAsState(null) val downloadState by viewModel.downloadState.observeAsState(null)
val mainAction by viewModel.mainAction.observeAsState(if (installed == null) ActionState.Install else ActionState.Launch) val mainAction by viewModel.mainAction.observeAsState(if (installed == null) ActionState.Install else ActionState.Launch)
val actions by viewModel.actions.observeAsState() val actions by viewModel.actions.observeAsState()
val secondaryAction by viewModel.secondaryAction.observeAsState()
val extras by viewModel.extras.observeAsState(Extras(packageName)) val extras by viewModel.extras.observeAsState(Extras(packageName))
val productRepos = products?.mapNotNull { product -> val productRepos = products?.mapNotNull { product ->
repos?.firstOrNull { it.id == product.repositoryId } repos?.firstOrNull { it.id == product.repositoryId }
@ -425,7 +424,6 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), Callbacks {
appSize = product.displayRelease?.size?.formatSize().orEmpty(), appSize = product.displayRelease?.size?.formatSize().orEmpty(),
appDev = product.author.name.replaceFirstChar { it.titlecase() }, appDev = product.author.name.replaceFirstChar { it.titlecase() },
mainAction = mainAction, mainAction = mainAction,
secondaryAction = secondaryAction,
possibleActions = actions?.filter { it != mainAction }?.toSet() possibleActions = actions?.filter { it != mainAction }?.toSet()
?: emptySet(), ?: emptySet(),
onSource = { onSource = {

View File

@ -31,7 +31,6 @@ class AppViewModelX(val db: DatabaseX, val packageName: String) : ViewModel() {
val downloadState: MutableLiveData<DownloadState> = MutableLiveData() val downloadState: MutableLiveData<DownloadState> = MutableLiveData()
val mainAction: MutableLiveData<ActionState> = MutableLiveData() val mainAction: MutableLiveData<ActionState> = MutableLiveData()
val actions: MediatorLiveData<Set<ActionState>> = MediatorLiveData() val actions: MediatorLiveData<Set<ActionState>> = MediatorLiveData()
val secondaryAction: MutableLiveData<ActionState> = MutableLiveData()
val extras: MediatorLiveData<Extras> = MediatorLiveData() val extras: MediatorLiveData<Extras> = MediatorLiveData()
init { init {
@ -63,7 +62,7 @@ class AppViewModelX(val db: DatabaseX, val packageName: String) : ViewModel() {
val canLaunch = val canLaunch =
product != null && installed != null && installed.launcherActivities.isNotEmpty() product != null && installed != null && installed.launcherActivities.isNotEmpty()
val canShare = product != null && productRepos[0].second.name == "F-Droid" val canShare = product != null && productRepos[0].second.name == "F-Droid"
val bookmarked = extras.value?.favorite val bookmarked = extras.value?.favorite ?: false
val actions = mutableSetOf<ActionState>() val actions = mutableSetOf<ActionState>()
launch { launch {
@ -73,7 +72,7 @@ class AppViewModelX(val db: DatabaseX, val packageName: String) : ViewModel() {
if (installed != null) actions += ActionState.Details if (installed != null) actions += ActionState.Details
if (canUninstall) actions += ActionState.Uninstall if (canUninstall) actions += ActionState.Uninstall
if (canShare) actions += ActionState.Share if (canShare) actions += ActionState.Share
if (bookmarked == true) actions += ActionState.Bookmarked if (bookmarked) actions += ActionState.Bookmarked
else actions += ActionState.Bookmark else actions += ActionState.Bookmark
} }
val primaryAction = when { val primaryAction = when {
@ -81,15 +80,9 @@ class AppViewModelX(val db: DatabaseX, val packageName: String) : ViewModel() {
canLaunch -> ActionState.Launch canLaunch -> ActionState.Launch
canInstall -> ActionState.Install canInstall -> ActionState.Install
canShare -> ActionState.Share canShare -> ActionState.Share
bookmarked == true -> ActionState.Bookmarked bookmarked -> ActionState.Bookmarked
else -> ActionState.Bookmark else -> ActionState.Bookmark
} }
val secondaryAction = when {
primaryAction != ActionState.Share && canShare -> ActionState.Share
primaryAction != ActionState.Launch && canLaunch -> ActionState.Launch
installed != null && canUninstall -> ActionState.Uninstall
else -> null
}
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
this@AppViewModelX.actions.value = actions this@AppViewModelX.actions.value = actions
@ -100,7 +93,7 @@ class AppViewModelX(val db: DatabaseX, val packageName: String) : ViewModel() {
} }
else if (downloadState.value == null) else if (downloadState.value == null)
mainAction.value = primaryAction mainAction.value = primaryAction
this@AppViewModelX.secondaryAction.value = secondaryAction true
} }
} }
} }