diff --git a/src/main/kotlin/com/looker/droidify/MainApplication.kt b/src/main/kotlin/com/looker/droidify/MainApplication.kt index 0d327b01..9f882828 100644 --- a/src/main/kotlin/com/looker/droidify/MainApplication.kt +++ b/src/main/kotlin/com/looker/droidify/MainApplication.kt @@ -5,11 +5,14 @@ import android.app.Application import android.app.job.JobInfo import android.app.job.JobScheduler import android.content.* +import coil.ImageLoader +import coil.ImageLoaderFactory import com.looker.droidify.content.Cache import com.looker.droidify.content.Preferences import com.looker.droidify.content.ProductPreferences import com.looker.droidify.database.Database import com.looker.droidify.index.RepositoryUpdater +import com.looker.droidify.network.CoilDownloader import com.looker.droidify.network.Downloader import com.looker.droidify.service.Connection import com.looker.droidify.service.SyncService @@ -19,7 +22,7 @@ import java.net.InetSocketAddress import java.net.Proxy @Suppress("unused") -class MainApplication : Application() { +class MainApplication : Application(), ImageLoaderFactory { override fun onCreate() { super.onCreate() @@ -172,4 +175,11 @@ class MainApplication : Application() { @SuppressLint("UnsafeProtectedBroadcastReceiver") override fun onReceive(context: Context, intent: Intent) = Unit } + + override fun newImageLoader(): ImageLoader { + return ImageLoader.Builder(this) + .callFactory(CoilDownloader.Factory(Cache.getImagesDir(this))) + .crossfade(true) + .build() + } } diff --git a/src/main/kotlin/com/looker/droidify/network/PicassoDownloader.kt b/src/main/kotlin/com/looker/droidify/network/CoilDownloader.kt similarity index 99% rename from src/main/kotlin/com/looker/droidify/network/PicassoDownloader.kt rename to src/main/kotlin/com/looker/droidify/network/CoilDownloader.kt index d2c3ecc6..1b15de12 100644 --- a/src/main/kotlin/com/looker/droidify/network/PicassoDownloader.kt +++ b/src/main/kotlin/com/looker/droidify/network/CoilDownloader.kt @@ -13,7 +13,7 @@ import java.io.File import kotlin.math.min import kotlin.math.roundToInt -object PicassoDownloader { +object CoilDownloader { private const val HOST_ICON = "icon" private const val HOST_SCREENSHOT = "screenshot" private const val QUERY_ADDRESS = "address" diff --git a/src/main/kotlin/com/looker/droidify/screen/ProductAdapter.kt b/src/main/kotlin/com/looker/droidify/screen/ProductAdapter.kt index 46e4bc31..72e32dc2 100644 --- a/src/main/kotlin/com/looker/droidify/screen/ProductAdapter.kt +++ b/src/main/kotlin/com/looker/droidify/screen/ProductAdapter.kt @@ -32,6 +32,7 @@ import com.looker.droidify.content.Preferences import com.looker.droidify.content.ProductPreferences import com.looker.droidify.entity.* import com.looker.droidify.graphics.PaddingDrawable +import com.looker.droidify.network.CoilDownloader import com.looker.droidify.utility.KParcelable import com.looker.droidify.utility.PackageItemResolver import com.looker.droidify.utility.Utils @@ -1117,7 +1118,12 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int) val updateAll = !updateStatus if (updateAll) { if (item.product.icon.isNotEmpty() || item.product.metadataIcon.isNotEmpty()) { - holder.icon.load(item.product.icon) { + holder.icon.load( + CoilDownloader.createIconUri( + holder.icon, item.product.packageName, + item.product.icon, item.product.metadataIcon, item.repository + ) + ) { placeholder(holder.progressIcon) error(holder.defaultIcon) } @@ -1315,7 +1321,13 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int) val outer = context.resources.sizeScaled(GRID_SPACING_OUTER_DP) val inner = context.resources.sizeScaled(GRID_SPACING_INNER_DP) val cellSize = (screenWidth - 2 * outer - (columns - 1) * inner) / columns - holder.image.load(item.screenshot.path) { + holder.image.load( + CoilDownloader.createScreenshotUri( + item.repository, + item.packageName, + item.screenshot + ) + ) { placeholder(holder.placeholder) error(holder.placeholder) size(cellSize) diff --git a/src/main/kotlin/com/looker/droidify/screen/ProductsAdapter.kt b/src/main/kotlin/com/looker/droidify/screen/ProductsAdapter.kt index 63b67e53..44edbba7 100644 --- a/src/main/kotlin/com/looker/droidify/screen/ProductsAdapter.kt +++ b/src/main/kotlin/com/looker/droidify/screen/ProductsAdapter.kt @@ -15,7 +15,7 @@ import com.looker.droidify.R import com.looker.droidify.database.Database import com.looker.droidify.entity.ProductItem import com.looker.droidify.entity.Repository -import com.looker.droidify.network.PicassoDownloader +import com.looker.droidify.network.CoilDownloader import com.looker.droidify.utility.Utils import com.looker.droidify.utility.extension.resources.* import com.looker.droidify.utility.extension.text.nullIfEmpty @@ -138,7 +138,7 @@ class ProductsAdapter(private val onClick: (ProductItem) -> Unit) : val repository: Repository? = repositories[productItem.repositoryId] if ((productItem.icon.isNotEmpty() || productItem.metadataIcon.isNotEmpty()) && repository != null) { holder.icon.load( - PicassoDownloader.createIconUri( + CoilDownloader.createIconUri( holder.icon, productItem.packageName, productItem.icon, productItem.metadataIcon, repository ) diff --git a/src/main/kotlin/com/looker/droidify/screen/ScreenshotsFragment.kt b/src/main/kotlin/com/looker/droidify/screen/ScreenshotsFragment.kt index 54802734..b50a4861 100644 --- a/src/main/kotlin/com/looker/droidify/screen/ScreenshotsFragment.kt +++ b/src/main/kotlin/com/looker/droidify/screen/ScreenshotsFragment.kt @@ -22,6 +22,7 @@ import com.looker.droidify.database.Database import com.looker.droidify.entity.Product import com.looker.droidify.entity.Repository import com.looker.droidify.graphics.PaddingDrawable +import com.looker.droidify.network.CoilDownloader import com.looker.droidify.utility.RxUtils import com.looker.droidify.utility.extension.android.Android import com.looker.droidify.utility.extension.resources.* @@ -254,7 +255,13 @@ class ScreenshotsFragment() : DialogFragment() { val (width, height) = size if (width > 0 && height > 0) { repository?.let { - holder.image.load(screenshot.path) { + holder.image.load( + CoilDownloader.createScreenshotUri( + it, + packageName, + screenshot + ) + ) { placeholder(holder.placeholder) error(holder.placeholder) size(width, height)