diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt index 551a42132..9b8c069ad 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt @@ -10,11 +10,13 @@ import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.ErrorOutline import androidx.compose.material.icons.outlined.GetApp import androidx.compose.material.icons.outlined.Public import androidx.compose.material.icons.outlined.Refresh @@ -38,6 +40,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import dev.icerock.moko.resources.StringResource @@ -91,6 +94,10 @@ fun ExtensionScreen( state.isEmpty -> { val msg = if (!searchQuery.isNullOrEmpty()) { MR.strings.no_results_found + // SY --> + } else if (!state.hasExtensionRepos) { + SYMR.strings.no_repos_found + // SY <-- } else { MR.strings.empty_screen } @@ -150,6 +157,31 @@ private fun ExtensionContent( } } + // SY --> + if (!state.hasExtensionRepos) { + item(key = "extension-repos-warning") { + Column( + Modifier + .fillMaxWidth() + .padding(horizontal = MaterialTheme.padding.medium), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Icon( + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = null, + tint = MaterialTheme.colorScheme.error, + ) + Text( + text = stringResource(SYMR.strings.no_repos_found), + textAlign = TextAlign.Center, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.error, + ) + } + } + } + // SY <-- + state.items.forEach { (header, items) -> item( contentType = "header", diff --git a/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt b/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt index 8fc8a7af0..0d3a29505 100644 --- a/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt @@ -13,13 +13,11 @@ import androidx.compose.material.icons.automirrored.outlined.HelpOutline import androidx.compose.material.icons.automirrored.outlined.Label import androidx.compose.material.icons.automirrored.outlined.PlaylistAdd import androidx.compose.material.icons.outlined.CloudOff +import androidx.compose.material.icons.outlined.Extension import androidx.compose.material.icons.outlined.GetApp -import androidx.compose.material.icons.outlined.HelpOutline import androidx.compose.material.icons.outlined.History import androidx.compose.material.icons.outlined.Info -import androidx.compose.material.icons.outlined.Label import androidx.compose.material.icons.outlined.NewReleases -import androidx.compose.material.icons.outlined.PlaylistAdd import androidx.compose.material.icons.outlined.QueryStats import androidx.compose.material.icons.outlined.Settings import androidx.compose.material.icons.outlined.Storage @@ -60,9 +58,12 @@ fun MoreScreen( onClickDataAndStorage: () -> Unit, onClickSettings: () -> Unit, onClickAbout: () -> Unit, + // SY --> onClickBatchAdd: () -> Unit, onClickUpdates: () -> Unit, onClickHistory: () -> Unit, + onClickRepos: () -> Unit, + // SY <-- ) { val uriHandler = LocalUriHandler.current @@ -163,6 +164,15 @@ fun MoreScreen( onPreferenceClick = onClickDownloadQueue, ) } + // SY --> + item { + TextPreferenceWidget( + title = stringResource(MR.strings.label_extension_repos), + icon = Icons.Outlined.Extension, + onPreferenceClick = onClickRepos + ) + } + // SY <-- item { TextPreferenceWidget( title = stringResource(MR.strings.categories), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt index 9fead0b44..cf4febfc7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsScreenModel.kt @@ -129,6 +129,15 @@ class ExtensionsScreenModel( basePreferences.extensionInstaller().changes() .onEach { mutableState.update { state -> state.copy(installer = it) } } .launchIn(screenModelScope) + + // SY --> + preferences.extensionRepos() + .changes() + .onEach { repos -> + mutableState.update { it.copy(hasExtensionRepos = repos.isNotEmpty()) } + } + .launchIn(screenModelScope) + // SY <-- } fun search(query: String?) { @@ -206,6 +215,9 @@ class ExtensionsScreenModel( val updates: Int = 0, val installer: BasePreferences.ExtensionInstaller? = null, val searchQuery: String? = null, + // SY --> + val hasExtensionRepos: Boolean = false, + // SY <-- ) { val isEmpty = items.isEmpty() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt index 96a2b1e5e..d92b40b10 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/more/MoreTab.kt @@ -20,6 +20,7 @@ import eu.kanade.core.preference.asState import eu.kanade.domain.base.BasePreferences import eu.kanade.domain.ui.UiPreferences import eu.kanade.presentation.more.MoreScreen +import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen import eu.kanade.presentation.util.Tab import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.DownloadManager @@ -87,6 +88,7 @@ object MoreTab : Tab { onClickBatchAdd = { navigator.push(BatchAddScreen()) }, onClickUpdates = { navigator.push(UpdatesTab) }, onClickHistory = { navigator.push(HistoryTab) }, + onClickRepos = { navigator.push(ExtensionReposScreen()) } // SY <-- ) } diff --git a/i18n-sy/src/commonMain/resources/MR/base/strings.xml b/i18n-sy/src/commonMain/resources/MR/base/strings.xml index 294d07893..ba8fcae71 100644 --- a/i18n-sy/src/commonMain/resources/MR/base/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/base/strings.xml @@ -391,6 +391,7 @@ Redundant This extension is redundant and will not be used inside this version of Tachiyomi. + No extension repositories found, please add some under More -> Extension repos! Select sources