From 9dd74f1f2234c8cfbd2ec255983ff760cab89b36 Mon Sep 17 00:00:00 2001 From: Ax333l Date: Tue, 27 Jun 2023 15:05:31 +0200 Subject: [PATCH] feat: experimental patches setting --- .../domain/manager/PreferencesManager.kt | 3 +- .../ui/screen/PatchesSelectorScreen.kt | 4 +- .../screen/settings/GeneralSettingsScreen.kt | 52 ++++++++++++++----- .../ui/viewmodel/PatchesSelectorViewModel.kt | 6 ++- app/src/main/res/values/strings.xml | 3 ++ 5 files changed, 49 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt b/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt index 93eb4d7b..1c5d11aa 100644 --- a/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt +++ b/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt @@ -12,7 +12,8 @@ class PreferencesManager( ) : BasePreferenceManager(sharedPreferences) { var dynamicColor by booleanPreference("dynamic_color", true) var theme by enumPreference("theme", Theme.SYSTEM) - //var sentry by booleanPreference("sentry", true) + + var allowExperimental by booleanPreference("allow_experimental", false) var keystoreCommonName by stringPreference("keystore_cn", KeystoreManager.DEFAULT) var keystorePass by stringPreference("keystore_pass", KeystoreManager.DEFAULT) diff --git a/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt index e6698d53..4f04057f 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt @@ -51,8 +51,6 @@ import app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel.Companion.SHOW import app.revanced.manager.util.PatchesSelection import kotlinx.coroutines.launch -const val allowUnsupported = false - @OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) @Composable fun PatchesSelectorScreen( @@ -206,7 +204,7 @@ fun PatchesSelectorScreen( patchList( patches = bundle.unsupported, filterFlag = SHOW_UNSUPPORTED, - supported = allowUnsupported + supported = vm.allowExperimental ) { ListHeader( title = stringResource(R.string.unsupported_patches), diff --git a/app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt index 3db1850b..0302502b 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt @@ -1,6 +1,7 @@ package app.revanced.manager.ui.screen.settings import android.os.Build +import androidx.annotation.StringRes import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -65,24 +66,27 @@ fun GeneralSettingsScreen( } ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - ListItem( - modifier = Modifier.clickable { prefs.dynamicColor = !prefs.dynamicColor }, - headlineContent = { Text(stringResource(R.string.dynamic_color)) }, - supportingContent = { Text(stringResource(R.string.dynamic_color_description)) }, - trailingContent = { - Switch( - checked = prefs.dynamicColor, - onCheckedChange = { prefs.dynamicColor = it }) - } + BooleanItem( + value = prefs.dynamicColor, + onValueChange = { prefs.dynamicColor = it }, + headline = R.string.dynamic_color, + description = R.string.dynamic_color_description ) } + GroupHeader(stringResource(R.string.patcher)) + BooleanItem( + value = prefs.allowExperimental, + onValueChange = { prefs.allowExperimental = it }, + headline = R.string.experimental_patches, + description = R.string.experimental_patches_description + ) } } } @Composable -fun ThemePicker( +private fun ThemePicker( onDismiss: () -> Unit, onConfirm: (Theme) -> Unit, prefs: PreferencesManager = koinInject() @@ -96,10 +100,14 @@ fun ThemePicker( Column { Theme.values().forEach { Row( - modifier = Modifier.fillMaxWidth().clickable { selectedTheme = it }, + modifier = Modifier + .fillMaxWidth() + .clickable { selectedTheme = it }, verticalAlignment = Alignment.CenterVertically ) { - RadioButton(selected = selectedTheme == it, onClick = { selectedTheme = it }) + RadioButton( + selected = selectedTheme == it, + onClick = { selectedTheme = it }) Text(stringResource(it.displayName)) } } @@ -114,4 +122,22 @@ fun ThemePicker( } } ) -} \ No newline at end of file +} + +@Composable +private fun BooleanItem( + value: Boolean, + onValueChange: (Boolean) -> Unit, + @StringRes headline: Int, + @StringRes description: Int +) = ListItem( + modifier = Modifier.clickable { onValueChange(!value) }, + headlineContent = { Text(stringResource(headline)) }, + supportingContent = { Text(stringResource(description)) }, + trailingContent = { + Switch( + checked = value, + onCheckedChange = onValueChange, + ) + } +) \ No newline at end of file diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/PatchesSelectorViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/PatchesSelectorViewModel.kt index ca373103..14e68375 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/PatchesSelectorViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/PatchesSelectorViewModel.kt @@ -8,10 +8,10 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import app.revanced.manager.domain.manager.PreferencesManager import app.revanced.manager.domain.repository.PatchSelectionRepository import app.revanced.manager.domain.repository.SourceRepository import app.revanced.manager.patcher.patch.PatchInfo -import app.revanced.manager.ui.screen.allowUnsupported import app.revanced.manager.util.AppInfo import app.revanced.manager.util.PatchesSelection import app.revanced.manager.util.SnapshotStateSet @@ -31,6 +31,8 @@ class PatchesSelectorViewModel( val appInfo: AppInfo ) : ViewModel(), KoinComponent { private val selectionRepository: PatchSelectionRepository = get() + private val prefs: PreferencesManager = get() + val allowExperimental get() = prefs.allowExperimental val bundlesFlow = get().sources.flatMapLatestAndCombine( combiner = { it } @@ -82,7 +84,7 @@ class PatchesSelectorViewModel( selectedPatches.also { selectionRepository.updateSelection(appInfo.packageName, it) }.mapValues { it.value.toMutableList() }.apply { - if (allowUnsupported) { + if (allowExperimental) { return@apply } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 607ea9b2..16bc080b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,6 +28,8 @@ Adapt colors to the wallpaper Theme Choose between light or dark theme + Allow experimental patches + Allow patching incompatible patches with experimental versions, something may break Import keystore Import a custom keystore Default @@ -65,6 +67,7 @@ Light Dark Appearance + Patching Signing Storage Apps