mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	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:
		| @@ -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) { | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user