android: make customizations screen and head tracking screen scrollable

This commit is contained in:
Kavish Devar
2025-05-11 19:46:43 +05:30
parent 01432ce9c7
commit aec9c7192e
2 changed files with 53 additions and 5 deletions

View File

@@ -67,6 +67,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.scale import androidx.compose.ui.draw.scale
import androidx.compose.ui.draw.shadow import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
@@ -77,6 +78,10 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.navigation.NavController import androidx.navigation.NavController
import dev.chrisbanes.haze.HazeDefaults
import dev.chrisbanes.haze.HazeState
import dev.chrisbanes.haze.haze
import dev.chrisbanes.haze.hazeChild
import me.kavishdevar.librepods.R import me.kavishdevar.librepods.R
import me.kavishdevar.librepods.composables.StyledSwitch import me.kavishdevar.librepods.composables.StyledSwitch
import me.kavishdevar.librepods.utils.RadareOffsetFinder import me.kavishdevar.librepods.utils.RadareOffsetFinder
@@ -90,6 +95,8 @@ fun AppSettingsScreen(navController: NavController) {
val isDarkTheme = isSystemInDarkTheme() val isDarkTheme = isSystemInDarkTheme()
val context = LocalContext.current val context = LocalContext.current
val scrollState = rememberScrollState() val scrollState = rememberScrollState()
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
val hazeState = remember { HazeState() }
var showResetDialog by remember { mutableStateOf(false) } var showResetDialog by remember { mutableStateOf(false) }
@@ -110,8 +117,17 @@ fun AppSettingsScreen(navController: NavController) {
} }
Scaffold( Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = { topBar = {
CenterAlignedTopAppBar( CenterAlignedTopAppBar(
modifier = Modifier.hazeChild(
state = hazeState,
style = HazeDefaults.style(
backgroundColor = if (isDarkTheme) Color(0xFF000000).copy(alpha = 0.7f)
else Color(0xFFF2F2F7).copy(alpha = 0.7f),
tint = Color.White.copy(alpha = 0.2f)
)
),
title = { title = {
Text( Text(
text = stringResource(R.string.app_settings), text = stringResource(R.string.app_settings),
@@ -146,9 +162,10 @@ fun AppSettingsScreen(navController: NavController) {
) )
} }
}, },
colors = TopAppBarDefaults.topAppBarColors( colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
containerColor = Color.Transparent containerColor = Color.Transparent
) ),
scrollBehavior = scrollBehavior
) )
}, },
containerColor = if (isSystemInDarkTheme()) Color(0xFF000000) containerColor = if (isSystemInDarkTheme()) Color(0xFF000000)
@@ -160,6 +177,10 @@ fun AppSettingsScreen(navController: NavController) {
.padding(paddingValues) .padding(paddingValues)
.padding(horizontal = 16.dp) .padding(horizontal = 16.dp)
.verticalScroll(scrollState) .verticalScroll(scrollState)
.haze(
state = hazeState,
style = HazeDefaults.style(backgroundColor = Color.Transparent)
)
) { ) {
val isDarkTheme = isSystemInDarkTheme() val isDarkTheme = isSystemInDarkTheme()
val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF) val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF)

View File

@@ -40,7 +40,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft
import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material.icons.filled.PlayArrow
@@ -84,6 +86,7 @@ import androidx.compose.ui.graphics.nativeCanvas
import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.path import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
@@ -98,6 +101,10 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.navigation.NavController import androidx.navigation.NavController
import dev.chrisbanes.haze.HazeDefaults
import dev.chrisbanes.haze.HazeState
import dev.chrisbanes.haze.haze
import dev.chrisbanes.haze.hazeChild
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -124,9 +131,23 @@ fun HeadTrackingScreen(navController: NavController) {
val isDarkTheme = isSystemInDarkTheme() val isDarkTheme = isSystemInDarkTheme()
val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF) val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF)
val textColor = if (isDarkTheme) Color.White else Color.Black val textColor = if (isDarkTheme) Color.White else Color.Black
val scrollState = rememberScrollState()
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
val hazeState = remember { HazeState() }
Scaffold( Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = { topBar = {
CenterAlignedTopAppBar( CenterAlignedTopAppBar(
modifier = Modifier.hazeChild(
state = hazeState,
style = HazeDefaults.style(
backgroundColor = if (isDarkTheme) Color(0xFF000000).copy(alpha = 0.7f)
else Color(0xFFF2F2F7).copy(alpha = 0.7f),
tint = Color.White.copy(alpha = 0.2f)
)
),
title = { title = {
Text( Text(
stringResource(R.string.head_tracking), stringResource(R.string.head_tracking),
@@ -162,7 +183,7 @@ fun HeadTrackingScreen(navController: NavController) {
) )
} }
}, },
colors = TopAppBarDefaults.topAppBarColors( colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
containerColor = Color.Transparent containerColor = Color.Transparent
), ),
actions = { actions = {
@@ -211,7 +232,8 @@ fun HeadTrackingScreen(navController: NavController) {
modifier = Modifier.scale(1.5f) modifier = Modifier.scale(1.5f)
) )
} }
} },
scrollBehavior = scrollBehavior
) )
}, },
containerColor = if (isSystemInDarkTheme()) Color(0xFF000000) containerColor = if (isSystemInDarkTheme()) Color(0xFF000000)
@@ -223,6 +245,11 @@ fun HeadTrackingScreen(navController: NavController) {
.padding(paddingValues = paddingValues) .padding(paddingValues = paddingValues)
.padding(horizontal = 16.dp) .padding(horizontal = 16.dp)
.padding(top = 8.dp) .padding(top = 8.dp)
.verticalScroll(scrollState)
.haze(
state = hazeState,
style = HazeDefaults.style(backgroundColor = Color.Transparent)
)
) { ) {
val sharedPreferences = val sharedPreferences =
LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE) LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
@@ -311,7 +338,7 @@ fun HeadTrackingScreen(navController: NavController) {
Box( Box(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
modifier = Modifier.padding(top = 12.dp) modifier = Modifier.padding(top = 12.dp, bottom = 24.dp)
) { ) {
AnimatedContent( AnimatedContent(
targetState = gestureText, targetState = gestureText,