diff --git a/app/build.gradle b/app/build.gradle index 79afc18..ddf68d2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -137,11 +137,8 @@ dependencies { // https://github.com/Kotlin/kotlinx-datetime/releases implementation "org.jetbrains.kotlinx:kotlinx-datetime:0.3.1" - // https://github.com/bumptech/glide/releases - def glide_version = "4.12.0" - 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/square/picasso/releases + implementation "com.squareup.picasso:picasso:2.8" // https://github.com/junit-team/junit4/releases testImplementation "junit:junit:4.13.2" diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/UiModule.kt b/app/src/main/java/gq/kirmanak/mealient/ui/UiModule.kt index d60601a..8cbb087 100644 --- a/app/src/main/java/gq/kirmanak/mealient/ui/UiModule.kt +++ b/app/src/main/java/gq/kirmanak/mealient/ui/UiModule.kt @@ -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() + } } \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/glide/ImageLoaderGlide.kt b/app/src/main/java/gq/kirmanak/mealient/ui/glide/ImageLoaderGlide.kt deleted file mode 100644 index 3db5c8c..0000000 --- a/app/src/main/java/gq/kirmanak/mealient/ui/glide/ImageLoaderGlide.kt +++ /dev/null @@ -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) - } -} \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/glide/MainGlideModule.kt b/app/src/main/java/gq/kirmanak/mealient/ui/glide/MainGlideModule.kt deleted file mode 100644 index c3131bf..0000000 --- a/app/src/main/java/gq/kirmanak/mealient/ui/glide/MainGlideModule.kt +++ /dev/null @@ -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() \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/picasso/ImageLoaderPicasso.kt b/app/src/main/java/gq/kirmanak/mealient/ui/picasso/ImageLoaderPicasso.kt new file mode 100644 index 0000000..9b44c67 --- /dev/null +++ b/app/src/main/java/gq/kirmanak/mealient/ui/picasso/ImageLoaderPicasso.kt @@ -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) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/gq/kirmanak/mealient/ui/picasso/PicassoBuilder.kt b/app/src/main/java/gq/kirmanak/mealient/ui/picasso/PicassoBuilder.kt new file mode 100644 index 0000000..4ccc879 --- /dev/null +++ b/app/src/main/java/gq/kirmanak/mealient/ui/picasso/PicassoBuilder.kt @@ -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() + } +} \ No newline at end of file