diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt b/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt index 81933f251..3fa77730b 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt @@ -104,7 +104,11 @@ class HomeWidgetProvider : AppWidgetProvider() { "drawEntryImage" to drawEntryImage, "reuseEntry" to reuseEntry, "isSystemThemeDark" to isNightModeOn, - ), object : MethodChannel.Result { + ).apply { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + put("cornerRadiusPx", context.resources.getDimension(android.R.dimen.system_app_widget_background_radius)) + } + }, object : MethodChannel.Result { override fun success(result: Any?) { cont.resume(result) } diff --git a/lib/model/settings/enums/widget_shape.dart b/lib/model/settings/enums/widget_shape.dart index 28a64f3ab..c38d40662 100644 --- a/lib/model/settings/enums/widget_shape.dart +++ b/lib/model/settings/enums/widget_shape.dart @@ -3,11 +3,13 @@ import 'package:aves_model/aves_model.dart'; import 'package:flutter/painting.dart'; extension ExtraWidgetShape on WidgetShape { - Path path(Size widgetSize, double devicePixelRatio) { + static const double _defaultCornerRadius = 24; + + Path path(Size widgetSize, double devicePixelRatio, {double? cornerRadiusPx}) { final rect = Offset.zero & widgetSize; switch (this) { case WidgetShape.rrect: - return Path()..addRRect(BorderRadius.circular(24 * devicePixelRatio).toRRect(rect)); + return Path()..addRRect(BorderRadius.circular(cornerRadiusPx ?? (_defaultCornerRadius * devicePixelRatio)).toRRect(rect)); case WidgetShape.circle: return Path() ..addOval(Rect.fromCircle( diff --git a/lib/widget_common.dart b/lib/widget_common.dart index fd20ac7eb..bf115cd07 100644 --- a/lib/widget_common.dart +++ b/lib/widget_common.dart @@ -40,6 +40,7 @@ Future> _drawWidget(dynamic args) async { final widgetId = args['widgetId'] as int; final widthPx = args['widthPx'] as int; final heightPx = args['heightPx'] as int; + final cornerRadiusPx = args['cornerRadiusPx'] as double?; final devicePixelRatio = args['devicePixelRatio'] as double; final drawEntryImage = args['drawEntryImage'] as bool; final reuseEntry = args['reuseEntry'] as bool; @@ -56,6 +57,7 @@ Future> _drawWidget(dynamic args) async { final bytes = await painter.drawWidget( widthPx: widthPx, heightPx: heightPx, + cornerRadiusPx: cornerRadiusPx, outline: outline, shape: settings.getWidgetShape(widgetId), ); diff --git a/lib/widgets/home_widget.dart b/lib/widgets/home_widget.dart index 38f6dca7f..10c2c30f4 100644 --- a/lib/widgets/home_widget.dart +++ b/lib/widgets/home_widget.dart @@ -29,6 +29,7 @@ class HomeWidgetPainter { Future drawWidget({ required int widthPx, required int heightPx, + required double? cornerRadiusPx, required Color? outline, required WidgetShape shape, ui.ImageByteFormat format = ui.ImageByteFormat.rawRgba, @@ -45,7 +46,7 @@ class HomeWidgetPainter { final recorder = ui.PictureRecorder(); final rect = Offset.zero & widgetSizePx; final canvas = Canvas(recorder, rect); - final path = shape.path(widgetSizePx, devicePixelRatio); + final path = shape.path(widgetSizePx, devicePixelRatio, cornerRadiusPx: cornerRadiusPx); canvas.clipPath(path); if (entryImage != null) { canvas.drawImage(entryImage, Offset(widgetSizePx.width - entryImage.width, widgetSizePx.height - entryImage.height) / 2, Paint());