compose: downloads: Rework expanded options a bit

No need for sharing option as we have removed the ability to copy direct
download link for file long time ago.

Make the remaining buttons as TextButton too.

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-09-17 13:45:59 +05:30
parent ff51620ab2
commit e0eaa055c2
4 changed files with 37 additions and 101 deletions

View File

@@ -17,20 +17,26 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredSize
import androidx.compose.foundation.layout.width
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SplitButtonDefaults
import androidx.compose.material3.SplitButtonLayout
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.VerticalDivider
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.dimensionResource
@@ -62,9 +68,9 @@ fun DownloadComposable(
onClear: () -> Unit = {},
onCancel: () -> Unit = {},
onExport: () -> Unit = {},
onInstall: () -> Unit = {},
onShare: () -> Unit = {}
onInstall: () -> Unit = {}
) {
val context = LocalContext.current
val progress = "${download.progress}%"
val speed = "${Formatter.formatShortFileSize(LocalContext.current, download.speed)}/s"
val eta = getETAString(LocalContext.current, download.timeRemaining)
@@ -152,25 +158,36 @@ fun DownloadComposable(
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceEvenly
) {
VerticalButtonComposable(
painter = painterResource(R.drawable.ic_share),
text = stringResource(R.string.action_share),
onClick = onShare
TextButton(onClick = onInstall, enabled = download.canInstall(context)) {
Icon(
painter = painterResource(R.drawable.ic_install),
contentDescription = null
)
Spacer(modifier = Modifier.width(dimensionResource(R.dimen.padding_xsmall)))
Text(
text = stringResource(R.string.action_install),
style = MaterialTheme.typography.bodySmall
)
}
VerticalDivider(
modifier = Modifier.height(dimensionResource(R.dimen.margin_large))
)
VerticalButtonComposable(
painter = painterResource(R.drawable.ic_install),
text = stringResource(R.string.action_install),
onClick = onInstall
)
VerticalButtonComposable(
painter = painterResource(R.drawable.ic_file_copy),
text = stringResource(R.string.action_export),
onClick = onExport
)
TextButton(onClick = onExport, enabled = download.canInstall(context)) {
Icon(
painter = painterResource(R.drawable.ic_file_copy),
contentDescription = null
)
Spacer(modifier = Modifier.width(dimensionResource(R.dimen.padding_xsmall)))
Text(
text = stringResource(R.string.action_export),
style = MaterialTheme.typography.bodySmall
)
}
}
}
}

View File

@@ -1,66 +0,0 @@
/*
* SPDX-FileCopyrightText: 2025 The Calyx Institute
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.aurora.store.compose.composables
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.aurora.store.R
/**
* Composable with an icon and text placed vertically to function as a button
* @param modifier Modifier
* @param painter Icon for the button
* @param text Text describing the button's action
* @param onClick Callback when this composable is clicked
*/
@Composable
fun VerticalButtonComposable(
modifier: Modifier = Modifier,
painter: Painter,
text: String,
onClick: (() -> Unit)? = null
) {
Column(
modifier = modifier
.padding(dimensionResource(R.dimen.padding_xsmall))
.clip(RoundedCornerShape(dimensionResource(R.dimen.icon_size_default)))
.clickable(onClick = { if (onClick != null) onClick() }, enabled = onClick != null)
.padding(dimensionResource(R.dimen.padding_medium)),
horizontalAlignment = Alignment.CenterHorizontally
) {
Icon(
painter = painter,
contentDescription = text
)
Text(
text = text,
style = MaterialTheme.typography.bodySmall
)
}
}
@Preview(showBackground = true)
@Composable
private fun VerticalButtonComposablePreview() {
VerticalButtonComposable(
painter = painterResource(R.drawable.ic_file_copy),
text = stringResource(R.string.action_export)
)
}

View File

@@ -29,7 +29,6 @@ import androidx.paging.PagingData
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey
import com.aurora.extensions.share
import com.aurora.extensions.toast
import com.aurora.store.R
import com.aurora.store.compose.composables.DownloadComposable
@@ -73,7 +72,6 @@ fun DownloadsScreen(
onForceClearAll = { viewModel.clearAll() },
onClearFinished = { viewModel.clearFinished() },
onCancel = { packageName -> viewModel.cancel(packageName) },
onShare = { download -> context.share(download.displayName, download.packageName) },
onInstall = { download -> viewModel.install(download) },
onClear = { download ->
viewModel.clear(download.packageName, download.versionCode)
@@ -94,7 +92,6 @@ private fun ScreenContent(
onClear: (download: Download) -> Unit = {},
onExport: (download: Download) -> Unit = {},
onInstall: (download: Download) -> Unit = {},
onShare: (download: Download) -> Unit = {},
onCancelAll: () -> Unit = {},
onForceClearAll: () -> Unit = {},
onClearFinished: () -> Unit = {}
@@ -106,7 +103,6 @@ private fun ScreenContent(
* Save the initial loading state to make sure we don't replay the loading animation again.
*/
var initialLoad by rememberSaveable { mutableStateOf(true) }
val context = LocalContext.current
@Composable
fun SetupMenu() {
@@ -159,20 +155,9 @@ private fun ScreenContent(
download = download,
onClick = { onNavigateToAppDetails(download.packageName) },
onClear = { onClear(download) },
onShare = { onShare(download) },
onCancel = { onCancel(download.packageName) },
onExport = {
when {
download.canInstall(context) -> onExport(download)
else -> context.toast(R.string.purchase_no_file)
}
},
onInstall = {
when {
download.isSuccessful -> onInstall(download)
else -> context.toast(R.string.purchase_no_file)
}
}
onExport = { onExport(download) },
onInstall = { onInstall(download) }
)
}
}

View File

@@ -38,7 +38,7 @@ data class Download(
) : Parcelable {
val isFinished get() = downloadStatus in DownloadStatus.finished
val isRunning get() = downloadStatus in DownloadStatus.running
val isSuccessful get() = downloadStatus == DownloadStatus.COMPLETED
private val isSuccessful get() = downloadStatus == DownloadStatus.COMPLETED
companion object {
fun fromApp(app: App): Download {