commit c8abd8162bfa6da40e3142c432b533455c715fb7 parent 8ad40e11906f44ccf44bbb78fbe400a25c93e925 Author: rhunk <101876869+rhunk@users.noreply.github.com> Date: Tue, 28 May 2024 20:55:03 +0200 pref: locale loading Diffstat:
8 files changed, 46 insertions(+), 35 deletions(-)
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/RemoteAccountStorage.kt b/app/src/main/kotlin/me/rhunk/snapenhance/RemoteAccountStorage.kt @@ -2,7 +2,7 @@ package me.rhunk.snapenhance import android.os.ParcelFileDescriptor import me.rhunk.snapenhance.bridge.AccountStorage -import me.rhunk.snapenhance.core.util.ktx.toParcelFileDescriptor +import me.rhunk.snapenhance.common.util.ktx.toParcelFileDescriptor class RemoteAccountStorage( private val context: RemoteSideContext diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt @@ -15,7 +15,7 @@ import me.rhunk.snapenhance.common.scripting.impl.ConfigTransactionType import me.rhunk.snapenhance.common.scripting.type.ModuleInfo import me.rhunk.snapenhance.common.scripting.type.readModuleInfo import me.rhunk.snapenhance.common.util.ktx.await -import me.rhunk.snapenhance.core.util.ktx.toParcelFileDescriptor +import me.rhunk.snapenhance.common.util.ktx.toParcelFileDescriptor import me.rhunk.snapenhance.scripting.impl.IPCListeners import me.rhunk.snapenhance.scripting.impl.ManagerIPC import me.rhunk.snapenhance.scripting.impl.ManagerScriptConfig diff --git a/common/src/main/aidl/me/rhunk/snapenhance/bridge/BridgeInterface.aidl b/common/src/main/aidl/me/rhunk/snapenhance/bridge/BridgeInterface.aidl @@ -33,7 +33,7 @@ interface BridgeInterface { * * @return the map of locales (key: locale short name, value: locale data as json) */ - Map<String, String> fetchLocales(String userLocale); + Map<String, ParcelFileDescriptor> fetchLocales(String userLocale); /** * Enqueue a download diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/types/LocalePair.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/types/LocalePair.kt @@ -1,10 +1,11 @@ package me.rhunk.snapenhance.common.bridge.types +import android.os.ParcelFileDescriptor import java.util.Locale data class LocalePair( val locale: String, - val content: String + val content: ParcelFileDescriptor ) { fun getLocale(): Locale { if (locale.contains("_")) { diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/LocaleWrapper.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/bridge/wrapper/LocaleWrapper.kt @@ -1,10 +1,14 @@ package me.rhunk.snapenhance.common.bridge.wrapper import android.content.Context +import android.os.ParcelFileDescriptor.AutoCloseInputStream import com.google.gson.JsonObject import com.google.gson.JsonParser +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import me.rhunk.snapenhance.common.bridge.types.LocalePair import me.rhunk.snapenhance.common.logger.AbstractLogger +import me.rhunk.snapenhance.common.util.ktx.toParcelFileDescriptor import java.util.Locale @@ -13,17 +17,21 @@ class LocaleWrapper { const val DEFAULT_LOCALE = "en_US" fun fetchLocales(context: Context, locale: String = DEFAULT_LOCALE): List<LocalePair> { + val coroutineScope = CoroutineScope(Dispatchers.IO) val locales = mutableListOf<LocalePair>().apply { - add(LocalePair(DEFAULT_LOCALE, context.resources.assets.open("lang/$DEFAULT_LOCALE.json").bufferedReader().use { it.readText() })) + add(LocalePair(DEFAULT_LOCALE, context.resources.assets.open("lang/$DEFAULT_LOCALE.json").toParcelFileDescriptor(coroutineScope))) } if (locale == DEFAULT_LOCALE) return locales val compatibleLocale = context.resources.assets.list("lang")?.firstOrNull { it.startsWith(locale) }?.substringBefore(".") ?: return locales - context.resources.assets.open("lang/$compatibleLocale.json").use { inputStream -> - locales.add(LocalePair(compatibleLocale, inputStream.bufferedReader().use { it.readText() })) - } + locales.add( + LocalePair( + compatibleLocale, + context.resources.assets.open("lang/$compatibleLocale.json").toParcelFileDescriptor(coroutineScope) + ) + ) return locales } @@ -42,7 +50,9 @@ class LocaleWrapper { private fun load(localePair: LocalePair) { loadedLocale = localePair.getLocale() - val translations = JsonParser.parseString(localePair.content).asJsonObject + val translations = AutoCloseInputStream(localePair.content).use { + JsonParser.parseReader(it.reader()).asJsonObject + } if (translations == null || translations.isJsonNull) { return } diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/util/ktx/AndroidCompatExtensions.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/util/ktx/AndroidCompatExtensions.kt @@ -5,6 +5,11 @@ import android.content.Context import android.content.pm.PackageManager import android.content.pm.PackageManager.ApplicationInfoFlags import android.os.Build +import android.os.ParcelFileDescriptor +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import java.io.InputStream fun PackageManager.getApplicationInfoCompat(packageName: String, flags: Int) = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { @@ -17,4 +22,21 @@ fun PackageManager.getApplicationInfoCompat(packageName: String, flags: Int) = fun Context.copyToClipboard(data: String, label: String = "Copied Text") { getSystemService(android.content.ClipboardManager::class.java).setPrimaryClip( ClipData.newPlainText(label, data)) -}- \ No newline at end of file +} + +fun InputStream.toParcelFileDescriptor(coroutineScope: CoroutineScope): ParcelFileDescriptor { + val pfd = ParcelFileDescriptor.createPipe() + val fos = ParcelFileDescriptor.AutoCloseOutputStream(pfd[1]) + + coroutineScope.launch(Dispatchers.IO) { + try { + copyTo(fos) + } finally { + close() + fos.flush() + fos.close() + } + } + + return pfd[0] +} diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/AccountSwitcher.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/AccountSwitcher.kt @@ -31,6 +31,7 @@ import me.rhunk.snapenhance.common.data.FileType import me.rhunk.snapenhance.common.ui.AppMaterialTheme import me.rhunk.snapenhance.common.ui.createComposeAlertDialog import me.rhunk.snapenhance.common.ui.createComposeView +import me.rhunk.snapenhance.common.util.ktx.toParcelFileDescriptor import me.rhunk.snapenhance.common.util.snap.MediaDownloaderHelper import me.rhunk.snapenhance.core.event.events.impl.ActivityResultEvent import me.rhunk.snapenhance.core.event.events.impl.AddViewEvent @@ -39,7 +40,6 @@ import me.rhunk.snapenhance.core.features.FeatureLoadParams import me.rhunk.snapenhance.core.util.hook.HookStage import me.rhunk.snapenhance.core.util.hook.hook import me.rhunk.snapenhance.core.util.ktx.getId -import me.rhunk.snapenhance.core.util.ktx.toParcelFileDescriptor import me.rhunk.snapenhance.core.util.ktx.vibrateLongPress import java.io.File import java.util.zip.ZipEntry diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/util/ktx/AndroidExt.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/util/ktx/AndroidExt.kt @@ -6,15 +6,10 @@ import android.content.res.Resources import android.content.res.Resources.Theme import android.content.res.TypedArray import android.graphics.drawable.Drawable -import android.os.ParcelFileDescriptor import android.os.VibrationEffect import android.os.Vibrator import androidx.core.graphics.ColorUtils -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import me.rhunk.snapenhance.common.Constants -import java.io.InputStream @SuppressLint("DiscouragedApi") @@ -60,21 +55,4 @@ fun Context.isDarkTheme(): Boolean { ).getColor(0, 0).let { ColorUtils.calculateLuminance(it) > 0.5 } -} - -fun InputStream.toParcelFileDescriptor(coroutineScope: CoroutineScope): ParcelFileDescriptor { - val pfd = ParcelFileDescriptor.createPipe() - val fos = ParcelFileDescriptor.AutoCloseOutputStream(pfd[1]) - - coroutineScope.launch(Dispatchers.IO) { - try { - copyTo(fos) - } finally { - close() - fos.flush() - fos.close() - } - } - - return pfd[0] -} +}+ \ No newline at end of file