Confirm Removal of Ext Installed via Private Installer

This commit is contained in:
Roshan Varughese 2024-10-13 21:26:49 +13:00
parent 6b2bba4e54
commit 472614435c
2 changed files with 67 additions and 2 deletions

View File

@ -1,5 +1,6 @@
package eu.kanade.presentation.browse
import android.content.Context
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
@ -55,6 +56,7 @@ import eu.kanade.tachiyomi.extension.model.InstallStep
import eu.kanade.tachiyomi.ui.browse.extension.ExtensionUiModel
import eu.kanade.tachiyomi.ui.browse.extension.ExtensionsScreenModel
import eu.kanade.tachiyomi.util.system.LocaleHelper
import eu.kanade.tachiyomi.util.system.isPackageInstalled
import eu.kanade.tachiyomi.util.system.launchRequestPackageInstallsPermission
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.i18n.MR
@ -248,6 +250,7 @@ private fun ExtensionContent(
}
}
},
context = context,
)
}
}
@ -278,16 +281,47 @@ private fun ExtensionItem(
onClickItemAction: (Extension) -> Unit,
onClickItemSecondaryAction: (Extension) -> Unit,
modifier: Modifier = Modifier,
context: Context,
) {
val (extension, installStep) = item
var showUninstallConfirmation by remember { mutableStateOf(false) }
if (showUninstallConfirmation) {
ExtensionUninstallConfirmation(
extensionName = extension.name,
onClickConfirm = {
onLongClickItem(extension)
showUninstallConfirmation = false
},
onClickDismiss = {
showUninstallConfirmation = false
},
onDismissRequest = {
showUninstallConfirmation = false
},
)
}
BaseBrowseItem(
modifier = modifier
.combinedClickable(
onClick = { onClickItem(extension) },
onLongClick = { onLongClickItem(extension) },
onLongClick = {
if (context.isPackageInstalled(extension.pkgName)) {
onLongClickItem(extension)
} else {
showUninstallConfirmation = true
}
},
),
onClickItem = { onClickItem(extension) },
onLongClickItem = { onLongClickItem(extension) },
onLongClickItem = {
if (context.isPackageInstalled(extension.pkgName)) {
onLongClickItem(extension)
} else {
showUninstallConfirmation = true
}
},
icon = {
Box(
modifier = Modifier
@ -540,3 +574,31 @@ private fun ExtensionTrustDialog(
onDismissRequest = onDismissRequest,
)
}
@Composable
private fun ExtensionUninstallConfirmation(
extensionName: String,
onClickConfirm: () -> Unit,
onClickDismiss: () -> Unit,
onDismissRequest: () -> Unit,
) {
AlertDialog(
title = {
Text(text = stringResource(MR.strings.ext_confirm_remove))
},
text = {
Text(text = stringResource(MR.strings.remove_private_extension_message, extensionName))
},
confirmButton = {
TextButton(onClick = onClickConfirm) {
Text(text = stringResource(MR.strings.ext_remove))
}
},
dismissButton = {
TextButton(onClick = onClickDismiss) {
Text(text = stringResource(MR.strings.action_cancel))
}
},
onDismissRequest = onDismissRequest,
)
}

View File

@ -325,10 +325,13 @@
<string name="ext_trust">Trust</string>
<string name="ext_untrusted">Untrusted</string>
<string name="ext_uninstall">Uninstall</string>
<string name="ext_remove">Remove</string>
<string name="ext_confirm_remove">Remove Extension?</string>
<string name="ext_app_info">App info</string>
<string name="untrusted_extension">Untrusted extension</string>
<string name="untrusted_extension_message">Malicious extensions can read any stored login credentials or execute arbitrary code.\n\nBy trusting this extension, you accept these risks.</string>
<string name="obsolete_extension_message">This extension is no longer available. It may not function properly and can cause issues with the app. Uninstalling it is recommended.</string>
<string name="remove_private_extension_message">Do you really want to remove the \"%s\" extension?</string>
<string name="extension_api_error">Failed to fetch available extensions</string>
<string name="ext_info_version">Version</string>
<string name="ext_info_language">Language</string>