Move to ExtensionTab

This commit is contained in:
Roshan Varughese 2024-10-13 23:35:36 +13:00
parent 08f86fd92f
commit 645e30649f
2 changed files with 62 additions and 61 deletions

View File

@ -1,6 +1,5 @@
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
@ -56,7 +55,6 @@ 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
@ -250,7 +248,6 @@ private fun ExtensionContent(
}
}
},
context = context,
)
}
}
@ -281,43 +278,16 @@ private fun ExtensionItem(
onClickItemAction: (Extension) -> Unit,
onClickItemSecondaryAction: (Extension) -> Unit,
modifier: Modifier = Modifier,
context: Context,
) {
val (extension, installStep) = item
var showUninstallConfirmation by remember { mutableStateOf(false) }
val internalOnLongClickItem: () -> Unit = {
if (context.isPackageInstalled(extension.pkgName)) {
onLongClickItem(extension)
} else {
showUninstallConfirmation = true
}
}
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 = internalOnLongClickItem,
onLongClick = { onLongClickItem(extension) },
),
onClickItem = { onClickItem(extension) },
onLongClickItem = internalOnLongClickItem,
onLongClickItem = { onLongClickItem(extension) },
icon = {
Box(
modifier = Modifier
@ -570,31 +540,3 @@ 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

@ -1,8 +1,14 @@
package eu.kanade.tachiyomi.ui.browse.extension
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import eu.kanade.presentation.browse.ExtensionScreen
@ -12,6 +18,7 @@ import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen
import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen
import eu.kanade.tachiyomi.ui.webview.WebViewScreen
import eu.kanade.tachiyomi.util.system.isPackageInstalled
import kotlinx.collections.immutable.persistentListOf
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.i18n.stringResource
@ -22,6 +29,8 @@ fun extensionsTab(
): TabContent {
val navigator = LocalNavigator.currentOrThrow
val state by extensionsScreenModel.state.collectAsState()
val context = LocalContext.current
val showUninstallConfirmation = remember { mutableStateOf<Extension?>(null) }
return TabContent(
titleRes = MR.strings.label_extensions,
@ -45,7 +54,13 @@ fun extensionsTab(
onLongClickItem = { extension ->
when (extension) {
is Extension.Available -> extensionsScreenModel.installExtension(extension)
else -> extensionsScreenModel.uninstallExtension(extension)
else -> {
if (context.isPackageInstalled(extension.pkgName)) {
extensionsScreenModel.uninstallExtension(extension)
} else {
showUninstallConfirmation.value = extension
}
}
}
},
onClickItemCancel = extensionsScreenModel::cancelInstallUpdateExtension,
@ -68,6 +83,50 @@ fun extensionsTab(
onUpdateExtension = extensionsScreenModel::updateExtension,
onRefresh = extensionsScreenModel::findAvailableExtensions,
)
if (showUninstallConfirmation.value != null) {
ExtensionUninstallConfirmation(
extensionName = showUninstallConfirmation.value!!.name,
onClickConfirm = {
extensionsScreenModel.uninstallExtension(showUninstallConfirmation.value!!)
showUninstallConfirmation.value = null
},
onClickDismiss = {
showUninstallConfirmation.value = null
},
onDismissRequest = {
showUninstallConfirmation.value = null
},
)
}
},
)
}
@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,
)
}