mirror of
https://github.com/GrakovNe/lissen-android.git
synced 2026-06-18 13:48:45 -04:00
wip
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
package org.grakovne.lissen.ui.screens.settings.advanced
|
||||
|
||||
import android.os.Build
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
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.systemBarsPadding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme.colorScheme
|
||||
import androidx.compose.material3.MaterialTheme.typography
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.livedata.observeAsState
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||
import org.grakovne.lissen.R
|
||||
import org.grakovne.lissen.ui.screens.settings.composable.ColorSchemeSettingsComposable
|
||||
import org.grakovne.lissen.ui.screens.settings.composable.LibraryOrderingSettingsComposable
|
||||
import org.grakovne.lissen.ui.screens.settings.composable.SettingsToggleItem
|
||||
import org.grakovne.lissen.viewmodel.SettingsViewModel
|
||||
|
||||
@Composable
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
fun AppearancePreferencesScreen(onBack: () -> Unit) {
|
||||
val viewModel: SettingsViewModel = hiltViewModel()
|
||||
val materialYouColorsEnabled by viewModel.materialYouEnabled.observeAsState(false)
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
title = {
|
||||
Text(
|
||||
text = stringResource(R.string.appearance_preferences_title),
|
||||
style = typography.titleLarge.copy(fontWeight = FontWeight.SemiBold),
|
||||
color = colorScheme.onSurface,
|
||||
)
|
||||
},
|
||||
navigationIcon = {
|
||||
IconButton(onClick = { onBack() }) {
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
|
||||
contentDescription = "Back",
|
||||
tint = colorScheme.onSurface,
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
},
|
||||
modifier =
|
||||
Modifier
|
||||
.systemBarsPadding()
|
||||
.fillMaxHeight(),
|
||||
) { innerPadding ->
|
||||
Column(
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxSize()
|
||||
.padding(innerPadding),
|
||||
verticalArrangement = Arrangement.SpaceBetween,
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Column(
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.verticalScroll(rememberScrollState()),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
ColorSchemeSettingsComposable(viewModel)
|
||||
|
||||
LibraryOrderingSettingsComposable(viewModel)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
SettingsToggleItem(
|
||||
title = stringResource(R.string.settings_screen_material_you_title),
|
||||
description = stringResource(R.string.settings_screen_material_you_description),
|
||||
initialState = materialYouColorsEnabled,
|
||||
) { viewModel.preferMaterialYouColors(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
package org.grakovne.lissen.ui.screens.settings.advanced
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
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.systemBarsPadding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
|
||||
import androidx.compose.material.icons.outlined.Memory
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme.colorScheme
|
||||
import androidx.compose.material3.MaterialTheme.typography
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.livedata.observeAsState
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||
import org.grakovne.lissen.R
|
||||
import org.grakovne.lissen.common.restartApplication
|
||||
import org.grakovne.lissen.ui.navigation.AppNavigationService
|
||||
import org.grakovne.lissen.ui.screens.settings.composable.PlaybackVolumeBoostSettingsComposable
|
||||
import org.grakovne.lissen.ui.screens.settings.composable.SettingsInfoBanner
|
||||
import org.grakovne.lissen.ui.screens.settings.composable.SettingsToggleItem
|
||||
import org.grakovne.lissen.viewmodel.SettingsViewModel
|
||||
|
||||
@Composable
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
fun PlaybackPreferencesScreen(
|
||||
onBack: () -> Unit,
|
||||
navController: AppNavigationService,
|
||||
) {
|
||||
val viewModel: SettingsViewModel = hiltViewModel()
|
||||
val softwareCodecsEnabled by viewModel.softwareCodecsEnabled.observeAsState(false)
|
||||
val softwareCodecsEnabledOnStart = viewModel.softwareCodecsEnabledOnStart
|
||||
val context = LocalContext.current
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
title = {
|
||||
Text(
|
||||
text = stringResource(R.string.playback_preferences_title),
|
||||
style = typography.titleLarge.copy(fontWeight = FontWeight.SemiBold),
|
||||
color = colorScheme.onSurface,
|
||||
)
|
||||
},
|
||||
navigationIcon = {
|
||||
IconButton(onClick = { onBack() }) {
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
|
||||
contentDescription = "Back",
|
||||
tint = colorScheme.onSurface,
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
},
|
||||
modifier =
|
||||
Modifier
|
||||
.systemBarsPadding()
|
||||
.fillMaxHeight(),
|
||||
) { innerPadding ->
|
||||
Column(
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxSize()
|
||||
.padding(innerPadding),
|
||||
verticalArrangement = Arrangement.SpaceBetween,
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Column(
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.verticalScroll(rememberScrollState()),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
PlaybackVolumeBoostSettingsComposable(viewModel)
|
||||
|
||||
AdvancedSettingsNavigationItemComposable(
|
||||
title = stringResource(R.string.settings_screen_seek_time_title),
|
||||
description = stringResource(R.string.settings_screen_seek_time_hint),
|
||||
onclick = { navController.showSeekSettings() },
|
||||
)
|
||||
|
||||
SettingsToggleItem(
|
||||
title = stringResource(R.string.settings_screen_software_codecs_enabled_title),
|
||||
description = stringResource(R.string.settings_screen_software_codecs_enabled_description),
|
||||
initialState = softwareCodecsEnabled,
|
||||
) { viewModel.preferSoftwareCodecsEnabled(it) }
|
||||
|
||||
AudioFocusLossPolicyComposable(viewModel)
|
||||
}
|
||||
|
||||
if (softwareCodecsEnabledOnStart != softwareCodecsEnabled) {
|
||||
SettingsInfoBanner(
|
||||
icon = Icons.Outlined.Memory,
|
||||
text = stringResource(R.string.restart_the_app_to_start_using_the_new_codecs_title),
|
||||
ctaText = stringResource(R.string.restart_the_app_to_start_using_the_new_codecs_cta),
|
||||
onAction = { context.restartApplication() },
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user