Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Padding fixes #158

Merged
merged 2 commits into from
Feb 19, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -18,9 +18,15 @@ import com.OxGames.Pluvia.ui.theme.PluviaTheme
import `in`.dragonbra.javasteam.enums.EPersonaState

@Composable
fun StickyHeaderItem(isCollapsed: Boolean, header: String, count: Int, onHeaderAction: () -> Unit) {
fun StickyHeaderItem(
modifier: Modifier = Modifier,
isCollapsed: Boolean,
header: String,
count: Int,
onHeaderAction: () -> Unit,
) {
ListItem(
modifier = Modifier.clickable(onClick = onHeaderAction),
modifier = modifier.clickable(onClick = onHeaderAction),
headlineContent = { Text(text = "$header ($count)") },
trailingContent = {
val button = when (isCollapsed) {
Original file line number Diff line number Diff line change
@@ -256,10 +256,13 @@ private fun FriendsListPane(
) { paddingValues ->
LazyColumn(
modifier = Modifier
.padding(paddingValues)
.padding(
top = paddingValues.calculateTopPadding(),
bottom = paddingValues.calculateBottomPadding(),
)
.fillMaxSize(),
state = listState,
contentPadding = PaddingValues(bottom = 72.dp), // Extra space for fab
contentPadding = PaddingValues(bottom = 72.dp),
) {
state.friendsList.forEach { (key, value) ->
stickyHeader {
Original file line number Diff line number Diff line change
@@ -20,9 +20,11 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.OxGames.Pluvia.PrefManager
import com.OxGames.Pluvia.data.LibraryItem
import com.OxGames.Pluvia.service.SteamService
import com.OxGames.Pluvia.ui.data.LibraryState
@@ -137,6 +139,8 @@ private fun LibraryScreenContent(
@Composable
private fun Preview_LibraryScreenContent() {
val sheetState = rememberModalBottomSheetState()
val context = LocalContext.current
PrefManager.init(context)
var state by remember {
mutableStateOf(
LibraryState(
Original file line number Diff line number Diff line change
@@ -20,14 +20,15 @@ import com.OxGames.Pluvia.data.LibraryItem

@Composable
internal fun LibraryList(
modifier: Modifier = Modifier,
contentPaddingValues: PaddingValues,
listState: LazyListState,
list: List<LibraryItem>,
onItemClick: (Int) -> Unit,
) {
if (list.isEmpty()) {
Box(
modifier = Modifier.fillMaxSize(),
modifier = modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Surface(
@@ -44,7 +45,7 @@ internal fun LibraryList(
}
} else {
LazyColumn(
modifier = Modifier.fillMaxSize(),
modifier = modifier.fillMaxSize(),
state = listState,
contentPadding = contentPaddingValues,
) {
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
package com.OxGames.Pluvia.ui.screen.library.components

import android.content.res.Configuration
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.scaleIn
import androidx.compose.animation.scaleOut
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
@@ -36,9 +32,11 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.OxGames.Pluvia.PrefManager
import com.OxGames.Pluvia.data.LibraryItem
import com.OxGames.Pluvia.ui.data.LibraryState
import com.OxGames.Pluvia.ui.enums.AppFilter
@@ -62,7 +60,14 @@ internal fun LibraryListPane(
val expandedFab by remember { derivedStateOf { listState.firstVisibleItemIndex == 0 } }
val snackBarHost = remember { SnackbarHostState() }

// Determine the orientation to add additional scaffold padding.
val configuration = LocalConfiguration.current
val isPortrait = remember(configuration) {
configuration.orientation == Configuration.ORIENTATION_PORTRAIT
}

Scaffold(
modifier = if (isPortrait) Modifier else Modifier.statusBarsPadding(),
snackbarHost = { SnackbarHost(snackBarHost) },
topBar = {
val searchListState = rememberLazyListState()
@@ -91,25 +96,14 @@ internal fun LibraryListPane(
}
},
) { paddingValues ->
val statusBarPadding = WindowInsets.statusBars.asPaddingValues().calculateTopPadding()
Box(
modifier = Modifier
.fillMaxSize()
.padding(
PaddingValues(
start = paddingValues.calculateStartPadding(LayoutDirection.Ltr),
end = paddingValues.calculateEndPadding(LayoutDirection.Ltr),
top = statusBarPadding,
bottom = paddingValues.calculateBottomPadding(),
),
),
modifier = Modifier.fillMaxSize(),
) {
LibraryList(
list = state.appInfoList,
listState = listState,
contentPaddingValues = PaddingValues(
// TODO this fixes a `Top padding must be non-negative` crash on P9PXL, but I don't fully know why.
top = maxOf(0.dp, paddingValues.calculateTopPadding().minus(statusBarPadding)),
top = paddingValues.calculateTopPadding(),
bottom = 72.dp,
),
onItemClick = onNavigate,
@@ -135,15 +129,17 @@ internal fun LibraryListPane(
***********/

@OptIn(ExperimentalMaterial3Api::class)
@Preview(uiMode = android.content.res.Configuration.UI_MODE_NIGHT_YES or android.content.res.Configuration.UI_MODE_TYPE_NORMAL)
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL)
@Preview
@Composable
private fun Preview_LibraryListPane() {
val context = LocalContext.current
PrefManager.init(context)
val sheetState = rememberModalBottomSheetState()
var state by remember {
mutableStateOf(
LibraryState(
appInfoList = List(15) { idx ->
appInfoList = List(20) { idx ->
val item = fakeAppInfo(idx)
LibraryItem(
index = idx,
@@ -158,7 +154,7 @@ private fun Preview_LibraryListPane() {
PluviaTheme {
Surface {
LibraryListPane(
listState = rememberLazyListState(),
listState = LazyListState(2, 64),
state = state,
sheetState = sheetState,
onFilterChanged = { },