Skip to content

Commit aec9c71

Browse files
committed
android: make customizations screen and head tracking screen scrollable
1 parent 01432ce commit aec9c71

File tree

2 files changed

+53
-5
lines changed

2 files changed

+53
-5
lines changed

android/app/src/main/java/me/kavishdevar/librepods/screens/AppSettingsScreen.kt

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import androidx.compose.ui.Modifier
6767
import androidx.compose.ui.draw.scale
6868
import androidx.compose.ui.draw.shadow
6969
import androidx.compose.ui.graphics.Color
70+
import androidx.compose.ui.input.nestedscroll.nestedScroll
7071
import androidx.compose.ui.platform.LocalContext
7172
import androidx.compose.ui.res.stringResource
7273
import androidx.compose.ui.text.TextStyle
@@ -77,6 +78,10 @@ import androidx.compose.ui.text.style.TextOverflow
7778
import androidx.compose.ui.unit.dp
7879
import androidx.compose.ui.unit.sp
7980
import androidx.navigation.NavController
81+
import dev.chrisbanes.haze.HazeDefaults
82+
import dev.chrisbanes.haze.HazeState
83+
import dev.chrisbanes.haze.haze
84+
import dev.chrisbanes.haze.hazeChild
8085
import me.kavishdevar.librepods.R
8186
import me.kavishdevar.librepods.composables.StyledSwitch
8287
import me.kavishdevar.librepods.utils.RadareOffsetFinder
@@ -90,6 +95,8 @@ fun AppSettingsScreen(navController: NavController) {
9095
val isDarkTheme = isSystemInDarkTheme()
9196
val context = LocalContext.current
9297
val scrollState = rememberScrollState()
98+
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
99+
val hazeState = remember { HazeState() }
93100

94101
var showResetDialog by remember { mutableStateOf(false) }
95102

@@ -110,8 +117,17 @@ fun AppSettingsScreen(navController: NavController) {
110117
}
111118

112119
Scaffold(
120+
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
113121
topBar = {
114122
CenterAlignedTopAppBar(
123+
modifier = Modifier.hazeChild(
124+
state = hazeState,
125+
style = HazeDefaults.style(
126+
backgroundColor = if (isDarkTheme) Color(0xFF000000).copy(alpha = 0.7f)
127+
else Color(0xFFF2F2F7).copy(alpha = 0.7f),
128+
tint = Color.White.copy(alpha = 0.2f)
129+
)
130+
),
115131
title = {
116132
Text(
117133
text = stringResource(R.string.app_settings),
@@ -146,9 +162,10 @@ fun AppSettingsScreen(navController: NavController) {
146162
)
147163
}
148164
},
149-
colors = TopAppBarDefaults.topAppBarColors(
165+
colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
150166
containerColor = Color.Transparent
151-
)
167+
),
168+
scrollBehavior = scrollBehavior
152169
)
153170
},
154171
containerColor = if (isSystemInDarkTheme()) Color(0xFF000000)
@@ -160,6 +177,10 @@ fun AppSettingsScreen(navController: NavController) {
160177
.padding(paddingValues)
161178
.padding(horizontal = 16.dp)
162179
.verticalScroll(scrollState)
180+
.haze(
181+
state = hazeState,
182+
style = HazeDefaults.style(backgroundColor = Color.Transparent)
183+
)
163184
) {
164185
val isDarkTheme = isSystemInDarkTheme()
165186
val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF)

android/app/src/main/java/me/kavishdevar/librepods/screens/HeadTrackingScreen.kt

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
4040
import androidx.compose.foundation.layout.height
4141
import androidx.compose.foundation.layout.padding
4242
import androidx.compose.foundation.layout.width
43+
import androidx.compose.foundation.rememberScrollState
4344
import androidx.compose.foundation.shape.RoundedCornerShape
45+
import androidx.compose.foundation.verticalScroll
4446
import androidx.compose.material.icons.Icons
4547
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft
4648
import androidx.compose.material.icons.filled.PlayArrow
@@ -84,6 +86,7 @@ import androidx.compose.ui.graphics.nativeCanvas
8486
import androidx.compose.ui.graphics.toArgb
8587
import androidx.compose.ui.graphics.vector.ImageVector
8688
import androidx.compose.ui.graphics.vector.path
89+
import androidx.compose.ui.input.nestedscroll.nestedScroll
8790
import androidx.compose.ui.platform.LocalContext
8891
import androidx.compose.ui.res.stringResource
8992
import androidx.compose.ui.text.TextStyle
@@ -98,6 +101,10 @@ import androidx.compose.ui.tooling.preview.Preview
98101
import androidx.compose.ui.unit.dp
99102
import androidx.compose.ui.unit.sp
100103
import androidx.navigation.NavController
104+
import dev.chrisbanes.haze.HazeDefaults
105+
import dev.chrisbanes.haze.HazeState
106+
import dev.chrisbanes.haze.haze
107+
import dev.chrisbanes.haze.hazeChild
101108
import kotlinx.coroutines.CoroutineScope
102109
import kotlinx.coroutines.delay
103110
import kotlinx.coroutines.launch
@@ -124,9 +131,23 @@ fun HeadTrackingScreen(navController: NavController) {
124131
val isDarkTheme = isSystemInDarkTheme()
125132
val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF)
126133
val textColor = if (isDarkTheme) Color.White else Color.Black
134+
135+
val scrollState = rememberScrollState()
136+
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
137+
val hazeState = remember { HazeState() }
138+
127139
Scaffold(
140+
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
128141
topBar = {
129142
CenterAlignedTopAppBar(
143+
modifier = Modifier.hazeChild(
144+
state = hazeState,
145+
style = HazeDefaults.style(
146+
backgroundColor = if (isDarkTheme) Color(0xFF000000).copy(alpha = 0.7f)
147+
else Color(0xFFF2F2F7).copy(alpha = 0.7f),
148+
tint = Color.White.copy(alpha = 0.2f)
149+
)
150+
),
130151
title = {
131152
Text(
132153
stringResource(R.string.head_tracking),
@@ -162,7 +183,7 @@ fun HeadTrackingScreen(navController: NavController) {
162183
)
163184
}
164185
},
165-
colors = TopAppBarDefaults.topAppBarColors(
186+
colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
166187
containerColor = Color.Transparent
167188
),
168189
actions = {
@@ -211,7 +232,8 @@ fun HeadTrackingScreen(navController: NavController) {
211232
modifier = Modifier.scale(1.5f)
212233
)
213234
}
214-
}
235+
},
236+
scrollBehavior = scrollBehavior
215237
)
216238
},
217239
containerColor = if (isSystemInDarkTheme()) Color(0xFF000000)
@@ -223,6 +245,11 @@ fun HeadTrackingScreen(navController: NavController) {
223245
.padding(paddingValues = paddingValues)
224246
.padding(horizontal = 16.dp)
225247
.padding(top = 8.dp)
248+
.verticalScroll(scrollState)
249+
.haze(
250+
state = hazeState,
251+
style = HazeDefaults.style(backgroundColor = Color.Transparent)
252+
)
226253
) {
227254
val sharedPreferences =
228255
LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
@@ -311,7 +338,7 @@ fun HeadTrackingScreen(navController: NavController) {
311338

312339
Box(
313340
contentAlignment = Alignment.Center,
314-
modifier = Modifier.padding(top = 12.dp)
341+
modifier = Modifier.padding(top = 12.dp, bottom = 24.dp)
315342
) {
316343
AnimatedContent(
317344
targetState = gestureText,

0 commit comments

Comments
 (0)