android: use AsyncImage for images

* Coil recommends using clip instead of CircleCropTransformation for compose.
* Enable crossfade by default
* Allow caching images
* Run spotlessApply

Closes #320

Signed-off-by: Rahul Krishna <Rahulkrishna585@gmail.com>
This commit is contained in:
Rahul Krishna 2022-05-07 14:01:19 +05:30 committed by Harsh Shandilya
parent bb2213ff86
commit 642484a9a9
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
4 changed files with 29 additions and 19 deletions

View file

@ -35,6 +35,7 @@ dependencies {
implementation(libs.androidx.lifecycle.compose)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.paging.compose)
implementation(libs.coil)
implementation(libs.copydown)
implementation(libs.dagger.hilt.android)
implementation(libs.material.motion.core)

View file

@ -5,11 +5,15 @@ import android.os.StrictMode
import android.util.Log
import androidx.hilt.work.HiltWorkerFactory
import androidx.work.Configuration
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.disk.DiskCache
import coil.memory.MemoryCache
import dagger.hilt.android.HiltAndroidApp
import javax.inject.Inject
@HiltAndroidApp
class ClawApplication : Application(), Configuration.Provider {
class ClawApplication : Application(), Configuration.Provider, ImageLoaderFactory {
@Inject lateinit var workerFactory: HiltWorkerFactory
override fun onCreate() {
@ -26,4 +30,18 @@ class ClawApplication : Application(), Configuration.Provider {
.setWorkerFactory(workerFactory)
.build()
}
override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(this)
.memoryCache { MemoryCache.Builder(this).maxSizePercent(0.25).build() }
.diskCache {
DiskCache.Builder()
.directory(cacheDir.resolve("image_cache"))
.maxSizeBytes(25L * 1024 * 1024) // 25 MB
.build()
}
// Show a short crossfade when loading images asynchronously.
.crossfade(true)
.build()
}
}