From 6cce7b780032d7d9b29f21f3e21a0110e236cc69 Mon Sep 17 00:00:00 2001 From: Andres Pineda Date: Wed, 9 Apr 2025 18:07:07 -0400 Subject: [PATCH 1/2] chore: fix sample --- .../SamplesApp.Skia.netcoremobile/Android/Main.Android.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SamplesApp/SamplesApp.Skia.netcoremobile/Android/Main.Android.cs b/src/SamplesApp/SamplesApp.Skia.netcoremobile/Android/Main.Android.cs index b58ae0236551..7bc8c4b38cc2 100644 --- a/src/SamplesApp/SamplesApp.Skia.netcoremobile/Android/Main.Android.cs +++ b/src/SamplesApp/SamplesApp.Skia.netcoremobile/Android/Main.Android.cs @@ -10,7 +10,6 @@ using Android.Views; using Android.Widget; using Microsoft.UI.Xaml.Media; -using Com.Nostra13.Universalimageloader.Core; using Windows.Foundation.Metadata; using Uno.Extensions; using Windows.ApplicationModel.Activation; From 109d06a21351bce3ca3e92342dce06e0cb6b7a26 Mon Sep 17 00:00:00 2001 From: Andres Pineda Date: Wed, 9 Apr 2025 18:07:44 -0400 Subject: [PATCH 2/2] chore: complete measure insets --- .../Microsoft/UI/Xaml/LayoutProvider.cs | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/Uno.UI.Runtime.Skia.Android/Microsoft/UI/Xaml/LayoutProvider.cs b/src/Uno.UI.Runtime.Skia.Android/Microsoft/UI/Xaml/LayoutProvider.cs index b2d71682e1e9..e3de086cfe9a 100644 --- a/src/Uno.UI.Runtime.Skia.Android/Microsoft/UI/Xaml/LayoutProvider.cs +++ b/src/Uno.UI.Runtime.Skia.Android/Microsoft/UI/Xaml/LayoutProvider.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Text; using Android.App; using Android.Graphics; using Android.Graphics.Drawables; @@ -10,10 +8,7 @@ using AndroidX.Core.View; using Uno.Disposables; using Uno.UI.Extensions; -using Windows.Devices.Sensors; -using Windows.Foundation; using Windows.Graphics.Display; -using Windows.UI.ViewManagement; using Microsoft.UI.Xaml; using Rect = Android.Graphics.Rect; @@ -36,11 +31,14 @@ internal class LayoutProvider private readonly Activity _activity; private readonly GlobalLayoutProvider _adjustNothingLayoutProvider, _adjustResizeLayoutProvider; + private double _cachedDensity; public LayoutProvider(Activity activity) { this._activity = activity; + _cachedDensity = GetScale(); + _adjustNothingLayoutProvider = new GlobalLayoutProvider(activity, null!, null!) { SoftInputMode = SoftInput.AdjustNothing | SoftInput.StateUnchanged, @@ -138,11 +136,37 @@ private void MeasureLayout(PopupWindow sender) private void MeasureInsets(PopupWindow sender, WindowInsetsCompat insets) { - //var systemInsets = insets.GetInsets(WindowInsetsCompat.Type.SystemBars()) - // .ToThickness() - // .PhysicalToLogicalPixels(); + var size = insets.GetInsets(WindowInsetsCompat.Type.SystemBars()) + .ToThickness(); + + var systemInsets = PhysicalToLogicalPixels(size); + + InsetsChanged?.Invoke(systemInsets); + } + + private Thickness PhysicalToLogicalPixels(Thickness size) + { + return new Thickness( + top: PhysicalToLogicalPixels(size.Top), + left: PhysicalToLogicalPixels(size.Left), + right: PhysicalToLogicalPixels(size.Right), + bottom: PhysicalToLogicalPixels(size.Bottom) + ); + } + + private double PhysicalToLogicalPixels(double value) => value / _cachedDensity; + + private float GetScale() + { + float cachedDensity = 0; + + if (Android.App.Application.Context.Resources is { } resources && resources.DisplayMetrics is not null) + { + using Android.Util.DisplayMetrics displayMetrics = resources.DisplayMetrics; + cachedDensity = displayMetrics.Density; + } - InsetsChanged?.Invoke(default); + return cachedDensity; } private class GlobalLayoutProvider : PopupWindow, ViewTreeObserver.IOnGlobalLayoutListener, AndroidX.Core.View.IOnApplyWindowInsetsListener