Don't crash for ActivityNotFoundException

This commit is contained in:
Torsten Grote
2025-07-18 17:19:28 -03:00
parent ffb762016f
commit 8a240f1da2
5 changed files with 30 additions and 5 deletions

View File

@@ -1,6 +1,10 @@
package org.fdroid.basic.ui
import android.content.Context
import android.content.Intent
import android.text.format.DateUtils
import android.util.Log
import androidx.compose.ui.platform.UriHandler
import org.fdroid.index.v2.PackageManifest
import org.fdroid.index.v2.PackageVersion
import org.fdroid.index.v2.SignerV2
@@ -8,6 +12,23 @@ import java.security.MessageDigest
import java.security.NoSuchAlgorithmException
import java.util.concurrent.TimeUnit
fun Context.startActivitySafe(i: Intent?) {
if (i == null) return
try {
startActivity(i)
} catch (e: Exception) {
Log.e("Context", "Error opening $i ", e)
}
}
fun UriHandler.openUriSafe(uri: String) {
try {
openUri(uri)
} catch (e: Exception) {
Log.e("UriHandler", "Error opening $uri ", e)
}
}
fun getPreviewVersion(versionName: String, size: Long? = null) = object : PackageVersion {
override val versionCode: Long = 23
override val versionName: String = versionName

View File

@@ -33,6 +33,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.fdroid.basic.BuildConfig.VERSION_NAME
import org.fdroid.basic.R
import org.fdroid.basic.ui.openUriSafe
import org.fdroid.fdroid.ui.theme.FDroidContent
@Composable
@@ -78,7 +79,7 @@ fun About(onBackClicked: () -> Unit) {
color = MaterialTheme.colorScheme.secondary,
modifier = Modifier
.padding(top = 4.dp)
.clickable { uriHandler.openUri("https://f-droid.org") }
.clickable { uriHandler.openUriSafe("https://f-droid.org") }
)
Text(
text = "Gitlab",
@@ -86,7 +87,7 @@ fun About(onBackClicked: () -> Unit) {
color = MaterialTheme.colorScheme.secondary,
modifier = Modifier
.padding(top = 4.dp)
.clickable { uriHandler.openUri("https://gitlab.com/fdroid") }
.clickable { uriHandler.openUriSafe("https://gitlab.com/fdroid") }
)
}
Spacer(Modifier.windowInsetsBottomHeight(WindowInsets.systemBars))

View File

@@ -44,6 +44,7 @@ import org.fdroid.basic.details.AppDetailsItem
import org.fdroid.basic.details.MainButtonState
import org.fdroid.basic.details.testApp
import org.fdroid.basic.ui.asRelativeTimeString
import org.fdroid.basic.ui.startActivitySafe
import org.fdroid.fdroid.ui.theme.FDroidContent
@Composable
@@ -158,7 +159,7 @@ fun AppDetailsHeader(
val context = LocalContext.current
OutlinedButton(
onClick = {
context.startActivity(item.actions.launchIntent)
context.startActivitySafe(item.actions.launchIntent)
},
modifier = Modifier.weight(1f)
) {

View File

@@ -20,6 +20,7 @@ import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import org.fdroid.basic.ui.openUriSafe
@Composable
fun AppDetailsLink(icon: ImageVector, title: String, url: String, modifier: Modifier = Modifier) {
@@ -34,7 +35,7 @@ fun AppDetailsLink(icon: ImageVector, title: String, url: String, modifier: Modi
.heightIn(min = 48.dp)
.fillMaxWidth()
.combinedClickable(
onClick = { uriHandler.openUri(url) },
onClick = { uriHandler.openUriSafe(url) },
onLongClick = {
haptics.performHapticFeedback(HapticFeedbackType.LongPress)
val entry = ClipEntry(ClipData.newPlainText("", url))

View File

@@ -23,6 +23,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import org.fdroid.basic.R
import org.fdroid.basic.details.AppDetailsItem
import org.fdroid.basic.ui.startActivitySafe
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -52,7 +53,7 @@ fun AppDetailsTopAppBar(
actions = {
val context = LocalContext.current
item.actions.shareIntent?.let { shareIntent ->
IconButton(onClick = { context.startActivity(shareIntent) }) {
IconButton(onClick = { context.startActivitySafe(shareIntent) }) {
Icon(
imageVector = Icons.Filled.Share,
contentDescription = stringResource(R.string.menu_share),