From a161467457bf83b8c61756729b5ec6cefc868d97 Mon Sep 17 00:00:00 2001 From: Ushie Date: Sun, 18 Dec 2022 03:54:34 +0300 Subject: [PATCH] feat: don't allow expanding without content --- .../manager/ui/component/ApplicationItem.kt | 112 ++++++++++-------- .../ui/viewmodel/DashboardViewModel.kt | 12 +- 2 files changed, 70 insertions(+), 54 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/ui/component/ApplicationItem.kt b/app/src/main/java/app/revanced/manager/ui/component/ApplicationItem.kt index 500a471..342a358 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/ApplicationItem.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/ApplicationItem.kt @@ -12,17 +12,22 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.rotate import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import app.revanced.manager.R +import app.revanced.manager.ui.navigation.AppDestination +import dev.olshevski.navigation.reimagined.navController +import dev.olshevski.navigation.reimagined.navigate @Composable fun ApplicationItem( appName: String, appIcon: @Composable () -> Unit, - releaseAgo: String, - expandedContent: @Composable () -> Unit, + appVersion: String, + onClick: () -> Unit, + expandedContent: (@Composable () -> Unit)? = null, ) { var expandedState by remember { mutableStateOf(false) } val rotateState by animateFloatAsState(targetValue = if (expandedState) 180f else 0f) @@ -62,36 +67,40 @@ fun ApplicationItem( maxLines = 1 ) Text( - text = releaseAgo, + text = appVersion, style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant, ) } } Row { - IconButton( - modifier = Modifier.rotate(rotateState), - onClick = { expandedState = !expandedState }, - ) { - Icon( - imageVector = Icons.Default.ExpandMore, - contentDescription = stringResource(R.string.expand) - ) + if (expandedContent != null) { + IconButton( + modifier = Modifier.rotate(rotateState), + onClick = { expandedState = !expandedState }, + ) { + Icon( + imageVector = Icons.Default.ExpandMore, + contentDescription = stringResource(R.string.expand) + ) + } } - OutlinedButton(onClick = {}) { - Text(stringResource(R.string.update)) + OutlinedButton(onClick = onClick) { + Text(stringResource(R.string.info)) } } } - AnimatedVisibility( - visible = expandedState - ) { - Box( - modifier = Modifier - .padding(bottom = 10.dp) - .fillMaxSize(), + if (expandedContent != null) { + AnimatedVisibility( + visible = expandedState ) { - expandedContent() + Box( + modifier = Modifier + .padding(bottom = 10.dp) + .fillMaxSize(), + ) { + expandedContent() + } } } } @@ -102,19 +111,17 @@ fun ApplicationItem( fun ApplicationItemDualTint( appName: String, appIcon: @Composable () -> Unit, - releaseAgo: String, - expandedContent: @Composable () -> Unit, + appVersion: String, + onClick: () -> Unit, + expandedContent: (@Composable () -> Unit)? = null, ) { var expandedState by remember { mutableStateOf(false) } val rotateState by animateFloatAsState(targetValue = if (expandedState) 180f else 0f) - Card( + ElevatedCard( modifier = Modifier .fillMaxWidth() - .defaultMinSize(minHeight = 68.dp), - colors = CardDefaults.cardColors( - containerColor = Color(0xFF1E2630) - ) + .defaultMinSize(minHeight = 68.dp) ) { Column( modifier = Modifier @@ -132,8 +139,7 @@ fun ApplicationItemDualTint( modifier = Modifier .height(68.dp) .weight(1f), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically ) { appIcon() Column(modifier = Modifier.padding(start = 8.dp)) { @@ -143,38 +149,44 @@ fun ApplicationItemDualTint( maxLines = 1 ) Text( - text = releaseAgo, + text = appVersion, style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant, ) } } Row(verticalAlignment = Alignment.CenterVertically) { - IconButton( - modifier = Modifier.rotate(rotateState), - onClick = { expandedState = !expandedState }, - ) { - Icon( - imageVector = Icons.Default.ExpandMore, - contentDescription = stringResource(R.string.expand) - ) + if (expandedContent != null) { + IconButton( + modifier = Modifier.rotate(rotateState), + onClick = { expandedState = !expandedState }, + ) { + Icon( + imageVector = Icons.Default.ExpandMore, + contentDescription = stringResource(R.string.expand) + ) + } } - OutlinedButton(onClick = { /*TODO*/ }) { - Text(stringResource(R.string.update)) + Button(onClick = onClick) { + Text(stringResource(R.string.info)) } } } } - AnimatedVisibility( - visible = expandedState - ) { - Box( - modifier = Modifier - .fillMaxSize() - .background(color = Color(0xFF11161C)) - .padding(14.dp, 10.dp), + if (expandedContent != null) { + AnimatedVisibility( + visible = expandedState ) { - expandedContent() + Box( + modifier = Modifier + .fillMaxSize() + .background(color = MaterialTheme.colorScheme.surface.copy(alpha = .4f).compositeOver( + MaterialTheme.colorScheme.surfaceColorAtElevation(10.dp) + )) + .padding(14.dp, 10.dp), + ) { + expandedContent() + } } } } diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt index 233b204..f01b316 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt @@ -1,6 +1,7 @@ package app.revanced.manager.ui.viewmodel import android.annotation.SuppressLint +import android.os.Parcelable import android.text.format.DateUtils import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -15,6 +16,7 @@ import app.revanced.manager.util.ghManager import app.revanced.manager.util.ghPatcher import io.ktor.http.* import kotlinx.coroutines.launch +import kotlinx.parcelize.Parcelize import kotlinx.serialization.Serializable import java.text.SimpleDateFormat import java.util.* @@ -67,10 +69,12 @@ class DashboardViewModel( } } +@Parcelize @Serializable -class PatchedApp( +data class PatchedApp( val appName: String, val pkgName: String, - val version: String, - val appliedPatches: List -) + val appVersion: String, + val appliedPatches: List, + val patchedDate: String +) : Parcelable