summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2016-08-02 14:54:57 -0600
committerJason Smith <jason.smith@xamarin.com>2016-08-02 13:54:57 -0700
commit34048b7bb4e8bf55c712ffd92303cf260c491c0e (patch)
tree19236fb4e72b8833c87e19fd15d0958b947764fc /Xamarin.Forms.Controls.Issues
parent08e282350cb3f1c2345125682f14934111af2f9c (diff)
downloadxamarin-forms-34048b7bb4e8bf55c712ffd92303cf260c491c0e.tar.gz
xamarin-forms-34048b7bb4e8bf55c712ffd92303cf260c491c0e.tar.bz2
xamarin-forms-34048b7bb4e8bf55c712ffd92303cf260c491c0e.zip
Change SourceChanged event on ImageSource to weak event to allow Images (#268)
referencing application-wide StaticResource ImageSources to be GCed
Diffstat (limited to 'Xamarin.Forms.Controls.Issues')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069.cs74
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069_Page.xaml59
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069_Page.xaml.cs36
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems11
4 files changed, 180 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069.cs
new file mode 100644
index 00000000..7abfa5d3
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069.cs
@@ -0,0 +1,74 @@
+using System;
+using Xamarin.Forms.Controls.Issues;
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+
+namespace Xamarin.Forms.Controls
+{
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Bugzilla, 42069, "Garbage Collector can not collect pages that use ImageSource as a StaticResource",
+ PlatformAffected.All)]
+ public class Bugzilla42069 : TestNavigationPage
+ {
+ protected override void Init()
+ {
+ if (Application.Current.Resources == null)
+ {
+ Application.Current.Resources = new ResourceDictionary();
+ }
+
+ if (!Application.Current.Resources.ContainsKey("SomeSmallImage"))
+ {
+ var smallImage = new OnPlatform<ImageSource> {
+ Android = ImageSource.FromFile("coffee.png"),
+ WinPhone = ImageSource.FromFile("bank.png"),
+ iOS = ImageSource.FromFile("coffee.png")
+ };
+
+ Application.Current.Resources.Add("SomeSmallImage", smallImage);
+ }
+
+ const string instructions1 = @"Tap the Start button and follow the instructions on the next page.";
+ string instructions2 =
+ $"When you return to this page, tap the Collect button. The message \n'{Bugzilla42069_Page.DestructorMessage}'\n should appear at least once in the debug output.";
+
+ var label1 = new Label { Text = instructions1 };
+ var label2 = new Label { Text = instructions2, HorizontalTextAlignment = TextAlignment.Center };
+
+ var startButton = new Button { Text = "Start" };
+ startButton.Clicked += (sender, args) =>
+ {
+ // We have to do the push-pop-push dance because NavigationPage
+ // holds a reference to its last page for unrelated reasons; our concern
+ // here is that the first Bugzilla42069_Page that we pushed gets collected
+ PushAsync(new Bugzilla42069_Page(), false);
+ PopAsync(false);
+ PushAsync(new Bugzilla42069_Page(), false);
+ };
+
+ var collectButton = new Button { Text = "Collect" };
+ collectButton.Clicked += (sender, args) =>
+ {
+ GC.Collect();
+ GC.Collect();
+ GC.Collect();
+ };
+
+ var startPage = new ContentPage
+ {
+ Content = new StackLayout
+ {
+ Children =
+ {
+ label1,
+ startButton,
+ label2,
+ collectButton
+ }
+ }
+ };
+
+ PushAsync(startPage);
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069_Page.xaml b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069_Page.xaml
new file mode 100644
index 00000000..5f98e198
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069_Page.xaml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
+ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
+ x:Class="Xamarin.Forms.Controls.Issues.Bugzilla42069_Page">
+ <StackLayout>
+ <Image x:Name="ChangingImage" />
+ <Button x:Name="Button2" Text="Change Image"></Button>
+ <Label Text="Tap the 'Change Image' button; the image at the top should toggle between two images. If the image doesn't toggle, the test has failed." ></Label>
+ <Label Text="There should be several instances of the same image below." ></Label>
+ <Button x:Name="Button" Text="Back"></Button>
+ <Label Text="Tap the 'Back' button." ></Label>
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage} "/>
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ <Image Source="{StaticResource SomeSmallImage}" />
+ </StackLayout>
+</ContentPage> \ No newline at end of file
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069_Page.xaml.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069_Page.xaml.cs
new file mode 100644
index 00000000..2031e56c
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla42069_Page.xaml.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Diagnostics;
+using System.Threading;
+
+namespace Xamarin.Forms.Controls.Issues
+{
+ public partial class Bugzilla42069_Page : ContentPage
+ {
+ public const string DestructorMessage = ">>>>>>>>>> Bugzilla42069_Page destructor <<<<<<<<<<";
+
+ public Bugzilla42069_Page()
+ {
+ InitializeComponent();
+
+ ImageWhichChanges = ImageSource.FromFile("oasissmall.jpg") as FileImageSource;
+
+ ChangingImage.SetBinding(Image.SourceProperty, nameof(ImageWhichChanges));
+
+ Button.Clicked += (sender, args) => Navigation.PopAsync(false);
+
+ Button2.Clicked += (sender, args) =>
+ {
+ ImageWhichChanges.File = ImageWhichChanges.File == "bank.png" ? "oasissmall.jpg" : "bank.png";
+ };
+
+ BindingContext = this;
+ }
+
+ ~Bugzilla42069_Page()
+ {
+ Debug.WriteLine(DestructorMessage);
+ }
+
+ public FileImageSource ImageWhichChanges { get; set; }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
index 6531b47d..a98b97dc 100644
--- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
@@ -110,6 +110,11 @@
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla40998.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla41205.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla41424.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42069.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42069_Page.xaml.cs">
+ <DependentUpon>Bugzilla42069_Page.xaml</DependentUpon>
+ <SubType>Code</SubType>
+ </Compile>
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla42074.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla42075.cs" />
<Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" />
@@ -544,4 +549,10 @@
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
</ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="$(MSBuildThisFileDirectory)Bugzilla42069_Page.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:UpdateDesignTimeXaml</Generator>
+ </EmbeddedResource>
+ </ItemGroup>
</Project> \ No newline at end of file