Replace Glide with Picasso (#19)

This commit is contained in:
Kirill Kamakin
2021-11-28 16:41:21 +03:00
committed by GitHub
parent cc2fb77269
commit b5249e4bf6
6 changed files with 68 additions and 30 deletions

View File

@@ -1,14 +1,24 @@
package gq.kirmanak.mealient.ui
import com.squareup.picasso.Picasso
import dagger.Binds
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import gq.kirmanak.mealient.ui.glide.ImageLoaderGlide
import gq.kirmanak.mealient.ui.picasso.ImageLoaderPicasso
import gq.kirmanak.mealient.ui.picasso.PicassoBuilder
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
interface UiModule {
@Binds
fun bindImageLoader(imageLoaderGlide: ImageLoaderGlide): ImageLoader
fun bindImageLoader(imageLoaderGlide: ImageLoaderPicasso): ImageLoader
companion object {
@Provides
@Singleton
fun providePicasso(picassoBuilder: PicassoBuilder): Picasso = picassoBuilder.buildPicasso()
}
}

View File

@@ -1,16 +0,0 @@
package gq.kirmanak.mealient.ui.glide
import android.widget.ImageView
import androidx.annotation.DrawableRes
import gq.kirmanak.mealient.ui.ImageLoader
import javax.inject.Inject
class ImageLoaderGlide @Inject constructor() : ImageLoader {
override fun loadImage(url: String?, @DrawableRes placeholderId: Int, imageView: ImageView) {
GlideApp.with(imageView)
.load(url)
.centerCrop()
.placeholder(placeholderId)
.into(imageView)
}
}

View File

@@ -1,7 +0,0 @@
package gq.kirmanak.mealient.ui.glide
import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.module.AppGlideModule
@GlideModule
class MainGlideModule : AppGlideModule()

View File

@@ -0,0 +1,24 @@
package gq.kirmanak.mealient.ui.picasso
import android.widget.ImageView
import com.squareup.picasso.Picasso
import gq.kirmanak.mealient.ui.ImageLoader
import timber.log.Timber
import javax.inject.Inject
class ImageLoaderPicasso @Inject constructor(
private val picasso: Picasso
) : ImageLoader {
override fun loadImage(url: String?, placeholderId: Int, imageView: ImageView) {
Timber.v("loadImage() called with: url = $url, placeholderId = $placeholderId, imageView = $imageView")
val width = imageView.measuredWidth
val height = imageView.measuredHeight
Timber.d("loadImage: width = $width, height = $height")
picasso.load(url).apply {
placeholder(placeholderId)
if (width > 0 && height > 0) resize(width, height).centerCrop()
into(imageView)
}
}
}

View File

@@ -0,0 +1,30 @@
package gq.kirmanak.mealient.ui.picasso
import android.content.Context
import com.squareup.picasso.OkHttp3Downloader
import com.squareup.picasso.Picasso
import dagger.hilt.android.qualifiers.ApplicationContext
import gq.kirmanak.mealient.BuildConfig
import okhttp3.OkHttpClient
import timber.log.Timber
import javax.inject.Inject
class PicassoBuilder @Inject constructor(
@ApplicationContext private val context: Context,
private val okHttpClient: OkHttpClient
) {
fun buildPicasso(): Picasso {
Timber.v("buildPicasso() called")
val builder = Picasso.Builder(context)
builder.downloader(OkHttp3Downloader(okHttpClient))
if (BuildConfig.DEBUG) {
builder.loggingEnabled(true)
builder.indicatorsEnabled(true)
builder.listener { _, uri, exception ->
Timber.tag("Picasso").e(exception, "Can't load from $uri")
}
}
return builder.build()
}
}