diff --git a/app/src/main/java/org/samo_lego/canta/ui/dialog/AppInfoDialog.kt b/app/src/main/java/org/samo_lego/canta/ui/dialog/AppInfoDialog.kt index 2485a22..70f6376 100644 --- a/app/src/main/java/org/samo_lego/canta/ui/dialog/AppInfoDialog.kt +++ b/app/src/main/java/org/samo_lego/canta/ui/dialog/AppInfoDialog.kt @@ -3,6 +3,8 @@ package org.samo_lego.canta.ui.dialog import android.content.Intent import android.content.pm.PackageManager import android.net.Uri +import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS +import android.text.format.Formatter.formatFileSize import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -12,11 +14,15 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.text.ClickableText import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ContentCopy +import androidx.compose.material.icons.filled.Settings import androidx.compose.material3.BasicAlertDialog +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -35,6 +41,7 @@ import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties +import java.io.File import org.samo_lego.canta.R import org.samo_lego.canta.ui.component.AppIconImage import org.samo_lego.canta.util.AppInfo @@ -59,6 +66,15 @@ fun AppInfoDialog( null } + val appSize = + try { + val packageInfo = context.packageManager.getPackageInfo(appInfo.packageName, 0) + val appFile = packageInfo.applicationInfo?.sourceDir?.let { File(it) } + appFile?.let { formatFileSize(context, it.length()) } ?: "? MB" + } catch (e: Exception) { + null + } + BasicAlertDialog( modifier = Modifier.fillMaxWidth(0.8f) @@ -89,7 +105,17 @@ fun AppInfoDialog( ) Spacer(modifier = Modifier.size(8.dp)) } - Text(text = appInfo.name, modifier = Modifier.align(Alignment.CenterVertically)) + + Column(modifier = Modifier.align(Alignment.CenterVertically)) { + Text(text = appInfo.name) + if (appSize != null) { + Text( + text = appSize, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } } Spacer(modifier = Modifier.size(8.dp)) Row( @@ -152,6 +178,34 @@ fun AppInfoDialog( style = MaterialTheme.typography.bodySmall ) } + if (!appInfo.isUninstalled) { + Row(modifier = Modifier.align(Alignment.End)) { + Button( + onClick = { + val intent = + Intent(ACTION_APPLICATION_DETAILS_SETTINGS).apply { + data = Uri.fromParts("package", appInfo.packageName, null) + } + context.startActivity(intent) + }, + colors = + ButtonDefaults.buttonColors( + containerColor = + MaterialTheme.colorScheme.secondaryContainer, + contentColor = + MaterialTheme.colorScheme.onSecondaryContainer + ) + ) { + Icon( + Icons.Default.Settings, + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(stringResource(R.string.app_settings)) + } + } + } } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b8d7dcc..3c0f5cb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -34,5 +34,6 @@ Clear %d selected Copy + App info Close