From 34a364fca10d7017c62eff114c116ca5b6997093 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sat, 25 Sep 2021 03:57:57 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/common/images/Picasso.kt | 23 +++++++++++++++++++ .../com/tangem/tap/domain/UrlBitmapLoader.kt | 15 +++++++----- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/images/Picasso.kt b/app/src/main/java/com/tangem/tap/common/images/Picasso.kt index df364efdb7..7d2a956bde 100644 --- a/app/src/main/java/com/tangem/tap/common/images/Picasso.kt +++ b/app/src/main/java/com/tangem/tap/common/images/Picasso.kt @@ -3,9 +3,12 @@ package com.tangem.tap.common.images import android.app.Application import com.squareup.picasso.OkHttp3Downloader import com.squareup.picasso.Picasso +import com.tangem.wallet.BuildConfig import okhttp3.Cache import okhttp3.CacheControl import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import timber.log.Timber import java.io.File import java.util.concurrent.TimeUnit @@ -17,6 +20,7 @@ class PicassoHelper { val picasso = Picasso.Builder(application) .downloader(OkHttp3Downloader(getOkHttpForPicasso(application))) .build() + picasso.isLoggingEnabled = BuildConfig.DEBUG Picasso.setSingletonInstance(picasso) } @@ -24,6 +28,7 @@ class PicassoHelper { val okHttpBuilder = OkHttpClient.Builder() okHttpBuilder.cache(Cache(File(application.filesDir, "artworks"), Long.MAX_VALUE)) okHttpBuilder.callTimeout(15000, TimeUnit.MILLISECONDS) + okHttpBuilder.addInterceptor { chain -> val cacheControl = CacheControl.Builder() .maxStale(KEEP_CACHE_MAX_DAYS, TimeUnit.DAYS) @@ -34,7 +39,25 @@ class PicassoHelper { .build() chain.proceed(neverExpireRequest) } + addDebugInterceptors(okHttpBuilder) + return okHttpBuilder.build() } + + private fun addDebugInterceptors(okHttpBuilder: OkHttpClient.Builder) { + if (!BuildConfig.DEBUG) return + + val picassoInterceptor = HttpLoggingInterceptor(PicassoOkHttpLogger()).apply { + level = HttpLoggingInterceptor.Level.BODY + } + okHttpBuilder.addInterceptor(picassoInterceptor) + } + + } +} + +private class PicassoOkHttpLogger : HttpLoggingInterceptor.Logger { + override fun log(message: String) { + Timber.d(message) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/UrlBitmapLoader.kt b/app/src/main/java/com/tangem/tap/domain/UrlBitmapLoader.kt index 1f4897a487..fe202ed0ca 100644 --- a/app/src/main/java/com/tangem/tap/domain/UrlBitmapLoader.kt +++ b/app/src/main/java/com/tangem/tap/domain/UrlBitmapLoader.kt @@ -5,38 +5,41 @@ import android.graphics.drawable.Drawable import com.squareup.picasso.Picasso import com.squareup.picasso.Target import com.tangem.common.services.Result -import timber.log.Timber /** [REDACTED_AUTHOR] */ class UrlBitmapLoader { - fun loadBitmap(url: String, callback: (Result) -> Unit) { - Picasso.get().load(url).into(DownloadTarget(callback)) + val target = DownloadTarget(callback) + protectedFromGarbageCollectorTargets.add(target) + Picasso.get().load(url).into(target) } fun loadBitmap(url: String, target: DownloadTarget) { + protectedFromGarbageCollectorTargets.add(target) Picasso.get().load(url).into(target) } + } +private val protectedFromGarbageCollectorTargets = mutableListOf() + // It adds the ability to trigger multiple downloads with a unique callback. open class DownloadTarget( val callback: (Result) -> Unit, ) : Target { override fun onBitmapLoaded(bitmap: Bitmap, from: Picasso.LoadedFrom) { - Timber.d("onBitmapLoaded") callback(Result.Success(bitmap)) + protectedFromGarbageCollectorTargets.remove(this) } override fun onBitmapFailed(e: java.lang.Exception?, errorDrawable: Drawable?) { - Timber.d("onBitmapFailed") callback.invoke(Result.Failure(e)) + protectedFromGarbageCollectorTargets.remove(this) } override fun onPrepareLoad(placeHolderDrawable: Drawable?) { - Timber.d("onPrepareLoad") } } \ No newline at end of file