feat: Improve Settings order (#2060)

Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
Co-authored-by: Ax333l <main@axelen.xyz>
This commit is contained in:
Pun Butrach 2024-08-15 19:59:06 +07:00 committed by GitHub
parent e992a99783
commit 747017a5f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 93 additions and 39 deletions

View File

@ -66,7 +66,7 @@ fun SettingsScreen(
) to SettingsDestination.Advanced, ) to SettingsDestination.Advanced,
Triple( Triple(
R.string.about, R.string.about,
R.string.about_description, R.string.app_name,
Icons.Outlined.Info Icons.Outlined.Info
) to SettingsDestination.About, ) to SettingsDestination.About,
) )

View File

@ -1,10 +1,14 @@
package app.revanced.manager.ui.screen.settings package app.revanced.manager.ui.screen.settings
import android.app.ActivityManager import android.app.ActivityManager
import android.content.ClipData
import android.content.ClipboardManager
import android.os.Build import android.os.Build
import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Api import androidx.compose.material.icons.outlined.Api
@ -13,7 +17,9 @@ import androidx.compose.material3.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -28,9 +34,10 @@ import app.revanced.manager.ui.component.settings.BooleanItem
import app.revanced.manager.ui.component.settings.IntegerItem import app.revanced.manager.ui.component.settings.IntegerItem
import app.revanced.manager.ui.component.settings.SettingsListItem import app.revanced.manager.ui.component.settings.SettingsListItem
import app.revanced.manager.ui.viewmodel.AdvancedSettingsViewModel import app.revanced.manager.ui.viewmodel.AdvancedSettingsViewModel
import app.revanced.manager.util.toast
import org.koin.androidx.compose.koinViewModel import org.koin.androidx.compose.koinViewModel
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
@Composable @Composable
fun AdvancedSettingsScreen( fun AdvancedSettingsScreen(
onBackClick: () -> Unit, onBackClick: () -> Unit,
@ -45,6 +52,7 @@ fun AdvancedSettingsScreen(
activityManager.largeMemoryClass activityManager.largeMemoryClass
) )
} }
val haptics = LocalHapticFeedback.current
Scaffold( Scaffold(
topBar = { topBar = {
@ -82,15 +90,6 @@ fun AdvancedSettingsScreen(
} }
) )
val exportDebugLogsLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) {
it?.let(vm::exportDebugLogs)
}
SettingsListItem(
headlineContent = stringResource(R.string.debug_logs_export),
modifier = Modifier.clickable { exportDebugLogsLauncher.launch(vm.debugLogFileName) }
)
GroupHeader(stringResource(R.string.patcher)) GroupHeader(stringResource(R.string.patcher))
BooleanItem( BooleanItem(
preference = vm.prefs.useProcessRuntime, preference = vm.prefs.useProcessRuntime,
@ -138,16 +137,38 @@ fun AdvancedSettingsScreen(
) )
GroupHeader(stringResource(R.string.debugging)) GroupHeader(stringResource(R.string.debugging))
val exportDebugLogsLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) {
it?.let(vm::exportDebugLogs)
}
SettingsListItem( SettingsListItem(
headlineContent = stringResource(R.string.about_device), headlineContent = stringResource(R.string.debug_logs_export),
supportingContent = """ modifier = Modifier.clickable { exportDebugLogsLauncher.launch(vm.debugLogFileName) }
**Version**: ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE}) )
**Build type**: ${BuildConfig.BUILD_TYPE} val clipboard = remember { context.getSystemService<ClipboardManager>()!! }
**Model**: ${Build.MODEL} val deviceContent = """
**Android version**: ${Build.VERSION.RELEASE} (${Build.VERSION.SDK_INT}) Version: ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})
**Supported Archs**: ${Build.SUPPORTED_ABIS.joinToString(", ")} Build type: ${BuildConfig.BUILD_TYPE}
**Memory limit**: $memoryLimit Model: ${Build.MODEL}
Android version: ${Build.VERSION.RELEASE} (${Build.VERSION.SDK_INT})
Supported Archs: ${Build.SUPPORTED_ABIS.joinToString(", ")}
Memory limit: $memoryLimit
""".trimIndent() """.trimIndent()
SettingsListItem(
modifier = Modifier.combinedClickable(
onClick = { },
onLongClickLabel = stringResource(R.string.copy_to_clipboard),
onLongClick = {
haptics.performHapticFeedback(HapticFeedbackType.LongPress)
clipboard.setPrimaryClip(
ClipData.newPlainText("Device Information", deviceContent)
)
context.toast(context.getString(R.string.toast_copied_to_clipboard))
}
),
headlineContent = stringResource(R.string.about_device),
supportingContent = deviceContent
) )
} }
} }

View File

@ -2,7 +2,20 @@ package app.revanced.manager.ui.screen.settings
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.border import androidx.compose.foundation.border
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.pager.rememberPagerState

View File

@ -32,7 +32,7 @@ fun DeveloperOptionsScreen(
Column(modifier = Modifier.padding(paddingValues)) { Column(modifier = Modifier.padding(paddingValues)) {
GroupHeader(stringResource(R.string.patch_bundles_section)) GroupHeader(stringResource(R.string.patch_bundles_section))
SettingsListItem( SettingsListItem(
headlineContent = stringResource(R.string.patch_bundles_redownload), headlineContent = stringResource(R.string.patch_bundles_force_download),
modifier = Modifier.clickable(onClick = vm::redownloadBundles) modifier = Modifier.clickable(onClick = vm::redownloadBundles)
) )
SettingsListItem( SettingsListItem(

View File

@ -2,8 +2,18 @@ package app.revanced.manager.ui.screen.settings
import android.os.Build import android.os.Build
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Column
import androidx.compose.material3.* import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.RadioButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -96,7 +106,7 @@ private fun ThemePicker(
title = { Text(stringResource(R.string.theme)) }, title = { Text(stringResource(R.string.theme)) },
text = { text = {
Column { Column {
Theme.values().forEach { Theme.entries.forEach {
Row( Row(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()

View File

@ -250,12 +250,17 @@ private fun PackageSelector(packages: Set<String>, onFinish: (String?) -> Unit)
} }
@Composable @Composable
private fun GroupItem(onClick: () -> Unit, @StringRes headline: Int, @StringRes description: Int) = private fun GroupItem(
onClick: () -> Unit,
@StringRes headline: Int,
@StringRes description: Int? = null
) {
SettingsListItem( SettingsListItem(
modifier = Modifier.clickable { onClick() }, modifier = Modifier.clickable { onClick() },
headlineContent = stringResource(headline), headlineContent = stringResource(headline),
supportingContent = stringResource(description) supportingContent = description?.let { stringResource(it) }
) )
}
@Composable @Composable
fun KeystoreCredentialsDialog( fun KeystoreCredentialsDialog(

View File

@ -1,8 +1,11 @@
package app.revanced.manager.ui.screen.settings package app.revanced.manager.ui.screen.settings
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.* import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource

View File

@ -6,6 +6,9 @@
<string name="cli">CLI</string> <string name="cli">CLI</string>
<string name="manager">Manager</string> <string name="manager">Manager</string>
<string name="toast_copied_to_clipboard">Copied!</string>
<string name="copy_to_clipboard">Copy to clipboard</string>
<string name="dashboard">Dashboard</string> <string name="dashboard">Dashboard</string>
<string name="settings">Settings</string> <string name="settings">Settings</string>
<string name="select_app">Select an app</string> <string name="select_app">Select an app</string>
@ -49,19 +52,18 @@
<string name="auto_updates_dialog_note">These settings can be changed later.</string> <string name="auto_updates_dialog_note">These settings can be changed later.</string>
<string name="general">General</string> <string name="general">General</string>
<string name="general_description">General settings</string> <string name="general_description">Theme, dynamic color</string>
<string name="advanced">Advanced</string>
<string name="advanced_description">Advanced settings</string>
<string name="updates">Updates</string> <string name="updates">Updates</string>
<string name="updates_description">Updates for ReVanced Manager</string> <string name="updates_description">Check for updates and view changelogs</string>
<string name="downloads">Downloads</string>
<string name="downloads_description">Downloader plugins and downloaded apps</string>
<string name="import_export">Import &amp; export</string>
<string name="import_export_description">Keystore, patch options and selection</string>
<string name="advanced">Advanced</string>
<string name="advanced_description">API URL, memory limit, debugging</string>
<string name="about">About</string>
<string name="opensource_licenses">Open source licenses</string> <string name="opensource_licenses">Open source licenses</string>
<string name="opensource_licenses_description">View all the libraries used to make this application</string> <string name="opensource_licenses_description">View all the libraries used to make this application</string>
<string name="downloads">Downloads</string>
<string name="downloads_description">Manage downloaded content</string>
<string name="import_export">Import &amp; export</string>
<string name="import_export_description">Import and export settings</string>
<string name="about">About</string>
<string name="about_description">About ReVanced</string>
<string name="contributors">Contributors</string> <string name="contributors">Contributors</string>
<string name="contributors_description">View the contributors of ReVanced</string> <string name="contributors_description">View the contributors of ReVanced</string>
@ -169,7 +171,7 @@
<string name="device_memory_limit">Memory limits</string> <string name="device_memory_limit">Memory limits</string>
<string name="device_memory_limit_format">%1$dMB (Normal) - %2$dMB (Large)</string> <string name="device_memory_limit_format">%1$dMB (Normal) - %2$dMB (Large)</string>
<string name="patch_bundles_section">Patch bundles</string> <string name="patch_bundles_section">Patch bundles</string>
<string name="patch_bundles_redownload">Redownload all patch bundles</string> <string name="patch_bundles_force_download">Force download all patch bundles</string>
<string name="patch_bundles_reset">Reset patch bundles</string> <string name="patch_bundles_reset">Reset patch bundles</string>
<string name="patching">Patching</string> <string name="patching">Patching</string>
<string name="signing">Signing</string> <string name="signing">Signing</string>