Replace Glide with Picasso (#19)
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user