Link help pages in settings

This commit is contained in:
MM20
2022-10-16 16:06:46 +02:00
parent a4b9a7260a
commit cd70daba24
8 changed files with 54 additions and 8 deletions
@@ -1,6 +1,9 @@
package de.mm20.launcher2.ui.component.preferences package de.mm20.launcher2.ui.component.preferences
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.browser.customtabs.CustomTabColorSchemeParams
import androidx.browser.customtabs.CustomTabsIntent
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@@ -8,10 +11,17 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ArrowBack import androidx.compose.material.icons.rounded.ArrowBack
import androidx.compose.material3.* import androidx.compose.material.icons.rounded.HelpOutline
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -24,6 +34,7 @@ fun PreferenceScreen(
title: String, title: String,
floatingActionButton: @Composable () -> Unit = {}, floatingActionButton: @Composable () -> Unit = {},
topBarActions: @Composable RowScope.() -> Unit = {}, topBarActions: @Composable RowScope.() -> Unit = {},
helpUrl: String? = null,
content: LazyListScope.() -> Unit, content: LazyListScope.() -> Unit,
) { ) {
val navController = LocalNavController.current val navController = LocalNavController.current
@@ -31,6 +42,10 @@ fun PreferenceScreen(
systemUiController.setStatusBarColor(MaterialTheme.colorScheme.surface) systemUiController.setStatusBarColor(MaterialTheme.colorScheme.surface)
systemUiController.setNavigationBarColor(Color.Black) systemUiController.setNavigationBarColor(Color.Black)
val context = LocalContext.current
val colorScheme = MaterialTheme.colorScheme
val activity = LocalContext.current as? AppCompatActivity val activity = LocalContext.current as? AppCompatActivity
Scaffold( Scaffold(
floatingActionButton = floatingActionButton, floatingActionButton = floatingActionButton,
@@ -53,7 +68,25 @@ fun PreferenceScreen(
Icon(imageVector = Icons.Rounded.ArrowBack, contentDescription = "Back") Icon(imageVector = Icons.Rounded.ArrowBack, contentDescription = "Back")
} }
}, },
actions = topBarActions actions = {
if (helpUrl != null) {
IconButton(onClick = {
CustomTabsIntent.Builder()
.setDefaultColorSchemeParams(CustomTabColorSchemeParams.Builder()
.setToolbarColor(colorScheme.primaryContainer.toArgb())
.setSecondaryToolbarColor(colorScheme.secondaryContainer.toArgb())
.build()
)
.build().launchUrl(context, Uri.parse(helpUrl))
}) {
Icon(
imageVector = Icons.Rounded.HelpOutline,
contentDescription = "Help"
)
}
}
topBarActions()
}
) )
}) { }) {
LazyColumn( LazyColumn(
@@ -32,7 +32,10 @@ import de.mm20.launcher2.ui.component.preferences.SwitchPreference
fun CalendarWidgetSettingsScreen() { fun CalendarWidgetSettingsScreen() {
val viewModel: CalendarWidgetSettingsScreenVM = viewModel() val viewModel: CalendarWidgetSettingsScreenVM = viewModel()
val context = LocalContext.current val context = LocalContext.current
PreferenceScreen(title = stringResource(R.string.preference_screen_calendarwidget)) { PreferenceScreen(
title = stringResource(R.string.preference_screen_calendarwidget),
helpUrl = "https://kvaesitso.mm20.de/docs/user-guide/widgets/calendar-widget"
) {
item { item {
val excludeAllDayEvents by viewModel.excludeAllDayEvents.observeAsState() val excludeAllDayEvents by viewModel.excludeAllDayEvents.observeAsState()
PreferenceCategory { PreferenceCategory {
@@ -28,7 +28,8 @@ import de.mm20.launcher2.ui.component.preferences.*
fun ClockWidgetSettingsScreen() { fun ClockWidgetSettingsScreen() {
val viewModel: ClockWidgetSettingsScreenVM = viewModel() val viewModel: ClockWidgetSettingsScreenVM = viewModel()
PreferenceScreen( PreferenceScreen(
title = stringResource(R.string.preference_screen_clockwidget) title = stringResource(R.string.preference_screen_clockwidget),
helpUrl = "https://kvaesitso.mm20.de/docs/user-guide/widgets/clock"
) { ) {
item { item {
PreferenceCategory { PreferenceCategory {
@@ -22,6 +22,7 @@ fun CustomColorSchemeSettingsScreen() {
PreferenceScreen( PreferenceScreen(
title = stringResource(R.string.preference_screen_colors), title = stringResource(R.string.preference_screen_colors),
helpUrl = "https://kvaesitso.mm20.de/docs/user-guide/customization/color-schemes",
topBarActions = { topBarActions = {
var showOverflowMenu by remember { mutableStateOf(false) } var showOverflowMenu by remember { mutableStateOf(false) }
IconButton(onClick = { showOverflowMenu = true }) { IconButton(onClick = { showOverflowMenu = true }) {
@@ -35,7 +35,10 @@ fun CrashReporterScreen() {
val reports by viewModel.reports.observeAsState() val reports by viewModel.reports.observeAsState()
val showExceptions by viewModel.showExceptions.observeAsState(true) val showExceptions by viewModel.showExceptions.observeAsState(true)
val showCrashes by viewModel.showCrashes.observeAsState(true) val showCrashes by viewModel.showCrashes.observeAsState(true)
PreferenceScreen(title = stringResource(R.string.preference_crash_reporter)) { PreferenceScreen(
title = stringResource(R.string.preference_crash_reporter),
helpUrl = "https://kvaesitso.mm20.de/docs/user-guide/troubleshooting/crashreporter"
) {
reports?.let { reports?.let {
item { item {
Row( Row(
@@ -25,7 +25,8 @@ fun MusicWidgetSettingsScreen() {
val viewModel: MusicWidgetSettingsScreenVM = viewModel() val viewModel: MusicWidgetSettingsScreenVM = viewModel()
val hasPermission by viewModel.hasPermission.observeAsState() val hasPermission by viewModel.hasPermission.observeAsState()
PreferenceScreen( PreferenceScreen(
stringResource(R.string.preference_screen_musicwidget) stringResource(R.string.preference_screen_musicwidget),
helpUrl = "https://kvaesitso.mm20.de/docs/user-guide/widgets/clock"
) { ) {
item { item {
PreferenceCategory { PreferenceCategory {
@@ -23,7 +23,10 @@ fun WeatherWidgetSettingsScreen() {
val viewModel: WeatherWidgetSettingsScreenVM = viewModel() val viewModel: WeatherWidgetSettingsScreenVM = viewModel()
val context = LocalContext.current val context = LocalContext.current
PreferenceScreen(title = stringResource(R.string.preference_screen_weatherwidget)) { PreferenceScreen(
title = stringResource(R.string.preference_screen_weatherwidget),
helpUrl = "https://kvaesitso.mm20.de/docs/user-guide/widgets/weather-widget"
) {
item { item {
PreferenceCategory { PreferenceCategory {
val weatherProvider by viewModel.weatherProvider.observeAsState() val weatherProvider by viewModel.weatherProvider.observeAsState()
@@ -91,7 +91,8 @@ fun WebSearchSettingsScreen() {
FloatingActionButton(onClick = { showNewDialog = true }) { FloatingActionButton(onClick = { showNewDialog = true }) {
Icon(imageVector = Icons.Rounded.Add, contentDescription = null) Icon(imageVector = Icons.Rounded.Add, contentDescription = null)
} }
} },
helpUrl = "https://kvaesitso.mm20.de/docs/user-guide/search/websearches"
) { ) {
item { item {
PreferenceCategory { PreferenceCategory {