* Automated test for issue * Fix empty view swapping for Android (fixes #5535) * Remove private modifier * Account for null Flags when setting flags for test * Fix rebase issue
This commit is contained in:
Родитель
b181e019c9
Коммит
d1dc874dab
|
@ -0,0 +1,51 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
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.CollectionView)]
|
||||||
|
#endif
|
||||||
|
[Preserve(AllMembers = true)]
|
||||||
|
[Issue(IssueTracker.Github, 5535, "CollectionView: Swapping EmptyViews has no effect",
|
||||||
|
PlatformAffected.iOS | PlatformAffected.Android)]
|
||||||
|
public class Issue5535 : TestNavigationPage
|
||||||
|
{
|
||||||
|
protected override void Init()
|
||||||
|
{
|
||||||
|
#if APP
|
||||||
|
Device.SetFlags(new List<string>(Device.Flags ?? new List<string>()) { "CollectionView_Experimental" });
|
||||||
|
|
||||||
|
PushAsync(new GalleryPages.CollectionViewGalleries.EmptyViewGalleries.EmptyViewSwapGallery());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UITEST
|
||||||
|
[Test]
|
||||||
|
public void SwappingEmptyViews()
|
||||||
|
{
|
||||||
|
RunningApp.WaitForElement("FilterItems");
|
||||||
|
RunningApp.Tap("FilterItems");
|
||||||
|
RunningApp.EnterText("abcdef");
|
||||||
|
RunningApp.PressEnter();
|
||||||
|
|
||||||
|
// Default empty view
|
||||||
|
RunningApp.WaitForElement("Nothing to see here.");
|
||||||
|
|
||||||
|
RunningApp.Tap("ToggleEmptyView");
|
||||||
|
|
||||||
|
// Other empty view
|
||||||
|
RunningApp.WaitForElement("No results matched your filter.");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
|
@ -449,6 +449,7 @@
|
||||||
<DependentUpon>Issue5003.xaml</DependentUpon>
|
<DependentUpon>Issue5003.xaml</DependentUpon>
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Issue5535.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)LegacyComponents\NonAppCompatSwitch.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)LegacyComponents\NonAppCompatSwitch.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)MapsModalCrash.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)MapsModalCrash.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)ModalActivityIndicatorTest.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)ModalActivityIndicatorTest.cs" />
|
||||||
|
|
|
@ -34,11 +34,11 @@
|
||||||
<RowDefinition Height="*"></RowDefinition>
|
<RowDefinition Height="*"></RowDefinition>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<SearchBar x:Name="SearchBar" Placeholder="Filter" />
|
<SearchBar x:Name="SearchBar" Placeholder="Filter" AutomationId="FilterItems" />
|
||||||
|
|
||||||
<StackLayout Orientation="Horizontal" Grid.Row="1">
|
<StackLayout Orientation="Horizontal" Grid.Row="1">
|
||||||
<Label Text="Toggle Between EmptyViews"/>
|
<Label Text="Toggle Between EmptyViews"/>
|
||||||
<Switch x:Name="EmptyViewSwitch"/>
|
<Switch x:Name="EmptyViewSwitch" AutomationId="ToggleEmptyView"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
<CollectionView x:Name="CollectionView" Grid.Row="2">
|
<CollectionView x:Name="CollectionView" Grid.Row="2">
|
||||||
|
|
|
@ -10,10 +10,35 @@ namespace Xamarin.Forms.Platform.Android
|
||||||
{
|
{
|
||||||
public class EmptyViewAdapter : RecyclerView.Adapter
|
public class EmptyViewAdapter : RecyclerView.Adapter
|
||||||
{
|
{
|
||||||
public object EmptyView { get; set; }
|
int _itemViewType;
|
||||||
public DataTemplate EmptyViewTemplate { get; set; }
|
object _emptyView;
|
||||||
protected readonly ItemsView ItemsView;
|
DataTemplate _emptyViewTemplate;
|
||||||
|
|
||||||
|
public object EmptyView
|
||||||
|
{
|
||||||
|
get => _emptyView;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_emptyView = value;
|
||||||
|
|
||||||
|
// Change _itemViewType to force OnCreateViewHolder to run again and use this new EmptyView
|
||||||
|
_itemViewType += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataTemplate EmptyViewTemplate
|
||||||
|
{
|
||||||
|
get => _emptyViewTemplate;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_emptyViewTemplate = value;
|
||||||
|
|
||||||
|
// Change _itemViewType to force OnCreateViewHolder to run again and use this new template
|
||||||
|
_itemViewType += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected readonly ItemsView ItemsView;
|
||||||
public override int ItemCount => 1;
|
public override int ItemCount => 1;
|
||||||
|
|
||||||
public EmptyViewAdapter(ItemsView itemsView)
|
public EmptyViewAdapter(ItemsView itemsView)
|
||||||
|
@ -75,6 +100,11 @@ namespace Xamarin.Forms.Platform.Android
|
||||||
return new TemplatedItemViewHolder(itemContentView, template);
|
return new TemplatedItemViewHolder(itemContentView, template);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override int GetItemViewType(int position)
|
||||||
|
{
|
||||||
|
return _itemViewType;
|
||||||
|
}
|
||||||
|
|
||||||
static TextView CreateTextView(string text, Context context)
|
static TextView CreateTextView(string text, Context context)
|
||||||
{
|
{
|
||||||
var textView = new TextView(context) { Text = text };
|
var textView = new TextView(context) { Text = text };
|
||||||
|
|
Загрузка…
Ссылка в новой задаче