Fix NRE when background color of button set in FormsApplicationActivity (#1010)

This commit is contained in:
E.Z. Hart 2017-06-23 18:29:38 -06:00 коммит произвёл GitHub
Родитель 4847e4b26a
Коммит eb2a2177b3
4 изменённых файлов: 55 добавлений и 6 удалений

Просмотреть файл

@ -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
}
}

Просмотреть файл

@ -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" />

Просмотреть файл

@ -140,7 +140,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
if (Element == null || Control == null)
return;
_backgroundTracker.UpdateBackgroundColor();
_backgroundTracker?.UpdateBackgroundColor();
}
void UpdateAll()

Просмотреть файл

@ -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()