Skip to content

Commit 639aeb3

Browse files
Merge branch 'develop' into feature/dot-net-10
2 parents 869d877 + aa80586 commit 639aeb3

74 files changed

Lines changed: 1562 additions & 115 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/master-sample-app.yml

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ on:
1818
env:
1919
SLN_FILE_PATH: 'HorusStudio.Maui.MaterialDesignControls.sln'
2020
CSPROJ_FILE_PATH: 'samples/HorusStudio.Maui.MaterialDesignControls.Sample/HorusStudio.Maui.MaterialDesignControls.Sample.csproj'
21+
GLOBAL_JSON_FILE: 'global.json'
2122

2223
jobs:
2324
build:
@@ -30,11 +31,21 @@ jobs:
3031
run: |
3132
echo "Selected platforms to build: ${{ github.event.inputs.platforms }}"
3233
34+
# TODO: REMOVE THIS STEP WHEN THE GITHUB RUNNER HAS THE LATEST XCODE AND WORKLOAD VERSIONS
35+
- name: Fix global.json for correct .NET workload
36+
run: |
37+
echo '{
38+
"sdk": {
39+
"allowPrerelease": false,
40+
"version": "9.0.307",
41+
"workloadVersion": "9.0.300"
42+
}
43+
}' > "${{ env.GLOBAL_JSON_FILE }}"
44+
3345
- name: Setup .NET
3446
uses: actions/setup-dotnet@v4
3547
with:
3648
dotnet-version: '9.0.x'
37-
include-prerelease: true
3849

3950
- name: Install MAUI workloads
4051
run: |
@@ -76,7 +87,7 @@ jobs:
7687
run: |
7788
echo "📦 Creating Firebase config file for Android..."
7889
mkdir -p samples/HorusStudio.Maui.MaterialDesignControls.Sample/Platforms/Android
79-
echo "${{ secrets.FIREBASE_GOOGLE_SERVICES_JSON }}" > samples/HorusStudio.Maui.MaterialDesignControls.Sample/Platforms/Android/google-services.json
90+
echo "${{ secrets.FIREBASE_GOOGLE_SERVICES_JSON }}" | base64 --decode > samples/HorusStudio.Maui.MaterialDesignControls.Sample/Platforms/Android/google-services.json
8091
echo "🔎 samples/HorusStudio.Maui.MaterialDesignControls.Sample/Platforms/Android/google-services.json (show 10 first lines):"
8192
head -n 10 samples/HorusStudio.Maui.MaterialDesignControls.Sample/Platforms/Android/google-services.json
8293
echo "✅ Firebase config file created successfully!"
@@ -135,7 +146,7 @@ jobs:
135146
run: |
136147
echo "📦 Creating Firebase config file for iOS..."
137148
mkdir -p samples/HorusStudio.Maui.MaterialDesignControls.Sample
138-
echo "${{ secrets.FIREBASE_GOOGLE_SERVICE_INFO_PLIST }}" > samples/HorusStudio.Maui.MaterialDesignControls.Sample/GoogleService-Info.plist
149+
echo "${{ secrets.FIREBASE_GOOGLE_SERVICE_INFO_PLIST }}" | base64 --decode > samples/HorusStudio.Maui.MaterialDesignControls.Sample/GoogleService-Info.plist
139150
echo "🔎 samples/HorusStudio.Maui.MaterialDesignControls.Sample/GoogleService-Info.plist (show 10 first lines):"
140151
head -n 10 samples/HorusStudio.Maui.MaterialDesignControls.Sample/GoogleService-Info.plist
141152
echo "✅ Firebase config file created successfully!"

Directory.Packages.props

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
<PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
66
</ItemGroup>
77
<ItemGroup>
8-
<PackageVersion Include="AdamE.Firebase.iOS.Analytics" Version="12.3.0" />
9-
<PackageVersion Include="AdamE.Firebase.iOS.Crashlytics" Version="12.3.0" />
8+
<PackageVersion Include="Appium.WebDriver" Version="5.0.0" />
9+
<PackageVersion Include="AdamE.Firebase.iOS.Analytics" Version="11.10.0" />
10+
<PackageVersion Include="AdamE.Firebase.iOS.Crashlytics" Version="11.10.0" />
1011
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="7.0.0" />
1112
<PackageVersion Include="Microsoft.Maui.Core" Version="10.0.10" />
1213
<PackageVersion Include="Microsoft.Toolkit.Mvvm" Version="7.1.2" />
1314
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData.Ktx" Version="2.9.4" />
15+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
16+
<PackageVersion Include="NUnit" Version="4.0.1" />
17+
<PackageVersion Include="NUnit3TestAdapter" Version="4.5.0" />
1418
<PackageVersion Include="Xamarin.Firebase.Analytics" Version="122.3.0.2" />
1519
<PackageVersion Include="Xamarin.Firebase.Crashlytics" Version="119.4.2.1" />
1620
</ItemGroup>

HorusStudio.Maui.MaterialDesignControls.sln

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HorusStudio.Maui.MaterialDe
1616
EndProject
1717
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HorusStudio.Maui.MaterialDesignControls", "src\HorusStudio.Maui.MaterialDesignControls\HorusStudio.Maui.MaterialDesignControls.csproj", "{DE16B804-FCC3-4132-8E64-56E61CE5FF99}"
1818
EndProject
19+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HorusStudio.Maui.MaterialDesignControls.UITests.Shared", "uitests\HorusStudio.Maui.MaterialDesignControls.UITests.Shared\HorusStudio.Maui.MaterialDesignControls.UITests.Shared.csproj", "{195A74C4-6A23-4EC3-AFBF-E790E884D62A}"
20+
EndProject
21+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HorusStudio.Maui.MaterialDesignControls.UITests.Android", "uitests\HorusStudio.Maui.MaterialDesignControls.UITests.Android\HorusStudio.Maui.MaterialDesignControls.UITests.Android.csproj", "{FE72E602-30BF-4BAD-AB15-DCE4E40AA2D5}"
22+
EndProject
23+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HorusStudio.Maui.MaterialDesignControls.UITests.iOS", "uitests\HorusStudio.Maui.MaterialDesignControls.UITests.iOS\HorusStudio.Maui.MaterialDesignControls.UITests.iOS.csproj", "{CB54ADBF-1CFE-45FC-A636-E1412E815746}"
24+
EndProject
25+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HorusStudio.Maui.MaterialDesignControls.UITests.macOS", "uitests\HorusStudio.Maui.MaterialDesignControls.UITests.macOS\HorusStudio.Maui.MaterialDesignControls.UITests.macOS.csproj", "{3B0A314E-5A17-4700-865F-F5686C3C4D44}"
26+
EndProject
1927
Global
2028
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2129
Debug|Any CPU = Debug|Any CPU
@@ -32,6 +40,22 @@ Global
3240
{DE16B804-FCC3-4132-8E64-56E61CE5FF99}.Debug|Any CPU.Build.0 = Debug|Any CPU
3341
{DE16B804-FCC3-4132-8E64-56E61CE5FF99}.Release|Any CPU.ActiveCfg = Release|Any CPU
3442
{DE16B804-FCC3-4132-8E64-56E61CE5FF99}.Release|Any CPU.Build.0 = Release|Any CPU
43+
{195A74C4-6A23-4EC3-AFBF-E790E884D62A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
44+
{195A74C4-6A23-4EC3-AFBF-E790E884D62A}.Debug|Any CPU.Build.0 = Debug|Any CPU
45+
{195A74C4-6A23-4EC3-AFBF-E790E884D62A}.Release|Any CPU.ActiveCfg = Release|Any CPU
46+
{195A74C4-6A23-4EC3-AFBF-E790E884D62A}.Release|Any CPU.Build.0 = Release|Any CPU
47+
{FE72E602-30BF-4BAD-AB15-DCE4E40AA2D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
48+
{FE72E602-30BF-4BAD-AB15-DCE4E40AA2D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
49+
{FE72E602-30BF-4BAD-AB15-DCE4E40AA2D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
50+
{FE72E602-30BF-4BAD-AB15-DCE4E40AA2D5}.Release|Any CPU.Build.0 = Release|Any CPU
51+
{CB54ADBF-1CFE-45FC-A636-E1412E815746}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
52+
{CB54ADBF-1CFE-45FC-A636-E1412E815746}.Debug|Any CPU.Build.0 = Debug|Any CPU
53+
{CB54ADBF-1CFE-45FC-A636-E1412E815746}.Release|Any CPU.ActiveCfg = Release|Any CPU
54+
{CB54ADBF-1CFE-45FC-A636-E1412E815746}.Release|Any CPU.Build.0 = Release|Any CPU
55+
{3B0A314E-5A17-4700-865F-F5686C3C4D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
56+
{3B0A314E-5A17-4700-865F-F5686C3C4D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
57+
{3B0A314E-5A17-4700-865F-F5686C3C4D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
58+
{3B0A314E-5A17-4700-865F-F5686C3C4D44}.Release|Any CPU.Build.0 = Release|Any CPU
3559
EndGlobalSection
3660
GlobalSection(SolutionProperties) = preSolution
3761
HideSolutionNode = FALSE

docs/Controls/horusstudio.maui.materialdesigncontrols.materialbadge.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ var badgeSmall = new MaterialBadge()
3434

3535
## Properties
3636

37+
### <a id="properties-automationid"/>**AutomationId**
38+
39+
Gets or sets a value that allows the automation framework to find and interact with this element.
40+
41+
Property type: [String](https://learn.microsoft.com/en-us/dotnet/api/system.string)<br>
42+
43+
Remarks: This value may only be set once on an element.
44+
45+
<br>
46+
3747
### <a id="properties-backgroundcolor"/>**BackgroundColor**
3848

3949
Gets or sets a color that describes the background color of the badge.

docs/Controls/horusstudio.maui.materialdesigncontrols.materialbutton.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,22 @@ Default value: true
4949

5050
<br>
5151

52+
### <a id="properties-automationid"/>**AutomationId**
53+
54+
Gets or sets a value that allows the automation framework to find and interact with this element.
55+
56+
Property type: [String](https://learn.microsoft.com/en-us/dotnet/api/system.string)<br>
57+
58+
Remarks: This value may only be set once on an element.
59+
60+
When set on this control, the AutomationId is also used as a base identifier for its internal elements:
61+
- The Button control uses the same AutomationId value.
62+
- The button's busy indicator uses the identifier "{AutomationId}_BusyIndicator".
63+
64+
This convention allows automated tests and accessibility tools to consistently locate all subelements of the control.
65+
66+
<br>
67+
5268
### <a id="properties-background"/>**Background**
5369

5470
Gets or sets a Brush that describes the background of the button.

docs/Controls/horusstudio.maui.materialdesigncontrols.materialcheckbox.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ var checkBox = new MaterialCheckBox()
3434

3535
## Properties
3636

37+
### <a id="properties-automationid"/>**AutomationId**
38+
39+
Gets or sets a value that allows the automation framework to find and interact with this element.
40+
41+
Property type: [String](https://learn.microsoft.com/en-us/dotnet/api/system.string)<br>
42+
43+
Remarks: This value may only be set once on an element.
44+
45+
When set on this control, the AutomationId is also used as a base identifier for its internal elements:
46+
- The CheckBox control uses the same AutomationId value.
47+
- The checkbox's text label uses the identifier "{AutomationId}_Text".
48+
49+
This convention allows automated tests and accessibility tools to consistently locate all subelements of the control.
50+
51+
<br>
52+
3753
### <a id="properties-characterspacing"/>**CharacterSpacing**
3854

3955
Gets or sets the spacing between characters of the label. This is a bindable property.
@@ -250,3 +266,4 @@ Occurs when the checkbox is touched.
250266
## Known issues and pending features
251267

252268
* [iOS] FontAttributes doesn't work.
269+
* The Selected property in Appium is not supported when using the AutomationId of this control, just like with the native MAUI control.

docs/Controls/horusstudio.maui.materialdesigncontrols.materialchip.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,22 @@ Default value: true
6262

6363
<br>
6464

65+
### <a id="properties-automationid"/>**AutomationId**
66+
67+
Gets or sets a value that allows the automation framework to find and interact with this element.
68+
69+
Property type: [String](https://learn.microsoft.com/en-us/dotnet/api/system.string)<br>
70+
71+
Remarks: This value may only be set once on an element.
72+
73+
When set on this control, the AutomationId is also used as a base identifier for its internal elements:
74+
- The MaterialChip control uses the same AutomationId value.
75+
- The chip's text label uses the identifier "{AutomationId}_Text".
76+
77+
This convention allows automated tests and accessibility tools to consistently locate all subelements of the control.
78+
79+
<br>
80+
6581
### <a id="properties-backgroundcolor"/>**BackgroundColor**
6682

6783
Gets or sets a background color for Chip.
@@ -385,3 +401,7 @@ Occurs when the chips is clicked/tapped.
385401
Occurs when the chip is touched.
386402

387403
<br>
404+
405+
## Known issues and pending features
406+
407+
* The Selected property in Appium is not supported when using the AutomationId of this control.

docs/Controls/horusstudio.maui.materialdesigncontrols.materialdatepicker.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,26 @@ Default value: False
4343

4444
<br>
4545

46+
### <a id="properties-automationid"/>**AutomationId**
47+
48+
Gets or sets a value that allows the automation framework to find and interact with this element.
49+
50+
Property type: [String](https://learn.microsoft.com/en-us/dotnet/api/system.string)<br>
51+
52+
Remarks: This value may only be set once on an element.
53+
54+
When set on this control, the AutomationId is also used as a base identifier for its internal elements:
55+
- The main input control (e.g., Entry, Editor, Picker, etc.) uses the same AutomationId value.
56+
- The hint label uses the identifier "{AutomationId}_Hint".
57+
- The supporting text label uses the identifier "{AutomationId}_SupportingText".
58+
- The placeholder text label uses the identifier "{AutomationId}_Placeholder".
59+
- The leading icon button uses the identifier "{AutomationId}_LeadingIcon".
60+
- The trailing icon button uses the identifier "{AutomationId}_TrailingIcon".
61+
62+
This convention allows automated tests and accessibility tools to consistently locate all subelements of the control.
63+
64+
<br>
65+
4666
### <a id="properties-background"/>**Background**
4767

4868
Gets or sets a Brush that describes the background of the input. This is a bindable property.

docs/Controls/horusstudio.maui.materialdesigncontrols.materialfloatingbutton.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ var MaterialFloatingButton = new MaterialFloatingButton()
3535

3636
## Properties
3737

38+
### <a id="properties-automationid"/>**AutomationId**
39+
40+
Gets or sets a value that allows the automation framework to find and interact with this element.
41+
42+
Property type: [String](https://learn.microsoft.com/en-us/dotnet/api/system.string)<br>
43+
44+
Remarks: This value may only be set once on an element.
45+
46+
Note: On Android, the value assigned to this AutomationId property
47+
will be mapped to the native Android property ContentDescription (content-desc),
48+
unlike most other controls where it maps to the Id (resource-id) property.
49+
50+
<br>
51+
3852
### <a id="properties-backgroundcolor"/>**BackgroundColor**
3953

4054
Gets or sets background color floating button

docs/Controls/horusstudio.maui.materialdesigncontrols.materialiconbutton.md

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ var iconButton = new MaterialIconButton()
3939

4040
### <a id="properties-applyicontintcolor"/>**ApplyIconTintColor**
4141

42-
Gets or sets the if the icon applies the tint color.
42+
Gets or sets if the icon applies the tint color.
4343
This is a bindable property.
4444

4545
Property type: [Boolean](https://learn.microsoft.com/en-us/dotnet/api/system.boolean)<br>
@@ -48,6 +48,22 @@ Default value: true
4848

4949
<br>
5050

51+
### <a id="properties-automationid"/>**AutomationId**
52+
53+
Gets or sets a value that allows the automation framework to find and interact with this element.
54+
55+
Property type: [String](https://learn.microsoft.com/en-us/dotnet/api/system.string)<br>
56+
57+
Remarks: This value may only be set once on an element.
58+
59+
When set on this control, the AutomationId is also used as a base identifier for its internal elements:
60+
- The Image control uses the same AutomationId value.
61+
- The icon button's busy indicator uses the identifier "{AutomationId}_BusyIndicator".
62+
63+
This convention allows automated tests and accessibility tools to consistently locate all subelements of the control.
64+
65+
<br>
66+
5167
### <a id="properties-background"/>**Background**
5268

5369
Gets or sets a Brush that describes the background of the button.
@@ -269,16 +285,6 @@ Default value: MaterialIconButtonType.Filled
269285

270286
<br>
271287

272-
### <a id="properties-useicontintcolor"/>**UseIconTintColor**
273-
274-
Gets or sets if button should use tint color.
275-
The default value is true.
276-
This is a bindable property.
277-
278-
Property type: [Boolean](https://learn.microsoft.com/en-us/dotnet/api/system.boolean)<br>
279-
280-
<br>
281-
282288
### <a id="properties-widthrequest"/>**WidthRequest**
283289

284290
Gets or sets the desired width override of this element.

0 commit comments

Comments
 (0)