mirror of
https://github.com/revanced/revanced-manager.git
synced 2025-04-30 05:54:26 +02:00
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:
parent
e992a99783
commit
747017a5f9
@ -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,
|
||||||
)
|
)
|
||||||
|
@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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(
|
||||||
|
@ -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()
|
||||||
|
@ -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(
|
||||||
|
@ -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
|
||||||
|
@ -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 & 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 & 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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user