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:
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
))
|
||||
}
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -536,7 +536,7 @@ fun NoteReadWriteErrorSheet(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.verticalScroll(rememberScrollState())
|
||||
.padding(top = 8.dp, bottom = 16.dp)
|
||||
.padding(it)
|
||||
) {
|
||||
Text(
|
||||
text = message,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user