Migrate from Coil to Picasso

This commit is contained in:
kitsunyan
2020-06-26 02:04:36 +03:00
parent b646259f5d
commit f6f2cc89be
7 changed files with 48 additions and 22 deletions
+1 -1
View File
@@ -122,5 +122,5 @@ dependencies {
implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'com.fasterxml.jackson.core:jackson-core:2.11.0'
implementation 'io.coil-kt:coil:0.11.0'
implementation 'com.squareup.picasso:picasso:2.71828'
}
@@ -10,16 +10,16 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.PackageInfo
import coil.Coil
import coil.ImageLoader
import com.squareup.picasso.OkHttp3Downloader
import com.squareup.picasso.Picasso
import nya.kitsunyan.foxydroid.content.Cache
import nya.kitsunyan.foxydroid.content.Preferences
import nya.kitsunyan.foxydroid.content.ProductPreferences
import nya.kitsunyan.foxydroid.database.Database
import nya.kitsunyan.foxydroid.entity.InstalledItem
import nya.kitsunyan.foxydroid.index.RepositoryUpdater
import nya.kitsunyan.foxydroid.network.CoilDownloader
import nya.kitsunyan.foxydroid.network.Downloader
import nya.kitsunyan.foxydroid.network.PicassoDownloader
import nya.kitsunyan.foxydroid.service.Connection
import nya.kitsunyan.foxydroid.service.SyncService
import nya.kitsunyan.foxydroid.utility.Utils
@@ -48,8 +48,8 @@ class MainApplication: Application() {
listenApplications()
listenPreferences()
Coil.setImageLoader(ImageLoader.Builder(this)
.callFactory(CoilDownloader.Factory(Cache.getImagesDir(this))).build())
Picasso.setSingletonInstance(Picasso.Builder(this)
.downloader(OkHttp3Downloader(PicassoDownloader.Factory(Cache.getImagesDir(this)))).build())
if (databaseUpdated) {
forceSyncAll()
@@ -12,7 +12,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
import java.io.File
import kotlin.math.*
object CoilDownloader {
object PicassoDownloader {
private const val HOST_ICON = "icon"
private const val HOST_SCREENSHOT = "screenshot"
private const val QUERY_ADDRESS = "address"
@@ -40,7 +40,6 @@ import androidx.core.content.ContextCompat
import androidx.core.graphics.ColorUtils
import androidx.core.text.util.LinkifyCompat
import androidx.recyclerview.widget.RecyclerView
import coil.api.*
import nya.kitsunyan.foxydroid.R
import nya.kitsunyan.foxydroid.content.Preferences
import nya.kitsunyan.foxydroid.content.ProductPreferences
@@ -50,7 +49,7 @@ import nya.kitsunyan.foxydroid.entity.ProductPreference
import nya.kitsunyan.foxydroid.entity.Release
import nya.kitsunyan.foxydroid.entity.Repository
import nya.kitsunyan.foxydroid.graphics.PaddingDrawable
import nya.kitsunyan.foxydroid.network.CoilDownloader
import nya.kitsunyan.foxydroid.network.PicassoDownloader
import nya.kitsunyan.foxydroid.utility.KParcelable
import nya.kitsunyan.foxydroid.utility.PackageItemResolver
import nya.kitsunyan.foxydroid.utility.Utils
@@ -953,7 +952,7 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
item as Item.HeaderItem
val installedItem = installedItem
if (item.product.icon.isNotEmpty()) {
holder.icon.load(CoilDownloader.createIconUri(holder.icon, item.product.icon, item.repository)) {
holder.icon.load(PicassoDownloader.createIconUri(holder.icon, item.product.icon, item.repository)) {
placeholder(holder.progressIcon)
error(holder.defaultIcon)
}
@@ -1122,12 +1121,12 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
val outer = context.resources.sizeScaled(GRID_SPACING_OUTER_DP)
val inner = context.resources.sizeScaled(GRID_SPACING_INNER_DP)
val cellSize = (screenWidth - 2 * outer - (columns - 1) * inner) / columns
holder.image.load(CoilDownloader.createScreenshotUri(item.repository, item.packageName, item.screenshot)) {
size(cellSize)
holder.image.load(PicassoDownloader.createScreenshotUri(item.repository, item.packageName, item.screenshot)) {
placeholder(holder.placeholder)
error(holder.placeholder)
resize(cellSize, cellSize)
centerCrop()
}
Unit
}
ViewType.RELEASE -> {
holder as ReleaseViewHolder
@@ -11,13 +11,11 @@ import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import coil.api.clear
import coil.api.load
import nya.kitsunyan.foxydroid.R
import nya.kitsunyan.foxydroid.database.Database
import nya.kitsunyan.foxydroid.entity.ProductItem
import nya.kitsunyan.foxydroid.entity.Repository
import nya.kitsunyan.foxydroid.network.CoilDownloader
import nya.kitsunyan.foxydroid.network.PicassoDownloader
import nya.kitsunyan.foxydroid.utility.Utils
import nya.kitsunyan.foxydroid.utility.extension.resources.*
import nya.kitsunyan.foxydroid.utility.extension.text.*
@@ -127,7 +125,7 @@ class ProductsAdapter(private val onClick: (ProductItem) -> Unit):
holder.summary.visibility = if (holder.summary.text.isNotEmpty()) View.VISIBLE else View.GONE
val repository: Repository? = repositories[productItem.repositoryId]
if (productItem.icon.isNotEmpty() && repository != null) {
holder.icon.load(CoilDownloader.createIconUri(holder.icon, productItem.icon, repository)) {
holder.icon.load(PicassoDownloader.createIconUri(holder.icon, productItem.icon, repository)) {
placeholder(holder.progressIcon)
error(holder.defaultIcon)
}
@@ -15,7 +15,6 @@ import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.MarginPageTransformer
import androidx.viewpager2.widget.ViewPager2
import coil.api.*
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.disposables.Disposable
@@ -25,7 +24,7 @@ import nya.kitsunyan.foxydroid.database.Database
import nya.kitsunyan.foxydroid.entity.Product
import nya.kitsunyan.foxydroid.entity.Repository
import nya.kitsunyan.foxydroid.graphics.PaddingDrawable
import nya.kitsunyan.foxydroid.network.CoilDownloader
import nya.kitsunyan.foxydroid.network.PicassoDownloader
import nya.kitsunyan.foxydroid.utility.RxUtils
import nya.kitsunyan.foxydroid.utility.extension.resources.*
import nya.kitsunyan.foxydroid.widget.StableRecyclerAdapter
@@ -101,6 +100,9 @@ class ScreenshotsFragment(): DialogFragment() {
val viewPager = ViewPager2(dialog.context)
viewPager.adapter = Adapter(packageName) { decorView.performClick() }
viewPager.setPageTransformer(MarginPageTransformer(resources.sizeScaled(16)))
viewPager.viewTreeObserver.addOnGlobalLayoutListener {
(viewPager.adapter as Adapter).size = Pair(viewPager.width, viewPager.height)
}
dialog.addContentView(viewPager, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT))
this.viewPager = viewPager
@@ -181,6 +183,14 @@ class ScreenshotsFragment(): DialogFragment() {
notifyDataSetChanged()
}
var size = Pair(0, 0)
set(value) {
if (field != value) {
field = value
notifyDataSetChanged()
}
}
fun getCurrentIdentifier(viewPager: ViewPager2): String? {
val position = viewPager.currentItem
return screenshots.getOrNull(position)?.identifier
@@ -202,9 +212,16 @@ class ScreenshotsFragment(): DialogFragment() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder as ViewHolder
val screenshot = screenshots[position]
holder.image.load(CoilDownloader.createScreenshotUri(repository!!, packageName, screenshot)) {
placeholder(holder.placeholder)
error(holder.placeholder)
val (width, height) = size
if (width > 0 && height > 0) {
holder.image.load(PicassoDownloader.createScreenshotUri(repository!!, packageName, screenshot)) {
placeholder(holder.placeholder)
error(holder.placeholder)
resize(width, height)
centerInside()
}
} else {
holder.image.clear()
}
}
}
@@ -6,12 +6,16 @@ import android.content.res.ColorStateList
import android.content.res.Resources
import android.graphics.Typeface
import android.graphics.drawable.Drawable
import android.net.Uri
import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.squareup.picasso.Picasso
import com.squareup.picasso.RequestCreator
import kotlin.math.*
object TypefaceExtra {
@@ -51,3 +55,11 @@ fun TextView.setTextSizeScaled(size: Int) {
fun ViewGroup.inflate(layoutResId: Int): View {
return LayoutInflater.from(context).inflate(layoutResId, this, false)
}
fun ImageView.load(uri: Uri, builder: RequestCreator.() -> Unit) {
Picasso.get().load(uri).noFade().apply(builder).into(this)
}
fun ImageView.clear() {
Picasso.get().cancelRequest(this)
}