mirror of
https://github.com/f-droid/fdroidclient.git
synced 2026-04-19 06:23:07 -04:00
Don't crash for ActivityNotFoundException
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
) {
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user