Widget sizes are using px, not dp
This commit is contained in:
parent
708e302631
commit
d4759339cf
@ -68,8 +68,8 @@ fun DragResizeHandle(
|
|||||||
|
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.then(if (width.isUnspecified) Modifier.fillMaxWidth() else Modifier.requiredWidth(width))
|
.then(if (width.isUnspecified) Modifier.fillMaxWidth() else Modifier.width(width))
|
||||||
.then(if (height.isUnspecified) Modifier.fillMaxHeight() else Modifier.requiredHeight(height))
|
.then(if (height.isUnspecified) Modifier.fillMaxHeight() else Modifier.height(height))
|
||||||
.align(alignment)
|
.align(alignment)
|
||||||
.border(1.dp, color = MaterialTheme.colorScheme.primary, MaterialTheme.shapes.small)
|
.border(1.dp, color = MaterialTheme.colorScheme.primary, MaterialTheme.shapes.small)
|
||||||
) {
|
) {
|
||||||
|
|||||||
@ -13,25 +13,18 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
||||||
import androidx.browser.customtabs.CustomTabsIntent
|
import androidx.browser.customtabs.CustomTabsIntent
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
|
||||||
import androidx.compose.foundation.gestures.Orientation
|
|
||||||
import androidx.compose.foundation.gestures.awaitEachGesture
|
import androidx.compose.foundation.gestures.awaitEachGesture
|
||||||
import androidx.compose.foundation.gestures.awaitFirstDown
|
import androidx.compose.foundation.gestures.awaitFirstDown
|
||||||
import androidx.compose.foundation.gestures.draggable
|
|
||||||
import androidx.compose.foundation.gestures.rememberDraggableState
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.ColumnScope
|
import androidx.compose.foundation.layout.ColumnScope
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
import androidx.compose.foundation.layout.Row
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.requiredSize
|
import androidx.compose.foundation.layout.requiredSize
|
||||||
import androidx.compose.foundation.layout.requiredWidth
|
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.text.KeyboardOptions
|
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.rounded.Build
|
import androidx.compose.material.icons.rounded.Build
|
||||||
@ -40,7 +33,6 @@ import androidx.compose.material.icons.rounded.HelpOutline
|
|||||||
import androidx.compose.material.icons.rounded.Link
|
import androidx.compose.material.icons.rounded.Link
|
||||||
import androidx.compose.material.icons.rounded.LinkOff
|
import androidx.compose.material.icons.rounded.LinkOff
|
||||||
import androidx.compose.material.icons.rounded.OpenInNew
|
import androidx.compose.material.icons.rounded.OpenInNew
|
||||||
import androidx.compose.material.icons.rounded.UnfoldMore
|
|
||||||
import androidx.compose.material3.ButtonDefaults
|
import androidx.compose.material3.ButtonDefaults
|
||||||
import androidx.compose.material3.Divider
|
import androidx.compose.material3.Divider
|
||||||
import androidx.compose.material3.HorizontalDivider
|
import androidx.compose.material3.HorizontalDivider
|
||||||
@ -48,20 +40,14 @@ import androidx.compose.material3.Icon
|
|||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.OutlinedButton
|
import androidx.compose.material3.OutlinedButton
|
||||||
import androidx.compose.material3.OutlinedCard
|
import androidx.compose.material3.OutlinedCard
|
||||||
import androidx.compose.material3.OutlinedTextField
|
|
||||||
import androidx.compose.material3.PlainTooltip
|
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextButton
|
import androidx.compose.material3.TextButton
|
||||||
import androidx.compose.material3.TooltipBox
|
|
||||||
import androidx.compose.material3.TooltipDefaults
|
|
||||||
import androidx.compose.material3.rememberTooltipState
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@ -71,11 +57,8 @@ import androidx.compose.ui.graphics.toArgb
|
|||||||
import androidx.compose.ui.input.pointer.PointerEventPass
|
import androidx.compose.ui.input.pointer.PointerEventPass
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
|
||||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.input.ImeAction
|
|
||||||
import androidx.compose.ui.text.input.KeyboardType
|
|
||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.isUnspecified
|
import androidx.compose.ui.unit.isUnspecified
|
||||||
@ -96,6 +79,7 @@ import de.mm20.launcher2.ui.component.ResizeAxis
|
|||||||
import de.mm20.launcher2.ui.component.preferences.CheckboxPreference
|
import de.mm20.launcher2.ui.component.preferences.CheckboxPreference
|
||||||
import de.mm20.launcher2.ui.component.preferences.Preference
|
import de.mm20.launcher2.ui.component.preferences.Preference
|
||||||
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
|
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
|
||||||
|
import de.mm20.launcher2.ui.ktx.toDp
|
||||||
import de.mm20.launcher2.ui.launcher.widgets.external.AppWidgetHost
|
import de.mm20.launcher2.ui.launcher.widgets.external.AppWidgetHost
|
||||||
import de.mm20.launcher2.ui.locals.LocalDarkTheme
|
import de.mm20.launcher2.ui.locals.LocalDarkTheme
|
||||||
import de.mm20.launcher2.ui.locals.LocalPreferDarkContentOverWallpaper
|
import de.mm20.launcher2.ui.locals.LocalPreferDarkContentOverWallpaper
|
||||||
@ -107,7 +91,6 @@ import de.mm20.launcher2.widgets.MusicWidget
|
|||||||
import de.mm20.launcher2.widgets.NotesWidget
|
import de.mm20.launcher2.widgets.NotesWidget
|
||||||
import de.mm20.launcher2.widgets.WeatherWidget
|
import de.mm20.launcher2.widgets.WeatherWidget
|
||||||
import de.mm20.launcher2.widgets.Widget
|
import de.mm20.launcher2.widgets.Widget
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import org.koin.androidx.compose.get
|
import org.koin.androidx.compose.get
|
||||||
import java.time.ZonedDateTime
|
import java.time.ZonedDateTime
|
||||||
import java.time.format.DateTimeFormatter
|
import java.time.format.DateTimeFormatter
|
||||||
@ -367,7 +350,10 @@ fun ColumnScope.ConfigureAppWidget(
|
|||||||
widgetId = widget.config.widgetId,
|
widgetId = widget.config.widgetId,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.clip(MaterialTheme.shapes.medium)
|
.clip(MaterialTheme.shapes.medium)
|
||||||
.then(if (resizeWidth.isUnspecified) Modifier.fillMaxWidth() else Modifier.requiredWidth(resizeWidth))
|
.then(
|
||||||
|
if (resizeWidth.isUnspecified) Modifier.fillMaxWidth()
|
||||||
|
else Modifier.width(resizeWidth)
|
||||||
|
)
|
||||||
.height(resizeHeight)
|
.height(resizeHeight)
|
||||||
.align(Alignment.TopCenter)
|
.align(Alignment.TopCenter)
|
||||||
.pointerInput(Unit) {
|
.pointerInput(Unit) {
|
||||||
@ -382,23 +368,23 @@ fun ColumnScope.ConfigureAppWidget(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val maxWidth = if (isAtLeastApiLevel(31)) {
|
val maxWidth = if (isAtLeastApiLevel(31)) {
|
||||||
widgetInfo.maxResizeWidth.takeIf { it > 0 }?.dp ?: Dp.Unspecified
|
widgetInfo.maxResizeWidth.takeIf { it > 0 }?.toDp() ?: Dp.Unspecified
|
||||||
} else Dp.Unspecified
|
} else Dp.Unspecified
|
||||||
|
|
||||||
val maxHeight = if (isAtLeastApiLevel(31)) {
|
val maxHeight = if (isAtLeastApiLevel(31)) {
|
||||||
widgetInfo.maxResizeHeight.takeIf { it > 0 }?.dp ?: 2000.dp
|
widgetInfo.maxResizeHeight.takeIf { it > 0 }?.toDp() ?: 2000.dp
|
||||||
} else 2000.dp
|
} else 2000.dp
|
||||||
|
|
||||||
val minWidth = if (widgetInfo.minResizeWidth in 1..widgetInfo.minWidth) {
|
val minWidth = if (widgetInfo.minResizeWidth in 1..widgetInfo.minWidth) {
|
||||||
widgetInfo.minResizeWidth.dp
|
widgetInfo.minResizeWidth.toDp()
|
||||||
} else {
|
} else {
|
||||||
widgetInfo.minWidth.dp
|
widgetInfo.minWidth.toDp()
|
||||||
}
|
}
|
||||||
|
|
||||||
val minHeight = if (widgetInfo.minResizeHeight in 1..widgetInfo.minHeight) {
|
val minHeight = if (widgetInfo.minResizeHeight in 1..widgetInfo.minHeight) {
|
||||||
widgetInfo.minResizeHeight.dp
|
widgetInfo.minResizeHeight.toDp()
|
||||||
} else {
|
} else {
|
||||||
widgetInfo.minHeight.dp
|
widgetInfo.minHeight.toDp()
|
||||||
}
|
}
|
||||||
|
|
||||||
DragResizeHandle(
|
DragResizeHandle(
|
||||||
@ -409,12 +395,6 @@ fun ColumnScope.ConfigureAppWidget(
|
|||||||
minHeight = minHeight,
|
minHeight = minHeight,
|
||||||
maxWidth = maxWidth,
|
maxWidth = maxWidth,
|
||||||
maxHeight = maxHeight,
|
maxHeight = maxHeight,
|
||||||
resizeAxis = when(widgetInfo.resizeMode) {
|
|
||||||
AppWidgetProviderInfo.RESIZE_HORIZONTAL -> ResizeAxis.Horizontal
|
|
||||||
AppWidgetProviderInfo.RESIZE_VERTICAL -> ResizeAxis.Vertical
|
|
||||||
AppWidgetProviderInfo.RESIZE_BOTH -> ResizeAxis.Both
|
|
||||||
else -> ResizeAxis.None
|
|
||||||
},
|
|
||||||
snapToMeasuredWidth = true,
|
snapToMeasuredWidth = true,
|
||||||
onResize = { w, h ->
|
onResize = { w, h ->
|
||||||
resizeWidth = w
|
resizeWidth = w
|
||||||
|
|||||||
@ -58,6 +58,7 @@ import androidx.compose.ui.platform.LocalContext
|
|||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
import androidx.compose.ui.unit.Density
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
@ -216,6 +217,7 @@ class BindAndConfigureAppWidgetActivity : Activity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class BindAndConfigureAppWidgetContract(
|
private class BindAndConfigureAppWidgetContract(
|
||||||
|
private val density: Density,
|
||||||
) : ActivityResultContract<AppWidgetProviderInfo, Widget?>() {
|
) : ActivityResultContract<AppWidgetProviderInfo, Widget?>() {
|
||||||
override fun createIntent(context: Context, input: AppWidgetProviderInfo): Intent {
|
override fun createIntent(context: Context, input: AppWidgetProviderInfo): Intent {
|
||||||
return Intent(context, BindAndConfigureAppWidgetActivity::class.java).apply {
|
return Intent(context, BindAndConfigureAppWidgetActivity::class.java).apply {
|
||||||
@ -234,8 +236,8 @@ private class BindAndConfigureAppWidgetContract(
|
|||||||
return AppWidget(
|
return AppWidget(
|
||||||
id = UUID.randomUUID(),
|
id = UUID.randomUUID(),
|
||||||
config = AppWidgetConfig(
|
config = AppWidgetConfig(
|
||||||
height = widgetProviderInfo.minHeight,
|
height = with(density) { widgetProviderInfo.minHeight.toDp() }.value.toInt(),
|
||||||
width = widgetProviderInfo.minWidth,
|
width = with(density) { widgetProviderInfo.minWidth.toDp() }.value.toInt(),
|
||||||
widgetId = widgetId,
|
widgetId = widgetId,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -262,7 +264,7 @@ fun WidgetPickerSheet(
|
|||||||
val viewModel: WidgetPickerSheetVM = viewModel(factory = WidgetPickerSheetVM.Factory)
|
val viewModel: WidgetPickerSheetVM = viewModel(factory = WidgetPickerSheetVM.Factory)
|
||||||
|
|
||||||
val bindAppWidgetStarter =
|
val bindAppWidgetStarter =
|
||||||
rememberLauncherForActivityResult(BindAndConfigureAppWidgetContract()) {
|
rememberLauncherForActivityResult(BindAndConfigureAppWidgetContract(density)) {
|
||||||
if (it != null) {
|
if (it != null) {
|
||||||
onWidgetSelected(it)
|
onWidgetSelected(it)
|
||||||
onDismiss()
|
onDismiss()
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
|||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.requiredWidth
|
import androidx.compose.foundation.layout.requiredWidth
|
||||||
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.rounded.Warning
|
import androidx.compose.material.icons.rounded.Warning
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
@ -102,9 +103,7 @@ fun AppWidget(
|
|||||||
widgetInfo = widgetInfo,
|
widgetInfo = widgetInfo,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.then(
|
.then(
|
||||||
if (width == null) Modifier.fillMaxWidth() else Modifier.requiredWidth(
|
if (width == null) Modifier.fillMaxWidth() else Modifier.width(width.dp)
|
||||||
width.dp
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
.height(widget.config.height.dp),
|
.height(widget.config.height.dp),
|
||||||
borderless = widget.config.borderless,
|
borderless = widget.config.borderless,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user