android: add coil and media3 cache foundation for media
Some checks are pending
CI / test (push) Has started running

This commit is contained in:
Codex
2026-03-09 15:35:28 +03:00
parent 43b772a394
commit ffa2205a30
5 changed files with 74 additions and 2 deletions

View File

@@ -1,13 +1,39 @@
package ru.daemonlord.messenger
import android.app.Application
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.disk.DiskCache
import coil.memory.MemoryCache
import dagger.hilt.android.HiltAndroidApp
import ru.daemonlord.messenger.core.notifications.NotificationChannels
import java.io.File
@HiltAndroidApp
class MessengerApplication : Application() {
class MessengerApplication : Application(), ImageLoaderFactory {
override fun onCreate() {
super.onCreate()
NotificationChannels.ensureCreated(this)
}
override fun newImageLoader(): ImageLoader {
val diskCacheDir = File(cacheDir, "coil_images")
if (!diskCacheDir.exists()) {
diskCacheDir.mkdirs()
}
return ImageLoader.Builder(this)
.memoryCache {
MemoryCache.Builder(this)
.maxSizePercent(0.25)
.build()
}
.diskCache {
DiskCache.Builder()
.directory(diskCacheDir)
.maxSizeBytes(250L * 1024L * 1024L)
.build()
}
.respectCacheHeaders(false)
.build()
}
}

View File

@@ -0,0 +1,37 @@
package ru.daemonlord.messenger.di
import android.content.Context
import androidx.media3.database.StandaloneDatabaseProvider
import androidx.media3.datasource.cache.Cache
import androidx.media3.datasource.cache.LeastRecentlyUsedCacheEvictor
import androidx.media3.datasource.cache.SimpleCache
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import java.io.File
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object MediaCacheModule {
@Provides
@Singleton
fun provideMediaCache(
@ApplicationContext context: Context,
): Cache {
val cacheDir = File(context.cacheDir, "exo_media_cache")
if (!cacheDir.exists()) {
cacheDir.mkdirs()
}
val maxBytes = 200L * 1024L * 1024L
return SimpleCache(
cacheDir,
LeastRecentlyUsedCacheEvictor(maxBytes),
StandaloneDatabaseProvider(context),
)
}
}