Merge pull request #28 from Iamlooker/migrate-to-coil

Migrate to coil
This commit is contained in:
LooKeR 2021-10-13 09:35:24 +05:30 committed by GitHub
commit 3b0625c066
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 32 additions and 28 deletions

View File

@ -119,7 +119,7 @@ dependencies {
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2' implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2'
implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation 'io.reactivex.rxjava3:rxjava:3.1.1'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0' implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0'
implementation 'io.coil-kt:coil:1.4.0'
implementation 'com.github.topjohnwu.libsu:core:3.1.2' implementation 'com.github.topjohnwu.libsu:core:3.1.2'
} }

View File

@ -5,24 +5,24 @@ import android.app.Application
import android.app.job.JobInfo import android.app.job.JobInfo
import android.app.job.JobScheduler import android.app.job.JobScheduler
import android.content.* import android.content.*
import coil.ImageLoader
import coil.ImageLoaderFactory
import com.looker.droidify.content.Cache import com.looker.droidify.content.Cache
import com.looker.droidify.content.Preferences import com.looker.droidify.content.Preferences
import com.looker.droidify.content.ProductPreferences import com.looker.droidify.content.ProductPreferences
import com.looker.droidify.database.Database import com.looker.droidify.database.Database
import com.looker.droidify.index.RepositoryUpdater import com.looker.droidify.index.RepositoryUpdater
import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.network.Downloader import com.looker.droidify.network.Downloader
import com.looker.droidify.network.PicassoDownloader
import com.looker.droidify.service.Connection import com.looker.droidify.service.Connection
import com.looker.droidify.service.SyncService import com.looker.droidify.service.SyncService
import com.looker.droidify.utility.Utils.toInstalledItem import com.looker.droidify.utility.Utils.toInstalledItem
import com.looker.droidify.utility.extension.android.Android import com.looker.droidify.utility.extension.android.Android
import com.squareup.picasso.OkHttp3Downloader
import com.squareup.picasso.Picasso
import java.net.InetSocketAddress import java.net.InetSocketAddress
import java.net.Proxy import java.net.Proxy
@Suppress("unused") @Suppress("unused")
class MainApplication : Application() { class MainApplication : Application(), ImageLoaderFactory {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
@ -34,12 +34,6 @@ class MainApplication : Application() {
listenApplications() listenApplications()
listenPreferences() listenPreferences()
Picasso.setSingletonInstance(
Picasso.Builder(this)
.downloader(OkHttp3Downloader(PicassoDownloader.Factory(Cache.getImagesDir(this))))
.build()
)
if (databaseUpdated) { if (databaseUpdated) {
forceSyncAll() forceSyncAll()
} }
@ -181,4 +175,11 @@ class MainApplication : Application() {
@SuppressLint("UnsafeProtectedBroadcastReceiver") @SuppressLint("UnsafeProtectedBroadcastReceiver")
override fun onReceive(context: Context, intent: Intent) = Unit override fun onReceive(context: Context, intent: Intent) = Unit
} }
override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(this)
.callFactory(CoilDownloader.Factory(Cache.getImagesDir(this)))
.crossfade(true)
.build()
}
} }

View File

@ -13,7 +13,7 @@ import java.io.File
import kotlin.math.min import kotlin.math.min
import kotlin.math.roundToInt import kotlin.math.roundToInt
object PicassoDownloader { object CoilDownloader {
private const val HOST_ICON = "icon" private const val HOST_ICON = "icon"
private const val HOST_SCREENSHOT = "screenshot" private const val HOST_SCREENSHOT = "screenshot"
private const val QUERY_ADDRESS = "address" private const val QUERY_ADDRESS = "address"

View File

@ -32,7 +32,7 @@ import com.looker.droidify.content.Preferences
import com.looker.droidify.content.ProductPreferences import com.looker.droidify.content.ProductPreferences
import com.looker.droidify.entity.* import com.looker.droidify.entity.*
import com.looker.droidify.graphics.PaddingDrawable import com.looker.droidify.graphics.PaddingDrawable
import com.looker.droidify.network.PicassoDownloader import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.utility.KParcelable import com.looker.droidify.utility.KParcelable
import com.looker.droidify.utility.PackageItemResolver import com.looker.droidify.utility.PackageItemResolver
import com.looker.droidify.utility.Utils import com.looker.droidify.utility.Utils
@ -1119,7 +1119,7 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
if (updateAll) { if (updateAll) {
if (item.product.icon.isNotEmpty() || item.product.metadataIcon.isNotEmpty()) { if (item.product.icon.isNotEmpty() || item.product.metadataIcon.isNotEmpty()) {
holder.icon.load( holder.icon.load(
PicassoDownloader.createIconUri( CoilDownloader.createIconUri(
holder.icon, item.product.packageName, holder.icon, item.product.packageName,
item.product.icon, item.product.metadataIcon, item.repository item.product.icon, item.product.metadataIcon, item.repository
) )
@ -1322,7 +1322,7 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
val inner = context.resources.sizeScaled(GRID_SPACING_INNER_DP) val inner = context.resources.sizeScaled(GRID_SPACING_INNER_DP)
val cellSize = (screenWidth - 2 * outer - (columns - 1) * inner) / columns val cellSize = (screenWidth - 2 * outer - (columns - 1) * inner) / columns
holder.image.load( holder.image.load(
PicassoDownloader.createScreenshotUri( CoilDownloader.createScreenshotUri(
item.repository, item.repository,
item.packageName, item.packageName,
item.screenshot item.screenshot
@ -1330,8 +1330,7 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
) { ) {
placeholder(holder.placeholder) placeholder(holder.placeholder)
error(holder.placeholder) error(holder.placeholder)
resize(cellSize, cellSize) size(cellSize)
centerCrop()
} }
} }
ViewType.RELEASE -> { ViewType.RELEASE -> {

View File

@ -15,7 +15,7 @@ import com.looker.droidify.R
import com.looker.droidify.database.Database import com.looker.droidify.database.Database
import com.looker.droidify.entity.ProductItem import com.looker.droidify.entity.ProductItem
import com.looker.droidify.entity.Repository import com.looker.droidify.entity.Repository
import com.looker.droidify.network.PicassoDownloader import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.utility.Utils import com.looker.droidify.utility.Utils
import com.looker.droidify.utility.extension.resources.* import com.looker.droidify.utility.extension.resources.*
import com.looker.droidify.utility.extension.text.nullIfEmpty import com.looker.droidify.utility.extension.text.nullIfEmpty
@ -138,7 +138,7 @@ class ProductsAdapter(private val onClick: (ProductItem) -> Unit) :
val repository: Repository? = repositories[productItem.repositoryId] val repository: Repository? = repositories[productItem.repositoryId]
if ((productItem.icon.isNotEmpty() || productItem.metadataIcon.isNotEmpty()) && repository != null) { if ((productItem.icon.isNotEmpty() || productItem.metadataIcon.isNotEmpty()) && repository != null) {
holder.icon.load( holder.icon.load(
PicassoDownloader.createIconUri( CoilDownloader.createIconUri(
holder.icon, productItem.packageName, holder.icon, productItem.packageName,
productItem.icon, productItem.metadataIcon, repository productItem.icon, productItem.metadataIcon, repository
) )

View File

@ -22,7 +22,7 @@ import com.looker.droidify.database.Database
import com.looker.droidify.entity.Product import com.looker.droidify.entity.Product
import com.looker.droidify.entity.Repository import com.looker.droidify.entity.Repository
import com.looker.droidify.graphics.PaddingDrawable import com.looker.droidify.graphics.PaddingDrawable
import com.looker.droidify.network.PicassoDownloader import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.utility.RxUtils import com.looker.droidify.utility.RxUtils
import com.looker.droidify.utility.extension.android.Android import com.looker.droidify.utility.extension.android.Android
import com.looker.droidify.utility.extension.resources.* import com.looker.droidify.utility.extension.resources.*
@ -256,7 +256,7 @@ class ScreenshotsFragment() : DialogFragment() {
if (width > 0 && height > 0) { if (width > 0 && height > 0) {
repository?.let { repository?.let {
holder.image.load( holder.image.load(
PicassoDownloader.createScreenshotUri( CoilDownloader.createScreenshotUri(
it, it,
packageName, packageName,
screenshot screenshot
@ -264,8 +264,7 @@ class ScreenshotsFragment() : DialogFragment() {
) { ) {
placeholder(holder.placeholder) placeholder(holder.placeholder)
error(holder.placeholder) error(holder.placeholder)
resize(width, height) size(width, height)
centerInside()
} }
} }
} else { } else {

View File

@ -17,9 +17,10 @@ import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import coil.load
import coil.request.ImageRequest
import coil.util.CoilUtils
import com.looker.droidify.utility.extension.android.Android import com.looker.droidify.utility.extension.android.Android
import com.squareup.picasso.Picasso
import com.squareup.picasso.RequestCreator
import org.xmlpull.v1.XmlPullParser import org.xmlpull.v1.XmlPullParser
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -91,10 +92,14 @@ fun ViewGroup.inflate(layoutResId: Int): View {
return LayoutInflater.from(context).inflate(layoutResId, this, false) return LayoutInflater.from(context).inflate(layoutResId, this, false)
} }
fun ImageView.load(uri: Uri, builder: RequestCreator.() -> Unit) { fun ImageView.load(uri: String, builder: ImageRequest.Builder.() -> Unit = {}) {
Picasso.get().load(uri).noFade().apply(builder).into(this) this.load(uri = uri, builder = builder)
}
fun ImageView.load(uri: Uri, builder: ImageRequest.Builder.() -> Unit = {}) {
this.load(uri = uri, builder = builder)
} }
fun ImageView.clear() { fun ImageView.clear() {
Picasso.get().cancelRequest(this) CoilUtils.clear(this)
} }