Moves image cache to the Application class
This commit is contained in:
@@ -1,24 +1,35 @@
|
|||||||
package com.vitorpamplona.amethyst
|
package com.vitorpamplona.amethyst
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
import android.content.Context
|
||||||
import android.os.StrictMode
|
import android.os.StrictMode
|
||||||
import android.os.StrictMode.ThreadPolicy
|
import android.os.StrictMode.ThreadPolicy
|
||||||
import android.os.StrictMode.VmPolicy
|
import android.os.StrictMode.VmPolicy
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import coil.ImageLoader
|
import coil.ImageLoader
|
||||||
|
import coil.disk.DiskCache
|
||||||
import com.vitorpamplona.amethyst.service.playback.VideoCache
|
import com.vitorpamplona.amethyst.service.playback.VideoCache
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import java.io.File
|
||||||
import kotlin.time.measureTimedValue
|
import kotlin.time.measureTimedValue
|
||||||
|
|
||||||
class Amethyst : Application() {
|
class Amethyst : Application() {
|
||||||
val videoCache: VideoCache by lazy {
|
val videoCache: VideoCache by lazy {
|
||||||
val newCache = VideoCache()
|
val newCache = VideoCache()
|
||||||
newCache.initFileCache(instance)
|
newCache.initFileCache(this)
|
||||||
newCache
|
newCache
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val imageCache: DiskCache by lazy {
|
||||||
|
DiskCache.Builder()
|
||||||
|
.directory(applicationContext.safeCacheDir.resolve("image_cache"))
|
||||||
|
.maxSizePercent(0.2)
|
||||||
|
.maximumMaxSizeBytes(500L * 1024 * 1024) // 250MB
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
instance = this
|
instance = this
|
||||||
@@ -48,9 +59,7 @@ class Amethyst : Application() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun imageLoaderBuilder(): ImageLoader.Builder {
|
fun imageLoaderBuilder(): ImageLoader.Builder {
|
||||||
return ImageLoader.Builder(applicationContext).diskCache {
|
return ImageLoader.Builder(applicationContext).diskCache { imageCache }
|
||||||
SingletonDiskCache.get(applicationContext)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -58,3 +67,9 @@ class Amethyst : Application() {
|
|||||||
private set
|
private set
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal val Context.safeCacheDir: File
|
||||||
|
get() {
|
||||||
|
val cacheDir = checkNotNull(cacheDir) { "cacheDir == null" }
|
||||||
|
return cacheDir.apply { mkdirs() }
|
||||||
|
}
|
||||||
|
|||||||
@@ -189,28 +189,3 @@ object ServiceManager {
|
|||||||
forceRestart(null, false, true)
|
forceRestart(null, false, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object SingletonDiskCache {
|
|
||||||
|
|
||||||
private const val DIRECTORY = "image_cache"
|
|
||||||
private var instance: DiskCache? = null
|
|
||||||
|
|
||||||
@Synchronized
|
|
||||||
fun get(context: Context): DiskCache {
|
|
||||||
return instance ?: run {
|
|
||||||
// Create the singleton disk cache instance.
|
|
||||||
DiskCache.Builder()
|
|
||||||
.directory(context.safeCacheDir.resolve(DIRECTORY))
|
|
||||||
.maxSizePercent(0.2)
|
|
||||||
.maximumMaxSizeBytes(500L * 1024 * 1024) // 250MB
|
|
||||||
.build()
|
|
||||||
.also { instance = it }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal val Context.safeCacheDir: File
|
|
||||||
get() {
|
|
||||||
val cacheDir = checkNotNull(cacheDir) { "cacheDir == null" }
|
|
||||||
return cacheDir.apply { mkdirs() }
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import android.graphics.drawable.Drawable
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import androidx.compose.runtime.Stable
|
import androidx.compose.runtime.Stable
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableIntStateOf
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
@@ -85,7 +85,7 @@ class ResourceToastMsg(val titleResId: Int, val resourceId: Int) : ToastMsg()
|
|||||||
class AccountViewModel(val account: Account, val settings: SettingsState) : ViewModel(), Dao {
|
class AccountViewModel(val account: Account, val settings: SettingsState) : ViewModel(), Dao {
|
||||||
val accountLiveData: LiveData<AccountState> = account.live.map { it }
|
val accountLiveData: LiveData<AccountState> = account.live.map { it }
|
||||||
val accountLanguagesLiveData: LiveData<AccountState> = account.liveLanguages.map { it }
|
val accountLanguagesLiveData: LiveData<AccountState> = account.liveLanguages.map { it }
|
||||||
val accountMarkAsReadUpdates = mutableStateOf(0)
|
val accountMarkAsReadUpdates = mutableIntStateOf(0)
|
||||||
|
|
||||||
val userFollows: LiveData<UserState> = account.userProfile().live().follows.map { it }
|
val userFollows: LiveData<UserState> = account.userProfile().live().follows.map { it }
|
||||||
val userRelays: LiveData<UserState> = account.userProfile().live().relays.map { it }
|
val userRelays: LiveData<UserState> = account.userProfile().live().relays.map { it }
|
||||||
|
|||||||
Reference in New Issue
Block a user