From e0eaa055c216a08f4a51288deb783c66f05849f3 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 17 Sep 2025 13:45:59 +0530 Subject: [PATCH] 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 --- .../compose/composables/DownloadComposable.kt | 51 +++++++++----- .../composables/VerticalButtonComposable.kt | 66 ------------------- .../compose/ui/downloads/DownloadsScreen.kt | 19 +----- .../store/data/room/download/Download.kt | 2 +- 4 files changed, 37 insertions(+), 101 deletions(-) delete mode 100644 app/src/main/java/com/aurora/store/compose/composables/VerticalButtonComposable.kt diff --git a/app/src/main/java/com/aurora/store/compose/composables/DownloadComposable.kt b/app/src/main/java/com/aurora/store/compose/composables/DownloadComposable.kt index 4cd7a3d34..12cd45482 100644 --- a/app/src/main/java/com/aurora/store/compose/composables/DownloadComposable.kt +++ b/app/src/main/java/com/aurora/store/compose/composables/DownloadComposable.kt @@ -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 + ) + } } } } diff --git a/app/src/main/java/com/aurora/store/compose/composables/VerticalButtonComposable.kt b/app/src/main/java/com/aurora/store/compose/composables/VerticalButtonComposable.kt deleted file mode 100644 index 3a8e813e4..000000000 --- a/app/src/main/java/com/aurora/store/compose/composables/VerticalButtonComposable.kt +++ /dev/null @@ -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) - ) -} diff --git a/app/src/main/java/com/aurora/store/compose/ui/downloads/DownloadsScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/downloads/DownloadsScreen.kt index 21d4c70cd..c7b002e04 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/downloads/DownloadsScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/downloads/DownloadsScreen.kt @@ -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) } ) } } diff --git a/app/src/main/java/com/aurora/store/data/room/download/Download.kt b/app/src/main/java/com/aurora/store/data/room/download/Download.kt index 9908ba4b7..937c10393 100644 --- a/app/src/main/java/com/aurora/store/data/room/download/Download.kt +++ b/app/src/main/java/com/aurora/store/data/room/download/Download.kt @@ -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 {