diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt index 4bdd1cee05..668af0bcce 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt @@ -26,9 +26,12 @@ internal class ExtensionApi { suspend fun findExtensions(): List { return withIOContext { - val extensions = sourcePreferences.extensionRepos().get().flatMap { getExtensions(it) } + val repos = sourcePreferences.extensionRepos().get() + if (repos.isEmpty()) { + return@withIOContext emptyList() + } + val extensions = repos.flatMap { getExtensions(it) } - // Sanity check - empty probably means something broke if (extensions.isEmpty()) { throw Exception() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt index 0548a97d73..ec4915b9a5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionBottomSheet.kt @@ -50,7 +50,6 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At ExtensionAdapter.OnButtonClickListener, FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener, - ExtensionTrustDialog.Listener, SourceAdapter.OnAllClickListener, BaseMigrationInterface { @@ -323,8 +322,16 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At } private fun openTrustDialog(extension: Extension.Untrusted) { - ExtensionTrustDialog(this, extension.signatureHash, extension.pkgName, extension.versionCode) - .showDialog(controller.router) + val activity = controller.activity ?: return + activity.materialAlertDialog() + .setTitle(R.string.untrusted_extension) + .setMessage(R.string.untrusted_extension_message) + .setPositiveButton(R.string.trust) { _, _ -> + trustExtension(extension.pkgName, extension.versionCode, extension.signatureHash) + } + .setNegativeButton(R.string.uninstall) { _, _ -> + uninstallExtension(extension.pkgName) + }.show() } fun setExtensions(extensions: List, updateController: Boolean = true) { @@ -407,11 +414,11 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At extAdapter?.updateItem(updateHeader) } - override fun trustExtension(pkgName: String, versionCode: Long, signatureHash: String) { + private fun trustExtension(pkgName: String, versionCode: Long, signatureHash: String) { presenter.trustExtension(pkgName, versionCode, signatureHash) } - override fun uninstallExtension(pkgName: String) { + private fun uninstallExtension(pkgName: String) { presenter.uninstallExtension(pkgName) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt index 1494b96ae1..38f09a17ec 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionHolder.kt @@ -116,6 +116,7 @@ class ExtensionHolder(view: View, val adapter: ExtensionAdapter) : val repoText = when { extension is Extension.Untrusted -> itemView.context.getString(R.string.untrusted) extension is Extension.Installed && extension.isObsolete -> itemView.context.getString(R.string.obsolete) + extension is Extension.Installed -> extension.repoUrl.orEmpty() else -> "" } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionTrustDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionTrustDialog.kt deleted file mode 100644 index a10b3bddc2..0000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/extension/ExtensionTrustDialog.kt +++ /dev/null @@ -1,45 +0,0 @@ -package eu.kanade.tachiyomi.ui.extension - -import android.app.Dialog -import android.os.Bundle -import eu.kanade.tachiyomi.R -import eu.kanade.tachiyomi.ui.base.controller.DialogController -import eu.kanade.tachiyomi.util.system.materialAlertDialog - -class ExtensionTrustDialog(bundle: Bundle? = null) : DialogController(bundle) - where T : ExtensionTrustDialog.Listener { - - lateinit var listener: Listener - constructor(target: T, signatureHash: String, pkgName: String, versionCode: Long) : this( - Bundle().apply { - putString(SIGNATURE_KEY, signatureHash) - putString(PKGNAME_KEY, pkgName) - putLong(VERSION_CODE, versionCode) - }, - ) { - listener = target - } - - override fun onCreateDialog(savedViewState: Bundle?): Dialog { - return activity!!.materialAlertDialog() - .setTitle(R.string.untrusted_extension) - .setMessage(R.string.untrusted_extension_message) - .setPositiveButton(R.string.trust) { _, _ -> - listener.trustExtension(args.getString(PKGNAME_KEY)!!, args.getLong(VERSION_CODE), args.getString(SIGNATURE_KEY)!!) - } - .setNegativeButton(R.string.uninstall) { _, _ -> - listener.uninstallExtension(args.getString(PKGNAME_KEY)!!) - }.create() - } - - private companion object { - const val SIGNATURE_KEY = "signature_key" - const val PKGNAME_KEY = "pkgname_key" - const val VERSION_CODE = "version_code" - } - - interface Listener { - fun trustExtension(pkgName: String, versionCode: Long, signatureHash: String) - fun uninstallExtension(pkgName: String) - } -} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt index 1b54b48947..e7e4933126 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/BrowseController.kt @@ -43,6 +43,7 @@ import eu.kanade.tachiyomi.ui.main.RootSearchInterface import eu.kanade.tachiyomi.ui.setting.SettingsBrowseController import eu.kanade.tachiyomi.ui.setting.SettingsSourcesController import eu.kanade.tachiyomi.ui.source.browse.BrowseSourceController +import eu.kanade.tachiyomi.ui.source.browse.repos.RepoController import eu.kanade.tachiyomi.ui.source.globalsearch.GlobalSearchController import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.getBottomGestureInsets diff --git a/app/src/main/res/menu/extension_main.xml b/app/src/main/res/menu/extension_main.xml index 1d44d11beb..d7d88fa3ad 100644 --- a/app/src/main/res/menu/extension_main.xml +++ b/app/src/main/res/menu/extension_main.xml @@ -19,4 +19,4 @@ android:title="@string/filter_languages" android:icon="@drawable/ic_language_24dp" app:showAsAction="always"/> - \ No newline at end of file +