Skip to content

Commit 6d7d8a4

Browse files
committed
[Xamarin.Android.Build.Tasks] Design-Time Build <dimen/> support (#1786)
Fixes: https://devdiv.visualstudio.com/0bdbc590-a062-4c3f-b0f6-9383f67865ee/_workitems/edit/628467 Fixes: #1784 We were not correctly processing `<dimen/>` resource items when parsing the actual resources, via the Design-Time Build and ManagedResourceParser. We did however process `dimen` resources correctly when processing the `R.txt` or `R.java` files, so *full* builds worked as expected. Update the `ManagedResourceParser` to handle `<dimen/>` resources.
1 parent c743376 commit 6d7d8a4

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,13 +1125,20 @@ public void BuildAppWithManagedResourceParserAndLibraries ()
11251125
<resources>
11261126
<color name=""theme_devicedefault_background"">#ffffffff</color>
11271127
<color name=""SomeColor"">#ffffffff</color>
1128+
</resources>",
1129+
};
1130+
var dimen = new AndroidItem.AndroidResource ("Resources\\values\\dimen.xml") {
1131+
TextContent = () => @"<?xml version=""1.0"" encoding=""utf-8""?>
1132+
<resources>
1133+
<dimen name=""main_text_item_size"">17dp</dimen>
11281134
</resources>",
11291135
};
11301136
var libProj = new XamarinAndroidLibraryProject () {
11311137
IsRelease = true,
11321138
ProjectName = "Lib1",
11331139
AndroidResources = {
11341140
theme,
1141+
dimen,
11351142
},
11361143
};
11371144
libProj.SetProperty ("AndroidUseManagedDesignTimeResourceGenerator", "True");
@@ -1178,6 +1185,7 @@ public void BuildAppWithManagedResourceParserAndLibraries ()
11781185
StringAssert.Contains ("Icon", designerContents, $"{designerFile} should contain Resources.Drawable.Icon");
11791186
StringAssert.Contains ("Main", designerContents, $"{designerFile} should contain Resources.Layout.Main");
11801187
StringAssert.Contains ("material_grey_50", designerContents, $"{designerFile} should contain Resources.Color.material_grey_50");
1188+
StringAssert.DoesNotContain ("main_text_item_size", designerContents, $"{designerFile} should not contain Resources.Dimension.main_text_item_size");
11811189
StringAssert.DoesNotContain ("theme_devicedefault_background", designerContents, $"{designerFile} should not contain Resources.Color.theme_devicedefault_background");
11821190
libBuilder.Target = "Build";
11831191
Assert.IsTrue (libBuilder.Build (libProj), "Library project should have built");
@@ -1197,7 +1205,9 @@ public void BuildAppWithManagedResourceParserAndLibraries ()
11971205
StringAssert.Contains ("Icon", designerContents, $"{designerFile} should contain Resources.Drawable.Icon");
11981206
StringAssert.Contains ("Main", designerContents, $"{designerFile} should contain Resources.Layout.Main");
11991207
StringAssert.Contains ("material_grey_50", designerContents, $"{designerFile} should contain Resources.Color.material_grey_50");
1208+
StringAssert.Contains ("main_text_item_size", designerContents, $"{designerFile} should contain Resources.Dimension.main_text_item_size");
12001209
StringAssert.Contains ("theme_devicedefault_background", designerContents, $"{designerFile} should contain Resources.Color.theme_devicedefault_background");
1210+
StringAssert.Contains ("main_text_item_size", designerContents, $"{designerFile} should contain Resources.Dimension.main_text_item_size");
12011211
StringAssert.Contains ("SomeColor", designerContents, $"{designerFile} should contain Resources.Color.SomeColor");
12021212

12031213
appBuilder.Target = "SignAndroidPackage";

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Expected/GenerateDesignerFileExpected.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,22 @@ private Animator()
4040
}
4141
}
4242

43+
public partial class Dimension
44+
{
45+
46+
// aapt resource value: 0x7F090002
47+
public const int main_text_item_size = 2131296258;
48+
49+
static Dimension()
50+
{
51+
global::Android.Runtime.ResourceIdManager.UpdateIdValues();
52+
}
53+
54+
private Dimension()
55+
{
56+
}
57+
}
58+
4359
public partial class Drawable
4460
{
4561

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManagedResourceParserTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ public class ManagedResourceParserTests : BaseTest {
4949
android:valueTo=""0""
5050
android:valueType=""floatType"" />";
5151

52+
const string Dimen = @"<?xml version=""1.0"" encoding=""utf-8""?>
53+
<resources>
54+
<dimen name=""main_text_item_size"">17dp</dimen>
55+
</resources>";
56+
5257
[Test]
5358
public void GenerateDesignerFile ()
5459
{
@@ -66,6 +71,7 @@ public void GenerateDesignerFile ()
6671
File.WriteAllText (Path.Combine (Root, path, "lp", "res", "animator", "slide_in_bottom.xml"), Animator);
6772
File.WriteAllText (Path.Combine (Root, path, "lp", "res", "font", "arial.ttf"), "");
6873
File.WriteAllText (Path.Combine (Root, path, "lp", "res", "values", "strings.xml"), StringsXml2);
74+
File.WriteAllText (Path.Combine (Root, path, "lp", "res", "values", "dimen.xml"), Dimen);
6975
using (var stream = typeof (XamarinAndroidCommonProject).Assembly.GetManifestResourceStream ("Xamarin.ProjectTools.Resources.Base.Icon.png")) {
7076
var icon_binary_mdpi = new byte [stream.Length];
7177
stream.Read (icon_binary_mdpi, 0, (int)stream.Length);

src/Xamarin.Android.Build.Tasks/Utilities/ManagedResourceParser.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,8 @@ void CreateResourceField (string root, string fieldName, XmlReader element = nul
370370
CreateIntField (drawable, fieldName);
371371
break;
372372
case "dimen":
373+
CreateIntField (dimension, fieldName);
374+
break;
373375
case "font":
374376
CreateIntField (font, fieldName);
375377
break;

0 commit comments

Comments
 (0)