Indicate obsolete extensions (#2494)

* Indicate obsolete extensions

* Make obsolete indicators red

* Move obsolete extensions up the list

* Add base button theme for holder

* Use red button color state instead of explicit text color
This commit is contained in:
arkon
2020-01-12 18:27:04 -05:00
committed by GitHub
parent 6b5742c1ff
commit f3e228e8a4
8 changed files with 87 additions and 15 deletions

View File

@ -71,7 +71,7 @@ class ExtensionManager(
private set(value) {
field = value
availableExtensionsRelay.call(value)
setUpdateFieldOfInstalledExtensions(value)
updatedInstalledExtensionsStatuses(value)
}
/**
@ -158,18 +158,25 @@ class ExtensionManager(
*
* @param availableExtensions The list of extensions given by the [api].
*/
private fun setUpdateFieldOfInstalledExtensions(availableExtensions: List<Extension.Available>) {
private fun updatedInstalledExtensionsStatuses(availableExtensions: List<Extension.Available>) {
val mutInstalledExtensions = installedExtensions.toMutableList()
var changed = false
for ((index, installedExt) in mutInstalledExtensions.withIndex()) {
val pkgName = installedExt.pkgName
val availableExt = availableExtensions.find { it.pkgName == pkgName } ?: continue
val availableExt = availableExtensions.find { it.pkgName == pkgName }
val hasUpdate = availableExt.versionCode > installedExt.versionCode
if (installedExt.hasUpdate != hasUpdate) {
mutInstalledExtensions[index] = installedExt.copy(hasUpdate = hasUpdate)
changed = true
if (availableExt == null) {
if (!installedExt.isObsolete) {
mutInstalledExtensions[index] = installedExt.copy(isObsolete = true)
changed = true
}
} else {
val hasUpdate = availableExt.versionCode > installedExt.versionCode
if (installedExt.hasUpdate != hasUpdate) {
mutInstalledExtensions[index] = installedExt.copy(hasUpdate = hasUpdate)
changed = true
}
}
}
if (changed) {

View File

@ -16,7 +16,8 @@ sealed class Extension {
override val versionCode: Int,
val sources: List<Source>,
override val lang: String,
val hasUpdate: Boolean = false) : Extension()
val hasUpdate: Boolean = false,
val isObsolete: Boolean = false) : Extension()
data class Available(override val name: String,
override val pkgName: String,

View File

@ -69,6 +69,10 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
presenter.uninstallExtension()
}
if (extension.isObsolete) {
extension_obsolete.visibility = View.VISIBLE
}
val themedContext by lazy { getPreferenceThemeContext() }
val manager = PreferenceManager(themedContext)
manager.preferenceDataStore = EmptyPreferenceDataStore()

View File

@ -1,6 +1,8 @@
package eu.kanade.tachiyomi.ui.extension
import android.view.View
import androidx.core.content.ContextCompat
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.glide.GlideApp
import eu.kanade.tachiyomi.extension.model.Extension
@ -52,11 +54,15 @@ class ExtensionHolder(view: View, override val adapter: ExtensionAdapter) :
bindButton(item)
}
@Suppress("ResourceType")
fun bindButton(item: ExtensionItem) = with(ext_button) {
isEnabled = true
isClickable = true
isActivated = false
background = VectorDrawableCompat.create(resources!!, R.drawable.button_bg_transparent, null)
setTextColor(ContextCompat.getColorStateList(context, R.drawable.button_bg_transparent))
val extension = item.extension
val installStep = item.installStep
@ -73,11 +79,21 @@ class ExtensionHolder(view: View, override val adapter: ExtensionAdapter) :
isClickable = false
}
} else if (extension is Extension.Installed) {
if (extension.hasUpdate) {
isActivated = true
setText(R.string.ext_update)
} else {
setText(R.string.ext_details)
when {
extension.hasUpdate -> {
isActivated = true
setText(R.string.ext_update)
}
extension.isObsolete -> {
// Red outline
background = VectorDrawableCompat.create(resources, R.drawable.button_bg_error, null)
setTextColor(ContextCompat.getColorStateList(context, R.drawable.button_bg_error))
setText(R.string.ext_obsolete)
}
else -> {
setText(R.string.ext_details)
}
}
} else if (extension is Extension.Untrusted) {
setText(R.string.ext_trust)

View File

@ -62,7 +62,7 @@ open class ExtensionPresenter(
val items = mutableListOf<ExtensionItem>()
val installedSorted = installed.sortedWith(compareBy({ !it.hasUpdate }, { it.pkgName }))
val installedSorted = installed.sortedWith(compareBy({ !it.hasUpdate }, { !it.isObsolete }, { it.pkgName }))
val untrustedSorted = untrusted.sortedBy { it.pkgName }
val availableSorted = available
// Filter out already installed extensions and disabled languages