Don't use reflection for handling backup options as boolean array

Wasn't working correctly in release build, _probably_ because of R8 despite kotlin-reflect
shipping with Proguard rules and us already keeping all Tachiyomi classes.

(cherry picked from commit 6ab8e1e73dbcc65d693dd2ed2680c950139dadde)
This commit is contained in:
arkon
2023-12-30 20:29:12 -05:00
committed by Jobobby04
parent 0432f4105e
commit f27b8b2ded
8 changed files with 52 additions and 97 deletions
@@ -32,7 +32,6 @@ import eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob
import eu.kanade.tachiyomi.data.backup.restore.RestoreOptions
import eu.kanade.tachiyomi.util.system.DeviceUtil
import kotlinx.coroutines.flow.update
import tachiyomi.core.util.lang.anyEnabled
import tachiyomi.i18n.MR
import tachiyomi.presentation.core.components.LabeledCheckbox
import tachiyomi.presentation.core.components.LazyColumnWithAction
@@ -24,8 +24,6 @@ import eu.kanade.tachiyomi.util.system.isRunning
import eu.kanade.tachiyomi.util.system.setForegroundSafely
import eu.kanade.tachiyomi.util.system.workManager
import logcat.LogPriority
import tachiyomi.core.util.lang.asBooleanArray
import tachiyomi.core.util.lang.asDataClass
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.backup.service.BackupPreferences
import tachiyomi.domain.storage.service.StorageManager
@@ -49,7 +47,7 @@ class BackupCreateJob(private val context: Context, workerParams: WorkerParamete
setForegroundSafely()
val options: BackupOptions = inputData.getBooleanArray(OPTIONS_KEY)?.asDataClass()
val options = inputData.getBooleanArray(OPTIONS_KEY)?.let { BackupOptions.fromBooleanArray(it) }
?: BackupOptions()
return try {
@@ -20,6 +20,21 @@ data class BackupOptions(
// SY <--
) {
fun asBooleanArray() = booleanArrayOf(
libraryEntries,
categories,
chapters,
tracking,
history,
appSettings,
sourceSettings,
privateSettings,
// SY -->
customInfo,
readEntries,
// SY <--
)
companion object {
val libraryOptions = persistentListOf(
Entry(
@@ -85,6 +100,21 @@ data class BackupOptions(
enabled = { it.appSettings || it.sourceSettings },
),
)
fun fromBooleanArray(array: BooleanArray) = BackupOptions(
libraryEntries = array[0],
categories = array[1],
chapters = array[2],
tracking = array[3],
history = array[4],
appSettings = array[5],
sourceSettings = array[6],
privateSettings = array[7],
// SY -->
customInfo = array[8],
readEntries = array[9],
// SY <--
)
}
data class Entry(
@@ -20,8 +20,6 @@ import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.coroutines.CancellationException
import logcat.LogPriority
import tachiyomi.core.i18n.stringResource
import tachiyomi.core.util.lang.asBooleanArray
import tachiyomi.core.util.lang.asDataClass
import tachiyomi.core.util.system.logcat
import tachiyomi.i18n.MR
@@ -32,7 +30,7 @@ class BackupRestoreJob(private val context: Context, workerParams: WorkerParamet
override suspend fun doWork(): Result {
val uri = inputData.getString(LOCATION_URI_KEY)?.toUri()
val options: RestoreOptions? = inputData.getBooleanArray(OPTIONS_KEY)?.asDataClass()
val options = inputData.getBooleanArray(OPTIONS_KEY)?.let { RestoreOptions.fromBooleanArray(it) }
if (uri == null || options == null) {
return Result.failure()
@@ -14,6 +14,17 @@ data class RestoreOptions(
// SY <--
) {
fun asBooleanArray() = booleanArrayOf(
library,
appSettings,
sourceSettings,
// SY -->
savedSearches
// SY <--
)
fun anyEnabled() = library || appSettings || sourceSettings /* SY --> */ || savedSearches /* SY <-- */
companion object {
val options = persistentListOf(
Entry(
@@ -39,6 +50,15 @@ data class RestoreOptions(
),
// SY <--
)
fun fromBooleanArray(array: BooleanArray) = RestoreOptions(
library = array[0],
appSettings = array[1],
sourceSettings = array[2],
// SY -->
savedSearches = array[3]
// SY <--
)
}
data class Entry(