From 983f50a81465c8c18ff7049be8608710efcad376 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Fri, 14 Feb 2025 00:01:46 +0100 Subject: [PATCH] minor --- .../deckers/thibault/aves/HomeWidgetProvider.kt | 3 ++- .../channel/calls/fetchers/SvgRegionFetcher.kt | 3 ++- .../calls/window/ActivityWindowHandler.kt | 6 +++++- .../channel/calls/window/ServiceWindowHandler.kt | 4 ++++ .../aves/channel/calls/window/WindowHandler.kt | 3 +++ .../thibault/aves/decoder/SvgGlideModule.kt | 3 ++- lib/services/window_service.dart | 16 +++++++++++++++- lib/widgets/about/bug_report.dart | 3 ++- lib/widgets/debug/capabilities.dart | 3 +++ 9 files changed, 38 insertions(+), 6 deletions(-) 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 4464594b5..f6af894ed 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt @@ -15,6 +15,7 @@ import android.os.Looper import android.util.Log import android.util.SizeF import android.widget.RemoteViews +import androidx.core.graphics.createBitmap import androidx.core.net.toUri import app.loup.streams_channel.StreamsChannel import deckers.thibault.aves.channel.AvesByteSendingMethodCodec @@ -218,7 +219,7 @@ class HomeWidgetProvider : AppWidgetProvider() { val heightPx = (sizeDip.height * devicePixelRatio).roundToInt() try { - val bitmap = Bitmap.createBitmap(widthPx, heightPx, Bitmap.Config.ARGB_8888).also { + val bitmap = createBitmap(widthPx, heightPx, Bitmap.Config.ARGB_8888).also { bitmaps.add(it) it.copyPixelsFromBuffer(ByteBuffer.wrap(bytes)) } diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/SvgRegionFetcher.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/SvgRegionFetcher.kt index 6b3d7f9aa..d4410030c 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/SvgRegionFetcher.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/SvgRegionFetcher.kt @@ -6,6 +6,7 @@ import android.graphics.Canvas import android.graphics.Rect import android.graphics.RectF import android.net.Uri +import androidx.core.graphics.createBitmap import com.caverock.androidsvg.PreserveAspectRatio import com.caverock.androidsvg.RenderOptions import com.caverock.androidsvg.SVG @@ -100,7 +101,7 @@ class SvgRegionFetcher internal constructor( return } - var bitmap = Bitmap.createBitmap( + var bitmap = createBitmap( targetBitmapWidth + bleedX * 2, targetBitmapHeight + bleedY * 2, Bitmap.Config.ARGB_8888 diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/ActivityWindowHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/ActivityWindowHandler.kt index 065d5ba30..eadcbe94b 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/ActivityWindowHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/ActivityWindowHandler.kt @@ -77,8 +77,12 @@ class ActivityWindowHandler(private val activity: Activity) : WindowHandler(acti ) } + override fun supportsWideGamut(call: MethodCall, result: MethodChannel.Result) { + result.success(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && activity.resources.configuration.isScreenWideColorGamut) + } + override fun supportsHdr(call: MethodCall, result: MethodChannel.Result) { - result.success(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && activity.getDisplayCompat()?.isHdr ?: false) + result.success(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && activity.resources.configuration.isScreenHdr) } override fun setHdrColorMode(call: MethodCall, result: MethodChannel.Result) { diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/ServiceWindowHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/ServiceWindowHandler.kt index 347669239..0a5eb705e 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/ServiceWindowHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/ServiceWindowHandler.kt @@ -29,6 +29,10 @@ class ServiceWindowHandler(service: Service) : WindowHandler(service) { result.success(HashMap()) } + override fun supportsWideGamut(call: MethodCall, result: MethodChannel.Result) { + result.success(false) + } + override fun supportsHdr(call: MethodCall, result: MethodChannel.Result) { result.success(false) } diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/WindowHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/WindowHandler.kt index 051451024..a923a1ea7 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/WindowHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/window/WindowHandler.kt @@ -18,6 +18,7 @@ abstract class WindowHandler(private val contextWrapper: ContextWrapper) : Metho "requestOrientation" -> Coresult.safe(call, result, ::requestOrientation) "isCutoutAware" -> Coresult.safe(call, result, ::isCutoutAware) "getCutoutInsets" -> Coresult.safe(call, result, ::getCutoutInsets) + "supportsWideGamut" -> Coresult.safe(call, result, ::supportsWideGamut) "supportsHdr" -> Coresult.safe(call, result, ::supportsHdr) "setHdrColorMode" -> Coresult.safe(call, result, ::setHdrColorMode) else -> result.notImplemented() @@ -46,6 +47,8 @@ abstract class WindowHandler(private val contextWrapper: ContextWrapper) : Metho abstract fun getCutoutInsets(call: MethodCall, result: MethodChannel.Result) + abstract fun supportsWideGamut(call: MethodCall, result: MethodChannel.Result) + abstract fun supportsHdr(call: MethodCall, result: MethodChannel.Result) abstract fun setHdrColorMode(call: MethodCall, result: MethodChannel.Result) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/decoder/SvgGlideModule.kt b/android/app/src/main/kotlin/deckers/thibault/aves/decoder/SvgGlideModule.kt index 0a8cef472..fc771398e 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/decoder/SvgGlideModule.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/decoder/SvgGlideModule.kt @@ -22,6 +22,7 @@ import deckers.thibault.aves.metadata.SVGParserBufferedInputStream import deckers.thibault.aves.metadata.SvgHelper.normalizeSize import deckers.thibault.aves.utils.StorageUtils import kotlin.math.ceil +import androidx.core.graphics.createBitmap @GlideModule class SvgGlideModule : LibraryGlideModule() { @@ -68,7 +69,7 @@ internal class SvgFetcher(val model: SvgImage, val width: Int, val height: Int) bitmapWidth = width bitmapHeight = ceil(svgHeight * width / svgWidth).toInt() } - val bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888) + val bitmap = createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) svg.renderToCanvas(canvas) diff --git a/lib/services/window_service.dart b/lib/services/window_service.dart index ca53ca17e..2aa2a469e 100644 --- a/lib/services/window_service.dart +++ b/lib/services/window_service.dart @@ -18,6 +18,8 @@ abstract class WindowService { Future getCutoutInsets(); + Future supportsWideGamut(); + Future supportsHdr(); Future setHdrColorMode(bool on); @@ -26,7 +28,7 @@ abstract class WindowService { class PlatformWindowService implements WindowService { static const _platform = MethodChannel('deckers.thibault/aves/window'); - bool? _isCutoutAware, _supportsHdr; + bool? _isCutoutAware, _supportsHdr, _supportsWideGamut; @override Future isActivity() async { @@ -126,6 +128,18 @@ class PlatformWindowService implements WindowService { return EdgeInsets.zero; } + @override + Future supportsWideGamut() async { + if (_supportsWideGamut != null) return SynchronousFuture(_supportsWideGamut!); + try { + final result = await _platform.invokeMethod('supportsWideGamut'); + _supportsWideGamut = result as bool?; + } on PlatformException catch (e, stack) { + await reportService.recordError(e, stack); + } + return _supportsWideGamut ?? false; + } + @override Future supportsHdr() async { if (_supportsHdr != null) return SynchronousFuture(_supportsHdr!); diff --git a/lib/widgets/about/bug_report.dart b/lib/widgets/about/bug_report.dart index 98cbe8bf0..a1b7c3333 100644 --- a/lib/widgets/about/bug_report.dart +++ b/lib/widgets/about/bug_report.dart @@ -157,6 +157,7 @@ class _BugReportState extends State with FeedbackMixin { final mediaQuery = MediaQuery.of(context); final view = View.of(context); final supportsHdr = await windowService.supportsHdr(); + final supportsWideGamut = await windowService.supportsWideGamut(); final connections = await Connectivity().checkConnectivity(); final storageVolumes = await storageService.getStorageVolumes(); final storageGrants = await storageService.getGrantedDirectories(); @@ -169,7 +170,7 @@ class _BugReportState extends State with FeedbackMixin { 'Android build: ${androidInfo.display}', 'Device: ${androidInfo.manufacturer} ${androidInfo.model}', 'Display: pixel ratio=${view.devicePixelRatio}, logical=${mediaQuery.size.width}x${mediaQuery.size.height}, physical=${view.physicalSize.width}x${view.physicalSize.height}', - 'Support: dynamic colors=${device.isDynamicColorAvailable}, geocoder=${device.hasGeocoder}, HDR=$supportsHdr', + 'Support: dynamic colors=${device.isDynamicColorAvailable}, geocoder=${device.hasGeocoder}, HDR=$supportsHdr, wide gamut=$supportsWideGamut', 'Mobile services: ${mobileServices.isServiceAvailable ? 'ready' : 'not available'}', 'Connectivity: ${connections.map((v) => v.name).join(', ')}', 'System locales: ${WidgetsBinding.instance.platformDispatcher.locales.join(', ')}', diff --git a/lib/widgets/debug/capabilities.dart b/lib/widgets/debug/capabilities.dart index d8d7c9261..449d8f29f 100644 --- a/lib/widgets/debug/capabilities.dart +++ b/lib/widgets/debug/capabilities.dart @@ -27,6 +27,7 @@ class _DebugCapabilitiesSectionState extends State wit windowService.isCutoutAware(), windowService.isRotationLocked(), windowService.supportsHdr(), + windowService.supportsWideGamut(), ]); } @@ -72,6 +73,7 @@ class _DebugCapabilitiesSectionState extends State wit bool isCutoutAware, bool isRotationLocked, bool supportsHdr, + bool supportsWideGamut, ] = data; return Padding( @@ -85,6 +87,7 @@ class _DebugCapabilitiesSectionState extends State wit 'isCutoutAware': '$isCutoutAware', 'isRotationLocked': '$isRotationLocked', 'supportsHdr': '$supportsHdr', + 'supportsWideGamut': '$supportsWideGamut', }, ), ],