Use Splitties appCtx

This commit is contained in:
tarsin committed 2023-06-01 15:48:45 +08:00
1 parent 6ea635a1e9
commit 2c30deb298
11 files changed
+38 -42

No files matched your search

+2
View File
@@ -209,6 +209,8 @@ dependencies {
implementation("com.google.accompanist:accompanist-themeadapter-material3:0.30.1")
implementation("com.google.android.material:material:1.9.0")
implementation("com.louiscad.splitties:splitties-appctx:3.0.0")
// https://square.github.io/okhttp/changelogs/changelog/
implementation(platform("com.squareup.okhttp3:okhttp-bom:5.0.0-alpha.11"))
implementation("com.squareup.okhttp3:okhttp-android")
@@ -50,13 +50,13 @@ import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.util.lang.launchIO
import kotlinx.coroutines.DelicateCoroutinesApi
import okio.Path.Companion.toOkioPath
import splitties.init.appCtx
import java.net.Proxy
class EhApplication : Application(), DefaultLifecycleObserver, ImageLoaderFactory {
@OptIn(DelicateCoroutinesApi::class)
override fun onCreate() {
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
application = this
val handler = Thread.getDefaultUncaughtExceptionHandler()
Thread.setDefaultUncaughtExceptionHandler { t, e ->
try {
@@ -149,9 +149,6 @@ class EhApplication : Application(), DefaultLifecycleObserver, ImageLoaderFactor
var locked = true
var locked_last_leave_time: Long = 0
lateinit var application: EhApplication
private set
val ehProxySelector by lazy { EhProxySelector() }
val nonCacheOkHttpClient by lazy {
@@ -170,7 +167,7 @@ class EhApplication : Application(), DefaultLifecycleObserver, ImageLoaderFactor
val okHttpClient by lazy {
httpClient(nonCacheOkHttpClient) {
cache(
application.cacheDir.toOkioPath() / "http_cache",
appCtx.cacheDir.toOkioPath() / "http_cache",
20L * 1024L * 1024L,
)
}
@@ -186,13 +183,13 @@ class EhApplication : Application(), DefaultLifecycleObserver, ImageLoaderFactor
val favouriteStatusRouter by lazy { FavouriteStatusRouter() }
val readerPreferences by lazy { ReaderPreferences(AndroidPreferenceStore(application)) }
val readerPreferences by lazy { ReaderPreferences(AndroidPreferenceStore(appCtx)) }
val ehDatabase by lazy { Room.databaseBuilder(application, EhDatabase::class.java, "eh.db").allowMainThreadQueries().build() }
val ehDatabase by lazy { Room.databaseBuilder(appCtx, EhDatabase::class.java, "eh.db").allowMainThreadQueries().build() }
val imageCache by lazy {
diskCache {
directory(application.cacheDir.toOkioPath() / "image_cache")
directory(appCtx.cacheDir.toOkioPath() / "image_cache")
maxSizeBytes(Settings.readCacheSize.coerceIn(320, 5120).toLong() * 1024 * 1024)
}
}
@@ -16,13 +16,14 @@
package com.hippo.ehviewer
import androidx.annotation.StringRes
import splitties.init.appCtx
object GetText {
fun getString(@StringRes id: Int): String {
return EhApplication.application.getString(id)
return appCtx.getString(id)
}
fun getString(@StringRes id: Int, vararg formatArgs: Any?): String {
return EhApplication.application.getString(id, *formatArgs)
return appCtx.getString(id, *formatArgs)
}
}
@@ -20,12 +20,12 @@ import android.net.Uri
import android.util.Log
import androidx.annotation.DimenRes
import androidx.preference.PreferenceManager
import com.hippo.ehviewer.EhApplication.Companion.application
import com.hippo.ehviewer.client.data.FavListUrlBuilder
import com.hippo.ehviewer.ui.scene.GalleryListScene
import com.hippo.ehviewer.yorozuya.LayoutUtils.dp2pix
import com.hippo.ehviewer.yorozuya.NumberUtils
import com.hippo.unifile.UniFile
import splitties.init.appCtx
import java.util.Locale
object Settings {
@@ -197,7 +197,7 @@ object Settings {
private lateinit var sSettingsPre: SharedPreferences
private var LIST_THUMB_SIZE = 40
fun initialize() {
sSettingsPre = PreferenceManager.getDefaultSharedPreferences(application)
sSettingsPre = PreferenceManager.getDefaultSharedPreferences(appCtx)
fixDefaultValue()
}
@@ -355,7 +355,7 @@ object Settings {
else -> throw IllegalStateException("Unexpected value: $detailSize")
}
val thumbSize: Int
get() = dp2pix(application, thumbSizeDp.toFloat())
get() = dp2pix(appCtx, thumbSizeDp.toFloat())
val thumbSizeDp: Int
get() = getInt(KEY_THUMB_SIZE, DEFAULT_THUMB_SIZE)
@@ -399,7 +399,7 @@ object Settings {
builder.encodedPath(getString(KEY_DOWNLOAD_SAVE_PATH, null))
builder.encodedQuery(getString(KEY_DOWNLOAD_SAVE_QUERY, null))
builder.encodedFragment(getString(KEY_DOWNLOAD_SAVE_FRAGMENT, null))
dir = UniFile.fromUri(application, builder.build())
dir = UniFile.fromUri(appCtx, builder.build())
return dir ?: UniFile.fromFile(AppConfig.getDefaultDownloadDir())
}
@@ -15,7 +15,6 @@
*/
package com.hippo.ehviewer.client
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.network.CookieDatabase
import com.hippo.ehviewer.network.CookieSet
import eu.kanade.tachiyomi.util.lang.launchIO
@@ -23,11 +22,12 @@ import okhttp3.Cookie
import okhttp3.CookieJar
import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrl
import splitties.init.appCtx
import java.util.Collections
import java.util.regex.Pattern
object EhCookieStore : CookieJar {
private val db: CookieDatabase = CookieDatabase(EhApplication.application)
private val db: CookieDatabase = CookieDatabase(appCtx)
private val map: MutableMap<String, CookieSet> = db.allCookies
fun signOut() {
@@ -17,7 +17,6 @@ package com.hippo.ehviewer.client
import android.content.Context
import com.hippo.ehviewer.AppConfig
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.EhApplication.Companion.nonCacheOkHttpClient
import com.hippo.ehviewer.R
import com.hippo.ehviewer.yorozuya.FileUtils
@@ -39,6 +38,7 @@ import okio.blackholeSink
import okio.buffer
import okio.source
import org.json.JSONObject
import splitties.init.appCtx
import java.io.File
import java.nio.charset.StandardCharsets
@@ -204,7 +204,7 @@ object EhTagDatabase : CoroutineScope {
private suspend fun issueUpdateInMemoryData() {
dbLock.withLock {
getMetadata(EhApplication.application)?.let { urls ->
getMetadata(appCtx)?.let { urls ->
val dataName = urls[2]
val dir = AppConfig.getFilesDir("tag-translations")
val dataFile = File(dir, dataName).takeIf { it.exists() } ?: return
@@ -224,7 +224,7 @@ object EhTagDatabase : CoroutineScope {
}
private suspend fun updateInternal() {
val urls = getMetadata(EhApplication.application)
val urls = getMetadata(appCtx)
urls?.let {
val sha1Name = urls[0]
val sha1Url = urls[1]
@@ -14,12 +14,12 @@ import androidx.work.PeriodicWorkRequest
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.WorkerParameters
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhCookieStore
import com.hippo.ehviewer.client.EhEngine
import eu.kanade.tachiyomi.util.lang.withIOContext
import splitties.init.appCtx
import java.time.Duration
import java.time.Instant
import java.time.LocalDateTime
@@ -98,14 +98,13 @@ fun showEventNotification(html: String) {
if (Settings.hideHvEvents && html.contains("You have encountered a monster!")) {
return
}
val context = EhApplication.application
val notificationManager = NotificationManagerCompat.from(context)
val notificationManager = NotificationManagerCompat.from(appCtx)
val chan = NotificationChannelCompat
.Builder(CHANNEL_ID, NotificationManagerCompat.IMPORTANCE_LOW)
.setName(CHANNEL_ID)
.build()
notificationManager.createNotificationChannel(chan)
val msg = NotificationCompat.Builder(context, CHANNEL_ID)
val msg = NotificationCompat.Builder(appCtx, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_launcher_monochrome)
.setContentText(Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY))
.setStyle(NotificationCompat.BigTextStyle())
@@ -27,6 +27,7 @@ import android.graphics.drawable.Drawable
import android.os.Build
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.R
import splitties.init.appCtx
import java.nio.ByteBuffer
import kotlin.math.min
@@ -66,8 +67,7 @@ class Image private constructor(private val src: CloseableSource) {
).coerceAtLeast(1)
}
private val imageSearchMaxSize =
EhApplication.application.resources.getDimensionPixelOffset(R.dimen.image_search_max_size)
private val imageSearchMaxSize = appCtx.resources.getDimensionPixelOffset(R.dimen.image_search_max_size)
@JvmStatic
val imageSearchDecoderSampleListener =
@@ -76,14 +76,11 @@ class Image private constructor(private val src: CloseableSource) {
calculateSampleSize(info, imageSearchMaxSize, imageSearchMaxSize),
)
}
val screenWidth = EhApplication.application.resources.displayMetrics.widthPixels
val screenHeight = EhApplication.application.resources.displayMetrics.heightPixels
val isWideColorGamut =
EhApplication.application.resources.configuration.isScreenWideColorGamut
val screenWidth = appCtx.resources.displayMetrics.widthPixels
val screenHeight = appCtx.resources.displayMetrics.heightPixels
val isWideColorGamut = appCtx.resources.configuration.isScreenWideColorGamut
var colorSpace = ColorSpace.get(
if (isWideColorGamut && EhApplication.readerPreferences.wideColorGamut()
.get()
) {
if (isWideColorGamut && EhApplication.readerPreferences.wideColorGamut().get()) {
ColorSpace.Named.DISPLAY_P3
} else {
ColorSpace.Named.SRGB
@@ -16,8 +16,8 @@
package com.hippo.ehviewer.network
import android.util.SparseArray
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.R
import splitties.init.appCtx
class StatusCodeException(val responseCode: Int) : Exception() {
override val message: String = ERROR_MESSAGE_ARRAY[responseCode, DEFAULT_ERROR_MESSAGE]
@@ -34,7 +34,7 @@ class StatusCodeException(val responseCode: Int) : Exception() {
private const val DEFAULT_ERROR_MESSAGE = "Error response code"
init {
val resources = EhApplication.application.resources
val resources = appCtx.resources
ERROR_MESSAGE_ARRAY.append(400, resources.getString(R.string.error_status_code_400))
ERROR_MESSAGE_ARRAY.append(401, resources.getString(R.string.error_status_code_401))
ERROR_MESSAGE_ARRAY.append(402, resources.getString(R.string.error_status_code_402))
@@ -1,7 +1,6 @@
package com.hippo.ehviewer.spider
import coil.disk.DiskCache
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.coil.diskCache
import com.hippo.ehviewer.coil.edit
import com.hippo.ehviewer.coil.read
import com.hippo.ehviewer.legacy.readLegacySpiderInfo
@@ -13,6 +12,7 @@ import kotlinx.serialization.cbor.Cbor
import kotlinx.serialization.decodeFromByteArray
import kotlinx.serialization.encodeToByteArray
import moe.tarsin.coroutines.runSuspendCatching
import splitties.init.appCtx
import java.io.File
@Serializable
@@ -49,9 +49,10 @@ fun SpiderInfo.saveToCache() {
}
private val spiderInfoCache by lazy {
DiskCache.Builder()
.directory(File(EhApplication.application.cacheDir, "spider_info_v2_1"))
.maxSizeBytes(20 * 1024 * 1024).build()
diskCache {
directory(File(appCtx.cacheDir, "spider_info_v2_1"))
maxSizeBytes(20 * 1024 * 1024)
}
}
fun readFromCache(gid: Long): SpiderInfo? {
@@ -20,7 +20,6 @@ import androidx.room.Room
import com.google.android.material.search.SearchView
import com.google.android.material.search.SearchView.TransitionListener
import com.google.android.material.shape.MaterialShapeDrawable
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhTagDatabase
@@ -31,10 +30,10 @@ import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.withUIContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import splitties.init.appCtx
private val searchDatabase by lazy {
val context = EhApplication.application
Room.databaseBuilder(context, SearchDatabase::class.java, "search_database.db").build()
Room.databaseBuilder(appCtx, SearchDatabase::class.java, "search_database.db").build()
}
abstract class SearchBarScene : BaseScene(), ToolBarScene {