Skip to content

Commit

Permalink
Fix DSiWare ROM import dialog not respecting safe drawing area
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaelvcaetano committed Feb 26, 2025
1 parent 7717ac4 commit bf3a37f
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,18 @@ package me.magnum.melonds.ui.dsiwaremanager.ui

import android.content.res.Configuration.UI_MODE_NIGHT_YES
import android.net.Uri
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.exclude
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.paddingFromBaseline
import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
Expand All @@ -17,15 +22,14 @@ import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.Divider
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.LocalElevationOverlay
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Scaffold
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.material.TopAppBar
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Close
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
Expand All @@ -43,15 +47,14 @@ import androidx.core.graphics.createBitmap
import androidx.core.graphics.set
import androidx.lifecycle.viewmodel.compose.viewModel
import me.magnum.melonds.R
import me.magnum.melonds.domain.model.RomIconFiltering
import me.magnum.melonds.domain.model.rom.Rom
import me.magnum.melonds.domain.model.rom.config.RomConfig
import me.magnum.melonds.domain.model.RomIconFiltering
import me.magnum.melonds.ui.common.FullScreen
import me.magnum.melonds.ui.dsiwaremanager.DSiWareRomListViewModel
import me.magnum.melonds.ui.dsiwaremanager.model.DSiWareMangerRomListUiState
import me.magnum.melonds.ui.romlist.RomIcon
import me.magnum.melonds.ui.theme.MelonTheme
import me.magnum.melonds.ui.theme.toolbarBackground

@Composable
fun DSiWareRomListDialog(
Expand Down Expand Up @@ -102,9 +105,10 @@ private fun FullScreenDialog(
retrieveRomIcon: suspend (Rom) -> RomIcon
) {
FullScreen(onDismiss = onDismiss) {
Surface {
Column(Modifier.fillMaxSize()) {
CompositionLocalProvider(LocalElevationOverlay provides null) {
Scaffold(
topBar = {
// Add spacing for status bar to have a different color
Box(Modifier.background(MaterialTheme.colors.primaryVariant).statusBarsPadding()) {
TopAppBar(
modifier = Modifier.fillMaxWidth(),
title = {
Expand All @@ -122,35 +126,29 @@ private fun FullScreenDialog(
)
}
},
backgroundColor = MaterialTheme.colors.toolbarBackground,
backgroundColor = MaterialTheme.colors.primary,
windowInsets = WindowInsets.safeDrawing.exclude(WindowInsets(bottom = Int.MAX_VALUE)),
)
}

when (romsUiState) {
is DSiWareMangerRomListUiState.Loading -> {
Loading(
Modifier
.fillMaxWidth()
.weight(1f)
)
}
is DSiWareMangerRomListUiState.Loaded -> {
DSiWareRomList(
Modifier
.fillMaxWidth()
.weight(1f),
roms = romsUiState.roms,
onRomSelected = onRomSelected,
retrieveRomIcon = retrieveRomIcon,
)
}
is DSiWareMangerRomListUiState.Empty -> {
Empty(
Modifier
.fillMaxWidth()
.weight(1f)
)
}
},
backgroundColor = MaterialTheme.colors.surface,
contentWindowInsets = WindowInsets.safeDrawing,
) { padding ->
when (romsUiState) {
is DSiWareMangerRomListUiState.Loading -> {
Loading(Modifier.fillMaxSize().padding(padding))
}
is DSiWareMangerRomListUiState.Loaded -> {
DSiWareRomList(
modifier = Modifier.fillMaxSize(),
contentPadding = padding,
roms = romsUiState.roms,
onRomSelected = onRomSelected,
retrieveRomIcon = retrieveRomIcon,
)
}
is DSiWareMangerRomListUiState.Empty -> {
Empty(Modifier.fillMaxSize().padding(padding))
}
}
}
Expand Down Expand Up @@ -183,7 +181,8 @@ private fun PopupDialog(
}
is DSiWareMangerRomListUiState.Loaded -> {
DSiWareRomList(
Modifier,
modifier = Modifier,
contentPadding = PaddingValues(0.dp),
roms = romsUiState.roms,
onRomSelected = onRomSelected,
retrieveRomIcon = retrieveRomIcon,
Expand Down Expand Up @@ -212,6 +211,7 @@ private fun Loading(modifier: Modifier = Modifier) {
@Composable
private fun DSiWareRomList(
modifier: Modifier,
contentPadding: PaddingValues,
roms: List<Rom>,
onRomSelected: (Rom) -> Unit,
retrieveRomIcon: suspend (Rom) -> RomIcon,
Expand Down Expand Up @@ -243,7 +243,10 @@ private fun DSiWareRomList(
Divider()
}

LazyColumn(state = state) {
LazyColumn(
state = state,
contentPadding = contentPadding,
) {
items(roms) {
RomItem(
modifier = Modifier.fillMaxWidth(),
Expand All @@ -267,8 +270,8 @@ private fun Empty(modifier: Modifier = Modifier) {
@Composable
@Preview
@Preview(uiMode = UI_MODE_NIGHT_YES)
@Preview(device = Devices.TABLET)
@Preview(device = Devices.TABLET, uiMode = UI_MODE_NIGHT_YES)
@Preview(device = Devices.PIXEL_TABLET)
@Preview(device = Devices.PIXEL_TABLET, uiMode = UI_MODE_NIGHT_YES)
private fun PreviewDSiWareRomListDialog() {
val bitmap = createBitmap(1, 1).apply { this[0, 0] = 0xFF777777.toInt() }

Expand All @@ -291,8 +294,8 @@ private fun PreviewDSiWareRomListDialog() {
@Composable
@Preview
@Preview(uiMode = UI_MODE_NIGHT_YES)
@Preview(device = Devices.TABLET)
@Preview(device = Devices.TABLET, uiMode = UI_MODE_NIGHT_YES)
@Preview(device = Devices.PIXEL_TABLET)
@Preview(device = Devices.PIXEL_TABLET, uiMode = UI_MODE_NIGHT_YES)
private fun PreviewDSiWareRomListDialogEmpty() {
MelonTheme {
DSiWareRomListDialogImpl(
Expand Down
4 changes: 0 additions & 4 deletions app/src/main/java/me/magnum/melonds/ui/theme/Colors.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
package me.magnum.melonds.ui.theme

import androidx.compose.material.Colors
import androidx.compose.material.darkColors
import androidx.compose.material.lightColors
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.colorResource
import me.magnum.melonds.R

@Suppress("unused")
val Colors.toolbarBackground: Color @Composable get() = colorResource(id = R.color.toolbarBackground)

val uncheckedThumbColor: Color @Composable get() = colorResource(id = R.color.switchThumbUnselected)

val LightMelonColors @Composable get() = lightColors(
Expand Down

0 comments on commit bf3a37f

Please sign in to comment.