diff --git a/app/src/main/java/eu/kanade/domain/source/model/Source.kt b/app/src/main/java/eu/kanade/domain/source/model/Source.kt index 0e3919718..ec9c60c6a 100644 --- a/app/src/main/java/eu/kanade/domain/source/model/Source.kt +++ b/app/src/main/java/eu/kanade/domain/source/model/Source.kt @@ -4,6 +4,7 @@ import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asImageBitmap import androidx.core.graphics.drawable.toBitmap import eu.kanade.tachiyomi.extension.ExtensionManager +import eu.kanade.tachiyomi.extension.model.Extension import tachiyomi.domain.source.model.Source import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -14,3 +15,14 @@ val Source.icon: ImageBitmap? ?.toBitmap() ?.asImageBitmap() } + +// AM (BROWSE) --> +// Add an extra property to Source for it to get access to ExtensionManager +val Source.installedExtension: Extension.Installed + get() { + return Injekt.get() + .installedExtensionsFlow + .value + .find { ext -> ext.sources.any { it.id == id } }!! + } +// <-- AM (BROWSE) diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt index 41b730e93..b23b68121 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt @@ -25,6 +25,7 @@ import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.PushPin import androidx.compose.material.icons.filled.Search import androidx.compose.material.icons.outlined.PushPin +import androidx.compose.material.icons.outlined.Settings import androidx.compose.material3.AlertDialog import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -55,8 +56,12 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import cafe.adriel.voyager.navigator.LocalNavigator +import cafe.adriel.voyager.navigator.currentOrThrow +import eu.kanade.domain.source.model.installedExtension import eu.kanade.presentation.browse.components.BaseSourceItem import eu.kanade.tachiyomi.ui.browse.source.SourcesScreenModel +import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreenModel.Listing import eu.kanade.tachiyomi.util.system.LocaleHelper import kotlinx.collections.immutable.ImmutableList @@ -76,6 +81,7 @@ import tachiyomi.presentation.core.util.clearFocusOnSoftKeyboardHide import tachiyomi.presentation.core.util.plus import tachiyomi.presentation.core.util.runOnEnterKeyPressed import tachiyomi.presentation.core.util.secondaryItemAlpha +import tachiyomi.source.local.LocalSource import tachiyomi.source.local.isLocal @Composable @@ -381,6 +387,13 @@ private fun SourceItem( ) } // SY <-- + // AM (BROWSE) --> + if (source.id != LocalSource.ID) { + SourceSettingsButton( + source = source, + ) + } + // <-- AM (BROWSE) }, ) } @@ -408,6 +421,22 @@ private fun SourcePinButton( } } +// AM (BROWSE) --> +@Composable +private fun SourceSettingsButton( + source: Source, +) { + val navigator = LocalNavigator.currentOrThrow + IconButton(onClick = { navigator.push(ExtensionDetailsScreen(source.installedExtension.pkgName)) }) { + Icon( + imageVector = Icons.Outlined.Settings, + tint = MaterialTheme.colorScheme.primary, + contentDescription = stringResource(MR.strings.label_settings), + ) + } +} +// <-- AM (BROWSE) + @Composable fun SourceOptionsDialog( source: Source,