From 2c30deb2984d45b1adb249725366cf230f4ae58c Mon Sep 17 00:00:00 2001 From: tarsin Date: Thu, 1 Jun 2023 15:48:45 +0800 Subject: [PATCH] Use Splitties appCtx --- app/build.gradle.kts | 2 ++ .../main/java/com/hippo/ehviewer/EhApplication.kt | 13 +++++-------- app/src/main/java/com/hippo/ehviewer/GetText.kt | 5 +++-- app/src/main/java/com/hippo/ehviewer/Settings.kt | 8 ++++---- .../com/hippo/ehviewer/client/EhCookieStore.kt | 4 ++-- .../com/hippo/ehviewer/client/EhTagDatabase.kt | 6 +++--- .../hippo/ehviewer/dailycheck/DailyCheckWork.kt | 7 +++---- .../main/java/com/hippo/ehviewer/image/Image.kt | 15 ++++++--------- .../hippo/ehviewer/network/StatusCodeException.kt | 4 ++-- .../java/com/hippo/ehviewer/spider/SpiderInfo.kt | 11 ++++++----- .../com/hippo/ehviewer/ui/scene/SearchBarScene.kt | 5 ++--- 11 files changed, 38 insertions(+), 42 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index aca13dcb0..a4dddb70c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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") diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt index 93d46fcd3..768a86279 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt @@ -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) } } diff --git a/app/src/main/java/com/hippo/ehviewer/GetText.kt b/app/src/main/java/com/hippo/ehviewer/GetText.kt index 289399cd2..57f7e41f8 100644 --- a/app/src/main/java/com/hippo/ehviewer/GetText.kt +++ b/app/src/main/java/com/hippo/ehviewer/GetText.kt @@ -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) } } diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.kt b/app/src/main/java/com/hippo/ehviewer/Settings.kt index 64c519f3c..94b36ce29 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/java/com/hippo/ehviewer/Settings.kt @@ -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()) } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt index 52948dfa2..fe831122e 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhCookieStore.kt @@ -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 = db.allCookies fun signOut() { diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhTagDatabase.kt b/app/src/main/java/com/hippo/ehviewer/client/EhTagDatabase.kt index 582d18eb9..0068df3ec 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhTagDatabase.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhTagDatabase.kt @@ -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] diff --git a/app/src/main/java/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt b/app/src/main/java/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt index 57f4db14e..140c37cd8 100644 --- a/app/src/main/java/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt +++ b/app/src/main/java/com/hippo/ehviewer/dailycheck/DailyCheckWork.kt @@ -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()) diff --git a/app/src/main/java/com/hippo/ehviewer/image/Image.kt b/app/src/main/java/com/hippo/ehviewer/image/Image.kt index 97f04f163..3c655b84a 100644 --- a/app/src/main/java/com/hippo/ehviewer/image/Image.kt +++ b/app/src/main/java/com/hippo/ehviewer/image/Image.kt @@ -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 diff --git a/app/src/main/java/com/hippo/ehviewer/network/StatusCodeException.kt b/app/src/main/java/com/hippo/ehviewer/network/StatusCodeException.kt index 4aea870eb..b9656a7a4 100644 --- a/app/src/main/java/com/hippo/ehviewer/network/StatusCodeException.kt +++ b/app/src/main/java/com/hippo/ehviewer/network/StatusCodeException.kt @@ -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)) diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt index 77d51fcfc..8b82200e2 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderInfo.kt @@ -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? { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt index 2b294ca63..9717b1e7e 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SearchBarScene.kt @@ -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 {