summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2017-06-23 18:29:38 -0600
committerGitHub <noreply@github.com>2017-06-23 18:29:38 -0600
commiteb2a2177b3761efbc9b6563d4621ab4a19300837 (patch)
tree7f6fc3bba203bdcf33059a283cb8d9e37051fd2d
parent4847e4b26a0b7808b6af47854946ee10fc46adc2 (diff)
downloadxamarin-forms-eb2a2177b3761efbc9b6563d4621ab4a19300837.tar.gz
xamarin-forms-eb2a2177b3761efbc9b6563d4621ab4a19300837.tar.bz2
xamarin-forms-eb2a2177b3761efbc9b6563d4621ab4a19300837.zip
Fix NRE when background color of button set in FormsApplicationActivity (#1010)
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ButtonBackgroundColorTest.cs46
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems1
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs2
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs12
4 files changed, 55 insertions, 6 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ButtonBackgroundColorTest.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ButtonBackgroundColorTest.cs
new file mode 100644
index 00000000..b366efce
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ButtonBackgroundColorTest.cs
@@ -0,0 +1,46 @@
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+
+#if UITEST
+using Xamarin.Forms.Core.UITests;
+using Xamarin.UITest;
+using NUnit.Framework;
+
+#endif
+
+namespace Xamarin.Forms.Controls.Issues
+{
+#if UITEST
+ [Category(UITestCategories.Button)]
+#endif
+
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Bugzilla, 57717, "Setting background color on Button in Android FormsApplicationActivity causes NRE", PlatformAffected.Android)]
+ public class ButtonBackgroundColorTest : TestContentPage
+ {
+ const string ButtonText = "I am a button";
+
+ protected override void Init()
+ {
+ var layout = new StackLayout();
+
+ var instructions = new Label { Text = "If you can see this, the test has passed." };
+
+ var button = new Button { Text = ButtonText, BackgroundColor = Color.CornflowerBlue };
+
+ layout.Children.Add(instructions);
+ layout.Children.Add(button);
+
+ Content = layout;
+ }
+
+#if UITEST
+ [Test]
+ public void ButtonBackgroundColorAutomatedTest()
+ {
+ // With the original bug in place, we'll crash before we get this far
+ RunningApp.WaitForElement(ButtonText);
+ }
+#endif
+ }
+} \ 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 37e3fc88..d11a4c61 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
@@ -213,6 +213,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla55912.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla57317.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla57114.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)ButtonBackgroundColorTest.cs" />
<Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" />
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs
index e7e9a3bf..9f336a24 100644
--- a/Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/AppCompat/ButtonRenderer.cs
@@ -140,7 +140,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
if (Element == null || Control == null)
return;
- _backgroundTracker.UpdateBackgroundColor();
+ _backgroundTracker?.UpdateBackgroundColor();
}
void UpdateAll()
diff --git a/Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs
index da4ec0ba..0aac4edb 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs
@@ -96,13 +96,12 @@ namespace Xamarin.Forms.Platform.Android
_textColorSwitcher = new TextColorSwitcher(button.TextColors);
button.AddOnAttachStateChangeListener(this);
}
- if (_backgroundTracker == null)
- _backgroundTracker = new ButtonBackgroundTracker(Element, Control);
}
+
+ if (_backgroundTracker == null)
+ _backgroundTracker = new ButtonBackgroundTracker(Element, Control);
else
- {
_backgroundTracker.Button = e.NewElement;
- }
UpdateAll();
}
@@ -127,7 +126,10 @@ namespace Xamarin.Forms.Platform.Android
protected override void UpdateBackgroundColor()
{
- _backgroundTracker.UpdateBackgroundColor();
+ if (Element == null || Control == null)
+ return;
+
+ _backgroundTracker?.UpdateBackgroundColor();
}
void UpdateAll()