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

@@ -137,11 +137,8 @@ dependencies {
// https://github.com/Kotlin/kotlinx-datetime/releases // https://github.com/Kotlin/kotlinx-datetime/releases
implementation "org.jetbrains.kotlinx:kotlinx-datetime:0.3.1" implementation "org.jetbrains.kotlinx:kotlinx-datetime:0.3.1"
// https://github.com/bumptech/glide/releases // https://github.com/square/picasso/releases
def glide_version = "4.12.0" implementation "com.squareup.picasso:picasso:2.8"
implementation "com.github.bumptech.glide:glide:$glide_version"
implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version"
kapt "com.github.bumptech.glide:compiler:$glide_version"
// https://github.com/junit-team/junit4/releases // https://github.com/junit-team/junit4/releases
testImplementation "junit:junit:4.13.2" testImplementation "junit:junit:4.13.2"

View File

@@ -1,14 +1,24 @@
package gq.kirmanak.mealient.ui package gq.kirmanak.mealient.ui
import com.squareup.picasso.Picasso
import dagger.Binds import dagger.Binds
import dagger.Module import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent 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 @Module
@InstallIn(SingletonComponent::class) @InstallIn(SingletonComponent::class)
interface UiModule { interface UiModule {
@Binds @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()
}
}