Skip to content
This repository has been archived by the owner on May 1, 2024. It is now read-only.

Commit

Permalink
Merge branch 'master' into automation-name-helptext
Browse files Browse the repository at this point in the history
  • Loading branch information
samhouts authored Mar 18, 2019
2 parents cafc793 + 21eb50b commit afb3c9c
Show file tree
Hide file tree
Showing 70 changed files with 2,383 additions and 201 deletions.
4 changes: 2 additions & 2 deletions .nuspec/Xamarin.Forms.Maps.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@
<file src="..\docs\Xamarin.Forms.Maps.xml" target="lib\tizen40" />

<!-- Xaml Design-time Stuff -->
<file src="..\Xamarin.Forms.Maps.Design\bin\$Configuration$\Xamarin.Forms.Maps.Design.dll" target="lib\netstandard2.0" />
<file src="..\Xamarin.Forms.Maps.Design\bin\$Configuration$\Xamarin.Forms.Maps.Design.dll" target="lib\netstandard1.0" />
<file src="..\Xamarin.Forms.Maps.Design\bin\$Configuration$\Xamarin.Forms.Maps.Design.dll" target="lib\netstandard2.0\Design" />
<file src="..\Xamarin.Forms.Maps.Design\bin\$Configuration$\Xamarin.Forms.Maps.Design.dll" target="lib\netstandard1.0\Design" />

</files>
</package>
1 change: 1 addition & 0 deletions .nuspec/Xamarin.Forms.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
<group targetFramework="uap10.0">
<dependency id="NETStandard.Library" version="2.0.1"/>
<dependency id="Microsoft.NETCore.UniversalWindowsPlatform" version="6.0.12" />
<dependency id="Win2D.uwp" version="1.20.0" />
</group>
<group targetFramework="tizen40">
<dependency id="Tizen.NET" version="4.0.0"/>
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Platform/Feature | Package name | Sta
Core | `Xamarin.Forms` | [![NuGet](https://img.shields.io/nuget/v/Xamarin.Forms.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/Xamarin.Forms/)| [![MyGet](https://img.shields.io/myget/xamarinforms-ci/vpre/Xamarin.Forms.svg?style=flat-square&label=myget)](https://myget.org/feed/xamarinforms-ci/package/nuget/Xamarin.Forms)
Maps | `Xamarin.Forms.Maps` | [![NuGet](https://img.shields.io/nuget/v/Xamarin.Forms.Maps.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/Xamarin.Forms.Maps/) | [![MyGet](https://img.shields.io/myget/xamarinforms-ci/vpre/Xamarin.Forms.Maps.svg?style=flat-square&label=myget)](https://myget.org/feed/xamarinforms-ci/package/nuget/Xamarin.Forms.Maps)
Pages | `Xamarin.Forms.Pages` | [![NuGet](https://img.shields.io/nuget/v/Xamarin.Forms.Pages.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/Xamarin.Forms.Pages/) | [![MyGet](https://img.shields.io/myget/xamarinforms-ci/vpre/Xamarin.Forms.Pages.svg?style=flat-square&label=myget)](https://myget.org/feed/xamarin.forms-ci/package/nuget/Xamarin.Forms.Pages)
AppLinks | `Xamarin.Forms.AppLinks` | [![NuGet](https://img.shields.io/nuget/v/Xamarin.Forms.AppLinks.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/Xamarin.Forms.AppLinks/) | [![MyGet](https://img.shields.io/myget/xamarinforms-ci/vpre/Xamarin.Forms.AppLinks.svg?style=flat-square&label=myget)](https://myget.org/feed/xamarin.forms-ci/package/nuget/Xamarin.Forms.AppLinks)

If you want to use the latest dev build then you should read [this blog post](https://blog.xamarin.com/try-the-latest-in-xamarin-forms-with-nightly-builds):

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public static TypeReference GetBindablePropertyTypeConverter(this FieldReference
var owner = bpRef.DeclaringType;
var bpName = bpRef.Name.EndsWith("Property", StringComparison.Ordinal) ? bpRef.Name.Substring(0, bpRef.Name.Length - 8) : bpRef.Name;
var property = owner.GetProperty(pd => pd.Name == bpName, out propertyDeclaringType);
var propertyType = property?.ResolveGenericPropertyType(propertyDeclaringType, module);
var propertyType = property?.PropertyType?.ResolveGenericParameters(propertyDeclaringType);
var staticGetter = owner.GetMethods(md => md.Name == $"Get{bpName}" &&
md.IsStatic &&
md.IsPublic &&
Expand Down
21 changes: 0 additions & 21 deletions Xamarin.Forms.Build.Tasks/PropertyDefinitionExtensions.cs

This file was deleted.

35 changes: 28 additions & 7 deletions Xamarin.Forms.Build.Tasks/SetPropertiesVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ static IEnumerable<Instruction> CompileBindingPath(ElementNode node, ILContext c
TypeReference tPropertyRef = tSourceRef;
if (properties != null && properties.Count > 0) {
var lastProp = properties[properties.Count - 1];
tPropertyRef = lastProp.property.ResolveGenericPropertyType(lastProp.propDeclTypeRef, module);
tPropertyRef = lastProp.property.PropertyType.ResolveGenericParameters(lastProp.propDeclTypeRef);
}
tPropertyRef = module.ImportReference(tPropertyRef);
var valuetupleRef = context.Module.ImportReference(module.ImportReference(("mscorlib", "System", "ValueTuple`2")).MakeGenericInstanceType(new[] { tPropertyRef, module.TypeSystem.Boolean }));
Expand Down Expand Up @@ -482,7 +482,7 @@ static IEnumerable<Instruction> CompileBindingPath(ElementNode node, ILContext c
var indexType = indexer.GetMethod.Parameters[0].ParameterType;
if (!TypeRefComparer.Default.Equals(indexType, module.TypeSystem.String) && !TypeRefComparer.Default.Equals(indexType, module.TypeSystem.Int32))
throw new XamlParseException($"Binding: Unsupported indexer index type: {indexType.FullName}", lineInfo);
previousPartTypeRef = indexer.ResolveGenericPropertyType(indexerDeclTypeRef, module);
previousPartTypeRef = indexer.PropertyType.ResolveGenericParameters(indexerDeclTypeRef);
}
}
return properties;
Expand Down Expand Up @@ -531,6 +531,8 @@ static IEnumerable<Instruction> CompiledBindingGetGetter(TypeReference tSourceRe
il.Emit(Ret);
}
else {
var locs = new Dictionary<TypeReference, VariableDefinition>();

if (tSourceRef.IsValueType)
il.Emit(Ldarga_S, (byte)0);
else
Expand All @@ -539,6 +541,19 @@ static IEnumerable<Instruction> CompiledBindingGetGetter(TypeReference tSourceRe
for (int i = 0; i < properties.Count; i++) {
(PropertyDefinition property, TypeReference propDeclTypeRef, string indexArg) = properties[i];

if (i > 0 && propDeclTypeRef.IsValueType) {
var importedPropDeclTypeRef = module.ImportReference(propDeclTypeRef);

if (!locs.TryGetValue(importedPropDeclTypeRef, out var loc)) {
loc = new VariableDefinition(importedPropDeclTypeRef);
getter.Body.Variables.Add(loc);
locs[importedPropDeclTypeRef] = loc;
}

il.Emit(Stloc, loc);
il.Emit(Ldloca, loc);
}

if (!property.PropertyType.IsValueType) { //if part of the path is null, return (default(T), false)
var nop = Create(Nop);
il.Emit(Dup);
Expand All @@ -547,8 +562,14 @@ static IEnumerable<Instruction> CompiledBindingGetGetter(TypeReference tSourceRe
il.Emit(Brfalse, nop);
il.Emit(Pop);
if (tPropertyRef.IsValueType) {
var defaultValueVarDef = new VariableDefinition(tPropertyRef);
getter.Body.Variables.Add(defaultValueVarDef);
var importedTPropertyRef = module.ImportReference(tPropertyRef);

if (!locs.TryGetValue(importedTPropertyRef, out var defaultValueVarDef)) {
defaultValueVarDef = new VariableDefinition(tPropertyRef);
getter.Body.Variables.Add(defaultValueVarDef);
locs[importedTPropertyRef] = defaultValueVarDef;
}

il.Emit(Ldloca_S, defaultValueVarDef);
il.Emit(Initobj, tPropertyRef);
il.Emit(Ldloc, defaultValueVarDef);
Expand Down Expand Up @@ -933,7 +954,7 @@ static IEnumerable<Instruction> ConnectEvent(VariableDefinition parent, string l
declaringType = declaringType.DeclaringType;
var handler = declaringType.AllMethods().FirstOrDefault(md => md.Name == value as string);
if (handler == null)
throw new XamlParseException($"EventHandler \"{value}\" not found in type \"{context.Body.Method.DeclaringType.FullName}\"", iXmlLineInfo);
throw new XamlParseException($"EventHandler \"{value}\" not found in type \"{declaringType}\"", iXmlLineInfo);

//check if the handler signature matches the Invoke signature;
var invoke = module.ImportReference(eventinfo.EventType.ResolveCached().GetMethods().First(md => md.Name == "Invoke"));
Expand Down Expand Up @@ -1143,7 +1164,7 @@ static bool CanSet(VariableDefinition parent, string localName, INode node, ILCo
var property = parent.VariableType.GetProperty(pd => pd.Name == localName, out declaringTypeReference);
if (property == null)
return false;
var propertyType = property.ResolveGenericPropertyType(declaringTypeReference, module);
var propertyType = property.PropertyType.ResolveGenericParameters(declaringTypeReference);
var propertySetter = property.SetMethod;
if (propertySetter == null || !propertySetter.IsPublic || propertySetter.IsStatic)
return false;
Expand Down Expand Up @@ -1207,7 +1228,7 @@ static IEnumerable<Instruction> Set(VariableDefinition parent, string localName,
module.ImportReference(parent.VariableType.ResolveCached());
var propertySetterRef = module.ImportReference(module.ImportReference(propertySetter).ResolveGenericParameters(declaringTypeReference, module));
propertySetterRef.ImportTypes(module);
var propertyType = property.ResolveGenericPropertyType(declaringTypeReference, module);
var propertyType = property.PropertyType.ResolveGenericParameters(declaringTypeReference);
var valueNode = node as ValueNode;
var elementNode = node as IElementNode;

Expand Down
20 changes: 18 additions & 2 deletions Xamarin.Forms.Build.Tasks/TypeReferenceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -368,8 +368,19 @@ public static TypeReference ResolveGenericParameters(this TypeReference self, Me

public static TypeReference ResolveGenericParameters(this TypeReference self, TypeReference declaringTypeReference)
{
var genericdeclType = declaringTypeReference as GenericInstanceType;
if (genericdeclType == null)
return self;

var genericParameterSelf = self as GenericParameter;
if (genericParameterSelf != null)
return genericdeclType.GenericArguments[genericParameterSelf.Position];

var genericself = self as GenericInstanceType;
return genericself == null ? self : genericself.ResolveGenericParameters(declaringTypeReference);
if (genericself != null)
return genericself.ResolveGenericParameters(declaringTypeReference);

return self;
}

public static GenericInstanceType ResolveGenericParameters(this GenericInstanceType self, TypeReference declaringTypeReference)
Expand All @@ -378,13 +389,18 @@ public static GenericInstanceType ResolveGenericParameters(this GenericInstanceT
if (genericdeclType == null)
return self;

return self.ResolveGenericParameters(genericdeclType);
}

public static GenericInstanceType ResolveGenericParameters(this GenericInstanceType self, GenericInstanceType declaringTypeReference)
{
List<TypeReference> args = new List<TypeReference>();
for (var i = 0; i < self.GenericArguments.Count; i++) {
var genericParameter = self.GenericArguments[i] as GenericParameter;
if (genericParameter == null)
args.Add(self.GenericArguments[i].ResolveGenericParameters(declaringTypeReference));
else if (genericParameter.Type == GenericParameterType.Type)
args.Add(genericdeclType.GenericArguments[genericParameter.Position]);
args.Add(declaringTypeReference.GenericArguments[genericParameter.Position]);
}
return self.ElementType.MakeGenericInstanceType(args.ToArray());
}
Expand Down
11 changes: 11 additions & 0 deletions Xamarin.Forms.ControlGallery.Android/CustomRenderers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
using Xamarin.Forms.Controls.Issues;


[assembly: ExportRenderer(typeof(Issue5461.ScrollbarFadingEnabledFalseScrollView), typeof(ScrollbarFadingEnabledFalseScrollViewRenderer))]
[assembly: ExportRenderer(typeof(Issue1942.CustomGrid), typeof(Issue1942GridRenderer))]
[assembly: ExportRenderer(typeof(Xamarin.Forms.Controls.Effects.AttachedStateEffectLabel), typeof(AttachedStateEffectLabelRenderer))]
[assembly: ExportRenderer(typeof(Xamarin.Forms.Controls.LegacyComponents.NonAppCompatSwitch), typeof(NonAppCompatSwitchRenderer))]
Expand Down Expand Up @@ -58,6 +59,16 @@ public NonAppCompatSwitchRenderer(Context context) : base(context)
}
}

public class ScrollbarFadingEnabledFalseScrollViewRenderer : ScrollViewRenderer
{
public ScrollbarFadingEnabledFalseScrollViewRenderer(Context context) : base(context)
{
// I do a cast here just so this will fail just to be sure we don't change the base types
var castingTest = (global::Android.Support.V4.Widget.NestedScrollView)this;
castingTest.ScrollbarFadingEnabled = false;
}
}

public class AttachedStateEffectLabelRenderer : LabelRenderer
{
public AttachedStateEffectLabelRenderer(Context context) : base(context)
Expand Down
6 changes: 4 additions & 2 deletions Xamarin.Forms.ControlGallery.Android/_50787CustomRenderer.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Android.Content;
#if !FORMS_APPLICATION_ACTIVITY && !PRE_APPLICATION_CLASS
using Android.Content;
using Xamarin.Forms;
using Xamarin.Forms.ControlGallery.Android;
using Xamarin.Forms.Platform.Android.AppCompat;
Expand All @@ -24,4 +25,5 @@ protected override void SetupPageTransition(FragmentTransaction transaction, boo
transaction.SetCustomAnimations(Resource.Animation.enter_from_left, Resource.Animation.exit_to_right);
}
}
}
}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ protected override void Init()
{
LineBreakMode = LineBreakMode.WordWrap,
Text =
"Lorem ipsum dolor sit amet, cu mei malis petentium, dolor tempor delicata no qui, eos ex vitae utinam vituperata. Utroque habemus philosophia ut mei, doctus placerat eam cu. An inermis scaevola pro, quo legimus deleniti ei, equidem docendi urbanitas ea eum. Saepe doctus ut pri. Nec ex wisi dolorem. Duo dolor vituperatoribus ea. Id purto instructior per. Nec partem accusamus ne. Qui ad saepe accumsan appellantur, duis omnesque has et, vim nihil nemore scaevola ne. Ei populo appetere recteque cum, meliore splendide appellantur vix id."
"Lorem ipsum dolor sit amet, cu mei malis petentium, dolor tempor delicata no qui, eos ex vitae utinam vituperata. Utroque habemus philosophia ut mei, doctus placerat eam cu. An inermis scaevola pro, quo legimus deleniti ei, equidem docendi urbanitas ea eum. Saepe doctus ut pri. Nec ex wisi dolorem. Duo dolor vituperatoribus ea. Id purto instructior per. Nec partem accusamus ne. Qui ad saepe accumsan appellantur, duis omnesque has et, vim nihil nemore scaevola ne. Ei populo appetere recteque xum, meliore splendide appellantur vix id."
};

var spaced = new Label
{
LineHeight = 1.5,
LineBreakMode = LineBreakMode.WordWrap,
Text =
"Lorem ipsum dolor sit amet, cu mei malis petentium, dolor tempor delicata no qui, eos ex vitae utinam vituperata. Utroque habemus philosophia ut mei, doctus placerat eam cu. An inermis scaevola pro, quo legimus deleniti ei, equidem docendi urbanitas ea eum. Saepe doctus ut pri. Nec ex wisi dolorem. Duo dolor vituperatoribus ea. Id purto instructior per. Nec partem accusamus ne. Qui ad saepe accumsan appellantur, duis omnesque has et, vim nihil nemore scaevola ne. Ei populo appetere recteque cum, meliore splendide appellantur vix id."
"Lorem ipsum dolor sit amet, cu mei malis petentium, dolor tempor delicata no qui, eos ex vitae utinam vituperata. Utroque habemus philosophia ut mei, doctus placerat eam cu. An inermis scaevola pro, quo legimus deleniti ei, equidem docendi urbanitas ea eum. Saepe doctus ut pri. Nec ex wisi dolorem. Duo dolor vituperatoribus ea. Id purto instructior per. Nec partem accusamus ne. Qui ad saepe accumsan appellantur, duis omnesque has et, vim nihil nemore scaevola ne. Ei populo appetere recteque xum, meliore splendide appellantur vix id."
};

layout.Children.Add(instructions);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;

namespace Xamarin.Forms.Controls.Issues
{
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Github, 4933, "Grid size incorrect when using with Image", PlatformAffected.All)]
public class Issue4493 : TestContentPage // or TestMasterDetailPage, etc ...
{
protected override void Init()
{
// Initialize ui here instead of ctor
BackgroundColor = Color.Gray;
var contentGrid = new Grid
{
AutomationId = "IssuePageGrid",
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.Center,
BackgroundColor = Color.Maroon,
RowSpacing = 0,
RowDefinitions = new RowDefinitionCollection()
{
new RowDefinition(){Height = GridLength.Auto},
new RowDefinition(){Height = 20}
}
};
contentGrid.AddChild(new Image() { Source = "photo.jpg", AutomationId = "IssuePageImage" }, 0, 0);
contentGrid.AddChild(new Label() { Text = "test message", BackgroundColor = Color.Blue }, 0, 1);
Content = contentGrid;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using System.Linq;
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;

namespace Xamarin.Forms.Controls.Issues
{
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Github, 5252, "iOS: The Editor and Entry placeholder default color should be the same", PlatformAffected.iOS)]

class Issue5252 : TestContentPage
{
protected override void Init()
{
var sl = new StackLayout();
sl.Children.Add(new Label()
{
Text = "iOS: The Editor and Entry placeholder default color should be the same for consistency"
});

var entry = new Entry()
{
Placeholder = "Entry placeholder",
};
sl.Children.Add(entry);

var editor = new Editor()
{
Placeholder = "Editor placeholder",
};
sl.Children.Add(editor);

sl.Children.Add(new Button()
{
Text = "Toggle placeholder color",
Command = new Command(() =>
{
entry.PlaceholderColor = entry.PlaceholderColor.IsDefault ? Color.Red : (Color)Entry.PlaceholderColorProperty.DefaultValue;
editor.PlaceholderColor = editor.PlaceholderColor.IsDefault ? Color.Red : (Color)Editor.PlaceholderColorProperty.DefaultValue;
})
});


Content = new ScrollView()
{
Content = sl
};
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;


#if UITEST
using Xamarin.UITest;
using NUnit.Framework;
using Xamarin.Forms.Core.UITests;
#endif

namespace Xamarin.Forms.Controls.Issues
{
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Github, 5461, "[Android] ScrollView crashes when setting ScrollbarFadingEnabled to false in Custom Renderer",
PlatformAffected.Android)]
#if UITEST
[NUnit.Framework.Category(UITestCategories.ScrollView)]
#endif
public class Issue5461 : TestContentPage
{
const string Success = "If you can see this, the test has passed";
protected override void Init()
{
ScrollView scrollView = new ScrollbarFadingEnabledFalseScrollView()
{
Content = new StackLayout()
{
Children =
{
new Label()
{
Text = Success
}
},
HeightRequest = 2000
}
};

Content = scrollView;
}

public class ScrollbarFadingEnabledFalseScrollView : ScrollView { }


#if UITEST && __ANDROID__
[Test]
public void ScrollViewWithScrollbarFadingEnabledFalseDoesntCrash()
{
RunningApp.WaitForElement(Success);
}
#endif
}
}
Loading

0 comments on commit afb3c9c

Please sign in to comment.