diff --git a/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj b/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj
index ae03466f1b4b..e01ecb1e7d09 100644
--- a/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj
+++ b/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj
@@ -19,6 +19,9 @@
+
+
+
diff --git a/src/Controls/tests/DeviceTests/Elements/Image/ImageTests.Android.cs b/src/Controls/tests/DeviceTests/Elements/Image/ImageTests.Android.cs
index f18eb2fd64e4..9c3c7f98e77f 100644
--- a/src/Controls/tests/DeviceTests/Elements/Image/ImageTests.Android.cs
+++ b/src/Controls/tests/DeviceTests/Elements/Image/ImageTests.Android.cs
@@ -6,6 +6,8 @@
using System.Threading.Tasks;
using Android.Graphics.Drawables;
using Microsoft.Maui.Controls;
+using Microsoft.Maui.Graphics;
+using Microsoft.Maui.Handlers;
using Xunit;
namespace Microsoft.Maui.DeviceTests
@@ -37,6 +39,45 @@ await InvokeOnMainThreadAsync(async () =>
await bitmapDrawable1.Bitmap.AssertNotEqualAsync(bitmapDrawable2.Bitmap);
});
}
+
+ [Fact]
+ public async Task ImageSetFromStreamRenders()
+ {
+ SetupBuilder();
+ var layout = new VerticalStackLayout()
+ {
+ HeightRequest = 100,
+ WidthRequest = 100
+ };
+
+ using var stream = GetType().Assembly.GetManifestResourceStream("red-embedded.png");
+
+ var image = new Image
+ {
+ Source = ImageSource.FromStream(() => stream)
+ };
+
+ layout.Add(image);
+
+ await InvokeOnMainThreadAsync(async () =>
+ {
+ var handler = CreateHandler(layout);
+
+ await handler.ToPlatform().AttachAndRun(async () =>
+ {
+ await image.Wait();
+ await handler.ToPlatform().AssertContainsColor(Colors.Red
+#if WINDOWS
+ , handler.MauiContext
+#endif
+ );
+ }
+#if WINDOWS
+ , handler.MauiContext
+#endif
+ );
+ });
+ }
}
// This subclass of memory stream is deliberately set up to trick Glide into using the cached image
diff --git a/src/Controls/tests/DeviceTests/Elements/Image/ImageTests.cs b/src/Controls/tests/DeviceTests/Elements/Image/ImageTests.cs
index a7e8b846f238..8a8684d616e9 100644
--- a/src/Controls/tests/DeviceTests/Elements/Image/ImageTests.cs
+++ b/src/Controls/tests/DeviceTests/Elements/Image/ImageTests.cs
@@ -1,4 +1,5 @@
using System;
+using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Maui.Controls;
diff --git a/src/Controls/tests/DeviceTests/Resources/Images/red-embedded.png b/src/Controls/tests/DeviceTests/Resources/Images/red-embedded.png
new file mode 100644
index 000000000000..3587e2727c39
Binary files /dev/null and b/src/Controls/tests/DeviceTests/Resources/Images/red-embedded.png differ
diff --git a/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/glide/MauiCustomViewTarget.java b/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/glide/MauiCustomViewTarget.java
index 765afdb5060b..1a1f8427f241 100644
--- a/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/glide/MauiCustomViewTarget.java
+++ b/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/glide/MauiCustomViewTarget.java
@@ -46,11 +46,13 @@ public void onResourceReady(@NonNull Drawable resource, @Nullable Transition s
return;
this.completed = true;
- // set the image
- this.view.setImageDrawable(resource);
+ post(() -> {
+ // set the image
+ this.view.setImageDrawable(resource);
- // trigger the callback out of this target
- post(() -> callback.onComplete(true, resource, this::clear));
+ // trigger the callback out of this target
+ callback.onComplete(true, resource, this::clear);
+ });
}
private void post(Runnable runnable) {
diff --git a/src/Core/src/ImageSources/StreamImageSourceService/StreamImageSourceService.Android.cs b/src/Core/src/ImageSources/StreamImageSourceService/StreamImageSourceService.Android.cs
index d31045b4fd73..c42c1be75922 100644
--- a/src/Core/src/ImageSources/StreamImageSourceService/StreamImageSourceService.Android.cs
+++ b/src/Core/src/ImageSources/StreamImageSourceService/StreamImageSourceService.Android.cs
@@ -21,7 +21,7 @@ public partial class StreamImageSourceService
Stream? stream = null;
try
{
- stream = await streamImageSource.GetStreamAsync(cancellationToken).ConfigureAwait(false);
+ stream = await streamImageSource.GetStreamAsync(cancellationToken);
var callback = new ImageLoaderCallback();
diff --git a/src/Core/src/maui.aar b/src/Core/src/maui.aar
index 42aa7bc115f5..3c78fc52469e 100644
Binary files a/src/Core/src/maui.aar and b/src/Core/src/maui.aar differ