From d4759339cfc451102f8db65896a13fad59ae5ad6 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Thu, 18 Apr 2024 20:44:37 +0200 Subject: [PATCH] Widget sizes are using px, not dp --- .../ui/component/DragResizeHandle.kt | 4 +- .../launcher/sheets/ConfigureWidgetSheet.kt | 42 +++++-------------- .../ui/launcher/sheets/WidgetPickerSheet.kt | 8 ++-- .../ui/launcher/widgets/external/AppWidget.kt | 5 +-- 4 files changed, 20 insertions(+), 39 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/component/DragResizeHandle.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/component/DragResizeHandle.kt index 54a11738..884f9b66 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/component/DragResizeHandle.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/component/DragResizeHandle.kt @@ -68,8 +68,8 @@ fun DragResizeHandle( Box( modifier = Modifier - .then(if (width.isUnspecified) Modifier.fillMaxWidth() else Modifier.requiredWidth(width)) - .then(if (height.isUnspecified) Modifier.fillMaxHeight() else Modifier.requiredHeight(height)) + .then(if (width.isUnspecified) Modifier.fillMaxWidth() else Modifier.width(width)) + .then(if (height.isUnspecified) Modifier.fillMaxHeight() else Modifier.height(height)) .align(alignment) .border(1.dp, color = MaterialTheme.colorScheme.primary, MaterialTheme.shapes.small) ) { diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt index c552bfa0..58cf6c70 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt @@ -13,25 +13,18 @@ import androidx.appcompat.app.AppCompatActivity import androidx.browser.customtabs.CustomTabColorSchemeParams import androidx.browser.customtabs.CustomTabsIntent 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.awaitFirstDown -import androidx.compose.foundation.gestures.draggable -import androidx.compose.foundation.gestures.rememberDraggableState 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.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredSize -import androidx.compose.foundation.layout.requiredWidth import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons 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.LinkOff import androidx.compose.material.icons.rounded.OpenInNew -import androidx.compose.material.icons.rounded.UnfoldMore import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Divider import androidx.compose.material3.HorizontalDivider @@ -48,20 +40,14 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedCard -import androidx.compose.material3.OutlinedTextField -import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Text 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.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue 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.pointerInput import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLifecycleOwner 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.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.Preference 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.locals.LocalDarkTheme 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.WeatherWidget import de.mm20.launcher2.widgets.Widget -import kotlinx.coroutines.launch import org.koin.androidx.compose.get import java.time.ZonedDateTime import java.time.format.DateTimeFormatter @@ -367,7 +350,10 @@ fun ColumnScope.ConfigureAppWidget( widgetId = widget.config.widgetId, modifier = Modifier .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) .align(Alignment.TopCenter) .pointerInput(Unit) { @@ -382,23 +368,23 @@ fun ColumnScope.ConfigureAppWidget( ) val maxWidth = if (isAtLeastApiLevel(31)) { - widgetInfo.maxResizeWidth.takeIf { it > 0 }?.dp ?: Dp.Unspecified + widgetInfo.maxResizeWidth.takeIf { it > 0 }?.toDp() ?: Dp.Unspecified } else Dp.Unspecified val maxHeight = if (isAtLeastApiLevel(31)) { - widgetInfo.maxResizeHeight.takeIf { it > 0 }?.dp ?: 2000.dp + widgetInfo.maxResizeHeight.takeIf { it > 0 }?.toDp() ?: 2000.dp } else 2000.dp val minWidth = if (widgetInfo.minResizeWidth in 1..widgetInfo.minWidth) { - widgetInfo.minResizeWidth.dp + widgetInfo.minResizeWidth.toDp() } else { - widgetInfo.minWidth.dp + widgetInfo.minWidth.toDp() } val minHeight = if (widgetInfo.minResizeHeight in 1..widgetInfo.minHeight) { - widgetInfo.minResizeHeight.dp + widgetInfo.minResizeHeight.toDp() } else { - widgetInfo.minHeight.dp + widgetInfo.minHeight.toDp() } DragResizeHandle( @@ -409,12 +395,6 @@ fun ColumnScope.ConfigureAppWidget( minHeight = minHeight, maxWidth = maxWidth, 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, onResize = { w, h -> resizeWidth = w diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/WidgetPickerSheet.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/WidgetPickerSheet.kt index 7dbbdaf3..9471b893 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/WidgetPickerSheet.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/WidgetPickerSheet.kt @@ -58,6 +58,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import coil.compose.AsyncImage @@ -216,6 +217,7 @@ class BindAndConfigureAppWidgetActivity : Activity() { } private class BindAndConfigureAppWidgetContract( + private val density: Density, ) : ActivityResultContract() { override fun createIntent(context: Context, input: AppWidgetProviderInfo): Intent { return Intent(context, BindAndConfigureAppWidgetActivity::class.java).apply { @@ -234,8 +236,8 @@ private class BindAndConfigureAppWidgetContract( return AppWidget( id = UUID.randomUUID(), config = AppWidgetConfig( - height = widgetProviderInfo.minHeight, - width = widgetProviderInfo.minWidth, + height = with(density) { widgetProviderInfo.minHeight.toDp() }.value.toInt(), + width = with(density) { widgetProviderInfo.minWidth.toDp() }.value.toInt(), widgetId = widgetId, ), ) @@ -262,7 +264,7 @@ fun WidgetPickerSheet( val viewModel: WidgetPickerSheetVM = viewModel(factory = WidgetPickerSheetVM.Factory) val bindAppWidgetStarter = - rememberLauncherForActivityResult(BindAndConfigureAppWidgetContract()) { + rememberLauncherForActivityResult(BindAndConfigureAppWidgetContract(density)) { if (it != null) { onWidgetSelected(it) onDismiss() diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/external/AppWidget.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/external/AppWidget.kt index c58d2676..4097f1fb 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/external/AppWidget.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/external/AppWidget.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.requiredWidth +import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Warning import androidx.compose.material3.Button @@ -102,9 +103,7 @@ fun AppWidget( widgetInfo = widgetInfo, modifier = Modifier .then( - if (width == null) Modifier.fillMaxWidth() else Modifier.requiredWidth( - width.dp - ) + if (width == null) Modifier.fillMaxWidth() else Modifier.width(width.dp) ) .height(widget.config.height.dp), borderless = widget.config.borderless,