Add edge to edge support (#1673)

* fix settings

* fix emoji, location, favorite pickers

* fix tag picker

* fix widget configuration and picker

* fix notes widget

* fix shape settings

* fix spacing

---------

Co-authored-by: MM20 <15646950+MM2-0@users.noreply.github.com>
This commit is contained in:
leekleak
2025-11-08 15:59:46 +02:00
committed by GitHub
parent 66acddc76d
commit fecc7b8c2d
9 changed files with 50 additions and 39 deletions

View File

@@ -42,9 +42,7 @@ fun WeatherLocationSearchDialog(
BottomSheetDialog(onDismissRequest) {
var query by remember { mutableStateOf("") }
Column(
modifier = Modifier
.fillMaxSize()
.padding(it)
modifier = Modifier.fillMaxSize()
) {
SearchBar(
modifier = Modifier.padding(bottom = 8.dp),
@@ -79,8 +77,8 @@ fun WeatherLocationSearchDialog(
)
} else if (locations.isNotEmpty()) {
LazyColumn(
modifier = Modifier
.fillMaxWidth()
modifier = Modifier.fillMaxWidth(),
contentPadding = it
) {
items(locations) {
Text(

View File

@@ -1,6 +1,8 @@
package de.mm20.launcher2.ui.component
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.material3.ModalBottomSheet
@@ -8,12 +10,15 @@ import androidx.compose.material3.SheetState
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import de.mm20.launcher2.ui.ktx.toDp
@Composable
fun BottomSheetDialog(
onDismissRequest: () -> Unit,
bottomSheetState: SheetState = rememberModalBottomSheetState(),
windowInsets: WindowInsets = WindowInsets(left = 24.dp, right = 24.dp),
content: @Composable (paddingValues: PaddingValues) -> Unit,
) {
ModalBottomSheet(
@@ -22,7 +27,10 @@ fun BottomSheetDialog(
.padding(top = 8.dp),
sheetState = bottomSheetState,
onDismissRequest = onDismissRequest,
contentWindowInsets = { windowInsets }
) {
content(PaddingValues(horizontal = 24.dp, vertical = 8.dp))
content(PaddingValues(
bottom = WindowInsets.navigationBars.getBottom(LocalDensity.current).toDp() + 8.dp,
))
}
}

View File

@@ -4,6 +4,7 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@@ -41,6 +42,7 @@ import kotlinx.coroutines.launch
fun EmojiPicker(
modifier: Modifier = Modifier,
onEmojiSelected: (String) -> Unit = {},
contentPadding: PaddingValues = PaddingValues(0.dp)
) {
val context = LocalContext.current
@@ -105,6 +107,7 @@ fun EmojiPicker(
LazyVerticalGrid(
GridCells.Adaptive(48.dp),
modifier = modifier,
contentPadding = contentPadding
) {
stickyHeader {
Row(

View File

@@ -164,13 +164,15 @@ fun PreferenceScreen(
LazyColumn(
modifier = Modifier
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection)
.padding(it),
.nestedScroll(scrollBehavior.nestedScrollConnection),
state = lazyColumnState,
content = content,
verticalArrangement = verticalArrangement,
contentPadding = PaddingValues(
12.dp
top = it.calculateTopPadding(),
bottom = it.calculateBottomPadding() + 4.dp,
start = 12.dp,
end = 12.dp
)
)
}

View File

@@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
@@ -100,13 +101,16 @@ fun ConfigureWidgetSheet(
onWidgetUpdated: (Widget) -> Unit,
onDismiss: () -> Unit,
) {
BottomSheetDialog(onDismissRequest = onDismiss) {
BottomSheetDialog(
onDismissRequest = onDismiss,
windowInsets = WindowInsets()
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = if (widget is AppWidget) 8.dp else 16.dp)
.padding(it)
.verticalScroll(rememberScrollState())
.padding(bottom = 8.dp)
) {
when (widget) {
is WeatherWidget -> ConfigureWeatherWidget(widget, onWidgetUpdated)

View File

@@ -24,6 +24,7 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
@@ -91,7 +92,7 @@ fun EditTagSheet(
onTagSaved(viewModel.tagName)
}
onDismiss()
}
},
) {
when (viewModel.page) {
EditTagSheetPage.CreateTag -> CreateNewTagPage(viewModel, it)
@@ -138,26 +139,20 @@ fun CreateNewTagPage(viewModel: EditTagSheetVM, paddingValues: PaddingValues) {
fun PickItems(viewModel: EditTagSheetVM, paddingValues: PaddingValues) {
val columns = LocalGridSettings.current.columnCount - 1
Scaffold(
Scaffold (
contentWindowInsets = WindowInsets(0.dp),
modifier = Modifier.padding(paddingValues),
containerColor = Color.Transparent,
bottomBar = {
Surface(
modifier = Modifier.fillMaxWidth(),
color = MaterialTheme.colorScheme.surface.copy(alpha = 0.95f),
shape = MaterialTheme.shapes.medium
Box (
modifier = Modifier.fillMaxWidth().padding(horizontal = 8.dp),
contentAlignment = Alignment.CenterEnd
) {
Box {
Button(
onClick = { viewModel.closeItemPicker() },
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(all = 8.dp)
.padding(end = 12.dp)
) {
Text(stringResource(R.string.action_next))
}
ExtendedFloatingActionButton (
modifier = Modifier.padding(paddingValues),
onClick = {viewModel.closeItemPicker()}
) {
Text(stringResource(R.string.action_next))
}
}
}
@@ -424,9 +419,7 @@ fun PickIcon(
)
}
Column(
modifier = Modifier
.fillMaxWidth()
.padding(paddingValues)
modifier = Modifier.fillMaxWidth()
) {
SingleChoiceSegmentedButtonRow(
modifier = Modifier.fillMaxWidth(),
@@ -455,6 +448,7 @@ fun PickIcon(
IconPicker(
searchable = tag,
onSelect = { viewModel.selectIcon(it) },
contentPadding = paddingValues
)
}
@@ -466,6 +460,7 @@ fun PickIcon(
onEmojiSelected = {
viewModel.selectIcon(CustomTextIcon(text = it))
},
contentPadding = paddingValues
)
}
}

View File

@@ -272,8 +272,8 @@ fun WidgetPickerSheet(
) {
val builtIn by viewModel.builtInWidgets.collectAsState(emptyList())
LazyColumn(
modifier = Modifier
.fillMaxWidth()
modifier = Modifier.fillMaxWidth(),
contentPadding = it
) {
stickyHeader {
SearchBar(
@@ -287,7 +287,7 @@ fun WidgetPickerSheet(
)
)
}
.padding(bottom = 16.dp, start = 16.dp, end = 16.dp),
.padding(bottom = 16.dp),
windowInsets = WindowInsets(0.dp),
query = query,
onQueryChange = { viewModel.search(it) },
@@ -315,7 +315,7 @@ fun WidgetPickerSheet(
OutlinedCard(
modifier = Modifier
.fillMaxWidth()
.padding(bottom = 16.dp, start = 16.dp, end = 16.dp),
.padding(bottom = 16.dp),
onClick = {
val id = UUID.randomUUID()
val widget = when (it.type) {
@@ -372,7 +372,7 @@ fun WidgetPickerSheet(
)
Row(
modifier = Modifier
.padding(horizontal = 16.dp, vertical = 4.dp)
.padding(vertical = 4.dp)
.clip(MaterialTheme.shapes.small)
.background(background)
.clickable(enabled = !expandAllGroups) {
@@ -408,7 +408,7 @@ fun WidgetPickerSheet(
OutlinedCard(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp, vertical = 4.dp)
.padding(vertical = 4.dp)
.animateItem(),
onClick = {
bindAppWidgetStarter.launch(it)

View File

@@ -536,7 +536,7 @@ fun NoteReadWriteErrorSheet(
modifier = Modifier
.fillMaxWidth()
.verticalScroll(rememberScrollState())
.padding(top = 8.dp, bottom = 16.dp)
.padding(it)
) {
Text(
text = message,

View File

@@ -497,7 +497,8 @@ fun ShapePreference(
Column(
modifier = Modifier
.verticalScroll(rememberScrollState())
.padding(it),
.padding(it)
.padding(bottom = 8.dp),
verticalArrangement = Arrangement.spacedBy(16.dp)
) {
val previewShape = if ((currentCornerStyle ?: baseShape.corners