diff --git a/MauiCompat.sh b/MauiCompat.sh index 03ed128f0..9083e6af8 100755 --- a/MauiCompat.sh +++ b/MauiCompat.sh @@ -58,6 +58,10 @@ printf > ./src/CommunityToolkit/Directory.build.props " + + + + @@ -124,7 +128,7 @@ sed -i '' '/Forms.Internals.Log/d' ./src/CommunityToolkit/Xamarin.CommunityToolk # WeakEventManager -sed -i '' 's/ Forms.WeakEventManager/ Microsoft.Maui.Controls.WeakEventManager/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs +sed -i '' 's/ Forms.WeakEventManager/ Microsoft.Maui.WeakEventManager/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs # Forms.Image @@ -610,7 +614,7 @@ namespace Xamarin.CommunityToolkit.MauiCompat colorToConvert = Microsoft.Maui.Graphics.Colors.Transparent; } - return Microsoft.Maui.Controls.Compatibility.Platform.iOS.ColorExtensions.ToUIColor(colorToConvert); + return Microsoft.Maui.Platform.ColorExtensions.ToPlatform(colorToConvert); } } }" @@ -647,6 +651,11 @@ sed -i '' 's/readonly object synchandle = new object();/public bool IsEmpty => S sed -i '' 's/nfloat/System.Runtime.InteropServices.NFloat/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs +# PlatformStatusBarEffect + +sed -i '' 's/FormsAppCompatActivity/MauiAppCompatActivity/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformStatusBarEffect.android.cs +sed -i '' 's/Activity.SetStatusBarColor/Activity.Window.SetStatusBarColor/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformStatusBarEffect.android.cs + # AVMediaType sed -i '' 's/photoOutput.ConnectionFromMediaType(AVMediaType.Video)/photoOutput.ConnectionFromMediaType(new NSString("video"))/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs @@ -657,4 +666,70 @@ sed -i '' 's/AVMediaType.Video/AVAuthorizationMediaType.Video/g' ./src/Community # Log sed -i '' 's/using System;/using System;using Microsoft.Extensions.Logging;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs -sed -i '' 's/Log\./(Microsoft.Maui.Controls.Application.Current?.Handler.MauiContext?.Services.GetService(typeof(ILogger)) as ILogger)?.Log/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs \ No newline at end of file +sed -i '' 's/Log\./(Microsoft.Maui.Controls.Application.Current?.Handler.MauiContext?.Services.GetService(typeof(ILogger)) as ILogger)?.Log/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs + +# WINUI +sed -i '' 's/using Xamarin.CommunityToolkit.UI.Views;/using Xamarin.CommunityToolkit.UI.Views;using Microsoft.Maui.Controls.Compatibility;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs +sed -i '' 's/UAP10_0/WINDOWS/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/**.cs + +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/LifeCycleEffectRouter.uwp.cs + +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/RemoveBorderEffect.uwp.cs + +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SelectAllTextEffect.uwp.cs + +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SemanticEffectRouter.uwp.cs + +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SemanticEffectRouterBase.uwp.cs +sed -i '' 's/Microsoft.Maui.Controls.Compatibility.Platform.UWP.PlatformEffect/Microsoft.Maui.Controls.Platform.PlatformEffect/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SemanticEffectRouterBase.uwp.cs + +sed -i '' 's/using Xamarin.CommunityToolkit.UWP.Effects;/using Xamarin.CommunityToolkit.UWP.Effects;using Microsoft.Maui.Platform;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformStatusBarEffect.uwp.cs + +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformTouchEffect.uwp.cs + +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SemanticExtensions.uwp.cs +sed -i '' 's/using Microsoft.UI.Xaml;/using Microsoft.UI.Xaml;using Window = Microsoft.UI.Xaml.Window;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SemanticExtensions.uwp.cs + +sed -i '' 's/view.IsInNativeLayout = true;//g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/ViewToRendererConverter.uwp.cs +sed -i '' 's/view.IsInNativeLayout = false;//g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/ViewToRendererConverter.uwp.cs +sed -i '' 's/Rectangle/Rect/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/ViewToRendererConverter.uwp.cs +sed -i '' 's/Microsoft.Maui.Controls.Layout/Layout/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/ViewToRendererConverter.uwp.cs +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/ViewToRendererConverter.uwp.cs +sed -i '' 's/using Microsoft.UI.Xaml;/using Microsoft.UI.Xaml;using Microsoft.UI.Xaml.Shapes;using Layout = Microsoft.Maui.Controls.Compatibility.Layout;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/ViewToRendererConverter.uwp.cs + +sed -i '' 's/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;using Microsoft.Maui.Controls.Platform;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/ImageSourceValidator.android.ios.macos.uwp.wpf.gtk.tizen.cs + +sed -i '' 's/if NETSTANDARD || __WATCHOS__ || __TVOS__/if NETSTANDARD || __WATCHOS__ || __TVOS__ || WINDOWS/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/DrawingViewService.shared.cs + +sed -i '' 's/Windows.UI.Xaml/Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/GravatarImageSourceHandler.uwp.cs +sed -i '' 's/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;using Microsoft.Maui.Controls.Platform;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/GravatarImageSourceHandler.uwp.cs + +sed -i '' 's/Windows.UI.Xaml/Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/AspectExtensions.uwp.cs + +sed -i '' 's/Windows.UI.Xaml/Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PopupRenderer.uwp.cs +sed -i '' 's/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;using Microsoft.Maui.Platform;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PopupRenderer.uwp.cs + +sed -i '' 's/using Windows.UI.Xaml/using Microsoft.UI.Xaml/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SemanticOrderViewRenderer.uwp.cs +sed -i '' 's/if (element is VisualElement ve)/if (element is FrameworkElement ve)/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SemanticOrderViewRenderer.uwp.cs + +sed -i '' 's/MasterDetailPage/FlyoutPage/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/NavigationExtensions.uwp.cs + +sed -i '' 's/Windows.UI/Microsoft.UI/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformShadowEffect.uwp.cs +sed -i '' 's/using Microsoft.Maui.Controls.Compatibility.Grid = Xamarin.Forms.Grid;/using Microsoft.Maui.Platform;using Application = Microsoft.Maui.Controls.Application;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformShadowEffect.uwp.cs +sed -i '' 's/Layout/Microsoft.Maui.Controls.StackLayout/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformShadowEffect.uwp.cs +sed -i '' 's/var renderer = shadowPanel?.Children.First().GetOrCreateRenderer();/var renderer = shadowPanel?.Children.First().ToPlatform(Application.Current.MainPage.Handler?.MauiContext);/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformShadowEffect.uwp.cs +sed -i '' 's/ElementCompositionPreview.SetElementChildVisual(renderer?.ContainerElement, spriteVisual);/ElementCompositionPreview.SetElementChildVisual(renderer, spriteVisual);/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/PlatformShadowEffect.uwp.cs + +sed -i '' 's/using Windows.UI/using Microsoft.UI/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBar.uwp.cs +sed -i '' 's/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;using Microsoft.Maui.Controls;using Border = Microsoft.UI.Xaml.Controls.Border;using Grid = Microsoft.UI.Xaml.Controls.Grid;using RowDefinition = Microsoft.UI.Xaml.Controls.RowDefinition;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBar.uwp.cs +sed -i '' 's/Microsoft.Maui.Controls.Compatibility.Grid/Grid/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBar.uwp.cs +sed -i '' 's/Microsoft.Maui.GridLength/GridLength/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBar.uwp.cs +sed -i '' 's/Forms.VisualElement/VisualElement/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBar.uwp.cs + +sed -i '' 's/using Windows.UI/using Microsoft.UI/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBarLayout.uwp.wpf.cs +sed -i '' 's/Microsoft.Maui.Controls.Compatibility.Grid/Grid/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBarLayout.uwp.wpf.cs +sed -i '' 's/Microsoft.Maui.GridLength/GridLength/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBarLayout.uwp.wpf.cs +sed -i '' 's/ToBrush()/ToPlatform()/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBarLayout.uwp.wpf.cs +sed -i '' 's/Forms.//g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBarLayout.uwp.wpf.cs +sed -i '' 's/Font.Font/Font./g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBarLayout.uwp.wpf.cs +sed -i '' 's/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;/using Microsoft.Maui.Controls.Compatibility.Platform.UWP;using Microsoft.Maui;using Microsoft.Maui.Controls;using Microsoft.Maui.Platform;using Microsoft.UI.Xaml.Controls;using Microsoft.UI.Xaml.Media;using Button = Microsoft.UI.Xaml.Controls.Button;using ColumnDefinition = Microsoft.UI.Xaml.Controls.ColumnDefinition;using CornerRadius = Microsoft.UI.Xaml.CornerRadius;using Grid = Microsoft.UI.Xaml.Controls.Grid;using GridLength = Microsoft.UI.Xaml.GridLength;using RowDefinition = Microsoft.UI.Xaml.Controls.RowDefinition;using Thickness = Microsoft.UI.Xaml.Thickness;/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/SnackBarLayout.uwp.wpf.cs \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a34a3e142..1bae47418 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -62,15 +62,6 @@ jobs: pool: vmImage: windows-2019 steps: - - task: CmdLine@2 - displayName: 'Clear Local NuGet Cache' #https://github.com/actions/virtual-environments/issues/1090#issuecomment-748452120 - inputs: - script: 'nuget locals all -clear' - - task: MSBuild@1 - displayName: 'Clean Solution' - inputs: - solution: $(PathToSamplesSln) - msbuildArguments: '/t:Clean' - task: MSBuild@1 displayName: Build Solution inputs: @@ -88,25 +79,19 @@ jobs: inputs: version: $(NETCORE_VERSION) includePreviewVersions: false + - task: UseDotNet@2 displayName: 'Install .NET 3.1 Test SDK' inputs: version: $(NETCORE_TEST_VERSION_3_1) includePreviewVersions: false + - task: UseDotNet@2 displayName: 'Install .NET 2.1 Test SDK' inputs: version: $(NETCORE_TEST_VERSION_2_1) includePreviewVersions: false - - task: CmdLine@2 - displayName: 'Clear Local NuGet Cache' #https://github.com/actions/virtual-environments/issues/1090#issuecomment-748452120 - inputs: - script: 'nuget locals all -clear' - - task: MSBuild@1 - displayName: 'Clean Solution' - inputs: - solution: $(PathToSamplesSln) - msbuildArguments: '/t:Clean' + # if this is a tagged build, then update the version number - powershell: | $buildSourceBranch = "$(Build.SourceBranch)" @@ -115,6 +100,7 @@ jobs: Write-Host ("##vso[task.setvariable variable=NugetPackageVersion;]$tagVersion") displayName: Set NuGet Version to Tag Number condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/') + # if this is a PR build, then update the version number - powershell: | $prNumber = $env:System_PullRequest_PullRequestNumber @@ -125,6 +111,7 @@ jobs: Write-Host "##vso[build.updatebuildnumber]$fullVersionString" displayName: Set NuGet Version to PR Version condition: and(succeeded(), eq(variables['build.reason'], 'PullRequest')) + # restore, build and pack the packages - task: MSBuild@1 displayName: Build Xamarin.CommunityToolkit.csproj @@ -132,49 +119,60 @@ jobs: solution: $(PathToCommunityToolkitCsproj) configuration: Release msbuildArguments: '/restore /t:Build /p:ContinuousIntegrationBuild=true /p:Deterministic=false' + - task: CopyFiles@2 inputs: Contents: 'SignList.xml' - TargetFolder: '$(Build.ArtifactStagingDirectory)/nuget' + TargetFolder: '$(Build.ArtifactStagingDirectory)' + - task: MSBuild@1 displayName: Pack Community Toolkit NuGets inputs: solution: $(PathToCommunityToolkitCsproj) configuration: Release - msbuildArguments: '/t:Pack /p:PackageVersion=$(NugetPackageVersion) /p:PackageOutputPath="$(Build.ArtifactStagingDirectory)/nuget"' + msbuildArguments: '/t:Pack /p:PackageVersion=$(NugetPackageVersion)' + - task: MSBuild@1 displayName: Build Markup Project inputs: solution: $(PathToMarkupCsproj) configuration: Release msbuildArguments: '/restore /t:Build /p:ContinuousIntegrationBuild=true /p:Deterministic=false' + - task: MSBuild@1 displayName: Pack Markup NuGet inputs: solution: $(PathToMarkupCsproj) configuration: Release - msbuildArguments: '/t:Pack /p:PackageVersion=$(NugetPackageVersion) /p:PackageOutputPath="$(Build.ArtifactStagingDirectory)/nuget"' -# - task: DotNetCoreCLI@2 -# displayName: Publish to GitHub NuGet Packages -# condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/heads/main')) -# inputs: -# command: 'custom' -# custom: 'nuget' -# arguments: 'push --source https://nuget.pkg.github.com/xamarin/index.json --api-key $(GitHub.NuGet.Token) "$(Build.ArtifactStagingDirectory)\nuget\*.nupkg"' + msbuildArguments: '/t:Pack /p:PackageVersion=$(NugetPackageVersion)' + - task: CmdLine@2 displayName: 'Run Markup Unit Tests' inputs: script: dotnet test $(PathToMarkupUnitTestCsproj) -c Release --collect "Code coverage" -p:BuildInParallel=false + - task: CmdLine@2 displayName: 'Run Community Toolkit Unit Tests' inputs: script: dotnet test $(PathToCommunityToolkitUnitTestCsproj) -c Release --collect "Code coverage" -p:BuildInParallel=false + # publish the packages + - task: PowerShell@2 + displayName: 'Copy NuGet Packages to Staging Directory' + inputs: + targetType: 'inline' + script: | + $source = ".\src" + $filter = "nupkg" + Get-ChildItem -Path $source -Recurse | Where-Object { $_.Extension -match $filter } | Copy-Item -Destination "$(Build.ArtifactStagingDirectory)" + pwsh: true + - task: PublishBuildArtifacts@1 displayName: 'Publish Unsigned NuGets' inputs: artifactName: nuget - pathToPublish: '$(Build.ArtifactStagingDirectory)/nuget' + pathToPublish: '$(Build.ArtifactStagingDirectory)' + # make sure we are following the rules, but only on the main build - ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 @@ -191,35 +189,85 @@ jobs: inputs: targetType: F - - job: build_mauicompat - displayName: Build MauiCompat Library + - job: generate_mauicompat + displayName: Generate MauiCompat Library pool: - vmImage: macos-11 + vmImage: macos-latest steps: - task: CmdLine@2 - displayName: Install .NET 6.0.200-preview.22055.15 + displayName: Install .NET 6.0.300-preview.22204.3 inputs: script: | - curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version 6.0.200-preview.22055.15 --quality preview - dotnet --version + curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version 6.0.300-preview.22204.3 --quality preview + dotnet --info + - task: CmdLine@2 displayName: 'Install .NET MAUI Workload' inputs: script: 'dotnet workload install maui' + - task: JavaToolInstaller@0 displayName: 'Install Java SDK 11.0' inputs: versionSpec: '11' jdkArchitectureOption: 'x64' jdkSourceOption: 'PreInstalled' + - powershell: | $mauiCompatExists = Test-Path -Path "$(PathToMauiCompatCommunityToolkitCsproj)" Write-Output "##vso[task.setvariable variable=MauiCompatExists]$mauiCompatExists" + - task: CmdLine@2 displayName: 'Run MauiCompat Generator' condition: eq (variables['MauiCompatExists'], False) inputs: script: 'zsh ./MauiCompat.sh' + + - task: CopyFiles@2 + displayName: 'Copy output' + inputs: + contents: '**' + targetFolder: '$(Build.ArtifactStagingDirectory)' + + - publish: '$(Build.ArtifactStagingDirectory)' + displayName: 'Publish script' + artifact: drop + + - job: build_mauicompat + dependsOn: generate_mauicompat + displayName: Build MauiCompat Library + pool: + vmImage: windows-latest + steps: + - download: current + artifact: drop + + - powershell: | + wget https://dot.net/v1/dotnet-install.ps1 -OutFile C:\dotnet-install.ps1 + C:\dotnet-install.ps1 -Version 6.0.300-preview.22204.3 + dotnet --info + Write-Host "##vso[task.prependpath]C:\\Users\\VssAdministrator\\AppData\\Local\\Microsoft\\dotnet" + displayName: Install .NET 6.0.300-preview.22204.3 + + - task: CmdLine@2 + displayName: 'Install .NET MAUI Workload' + inputs: + script: 'dotnet workload install maui' + + - task: JavaToolInstaller@0 + displayName: 'Install Java SDK 11.0' + inputs: + versionSpec: '11' + jdkArchitectureOption: 'x64' + jdkSourceOption: 'PreInstalled' + + - task: CmdLine@2 + displayName: 'Global json' + inputs: + script: | + cd $(Pipeline.Workspace)\drop + dotnet new globaljson --sdk-version 6.0.300-preview.22204.3 --roll-forward latestMajor --force + # if this is a tagged build, then update the version number - powershell: | $buildSourceBranch = "$(Build.SourceBranch)" @@ -229,32 +277,38 @@ jobs: displayName: Set NuGet Version to Tag Number condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/')) # restore, build and pack the packages - - task: CmdLine@2 - displayName: 'Build Xamarin.CommunityToolkit.MauiCompat.csproj' - inputs: - script: 'dotnet build $(PathToMauiCompatCommunityToolkitCsproj) -c Release /p:ContinuousIntegrationBuild=true /p:Deterministic=false' - - task: CopyFiles@2 - inputs: - Contents: 'SignList.xml' - TargetFolder: '$(Build.ArtifactStagingDirectory)/nuget' - - task: CmdLine@2 + + - task: VSBuild@1 displayName: 'Pack Community Toolkit NuGets' inputs: - script: 'dotnet pack $(PathToMauiCompatCommunityToolkitCsproj) -c Release /p:PackageVersion=$(NugetPackageVersion) /p:PackageOutputPath="$(Build.ArtifactStagingDirectory)/nuget"' - - task: CmdLine@2 - displayName: 'Build Markup Project' - inputs: - script: 'dotnet build $(PathToMauiCompatMarkupCsproj) -c Release /p:ContinuousIntegrationBuild=true /p:Deterministic=false' - - task: CmdLine@2 - displayName: 'Pack Markup NuGet' + solution: '$(Pipeline.Workspace)\drop\$(PathToMauiCompatCommunityToolkitCsproj)' + configuration: 'Release' + msbuildArgs: '/restore -t:pack -p:PackageVersion=$(NugetPackageVersion) -p:Version=$(NugetPackageVersion) -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg' + + - task: VSBuild@1 + displayName: 'Build and Pack Markup NuGet' inputs: - script: 'dotnet pack $(PathToMauiCompatMarkupCsproj) -c Release /p:PackageVersion=$(NugetPackageVersion) /p:PackageOutputPath="$(Build.ArtifactStagingDirectory)/nuget"' + solution: '$(Pipeline.Workspace)\drop\$(PathToMauiCompatMarkupCsproj)' + configuration: 'Release' + msbuildArgs: '/restore -t:pack -p:PackageVersion=$(NugetPackageVersion) -p:Version=$(NugetPackageVersion) -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg' + # publish the packages + - task: PowerShell@2 + displayName: 'Copy NuGet Packages to Staging Directory' + inputs: + targetType: 'inline' + script: | + $source = "$(Pipeline.Workspace)\drop\src" + $filter = "nupkg" + Get-ChildItem -Path $source -Recurse | Where-Object { $_.Extension -match $filter } | Copy-Item -Destination "$(Build.ArtifactStagingDirectory)" + pwsh: true + - task: PublishBuildArtifacts@1 displayName: 'Publish Unsigned NuGets' inputs: artifactName: nuget - pathToPublish: '$(Build.ArtifactStagingDirectory)/nuget' + pathToPublish: '$(Build.ArtifactStagingDirectory)' + # make sure we are following the rules, but only on the main build - ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 @@ -284,52 +338,54 @@ jobs: Write-Host ("##vso[task.setvariable variable=NugetPackageVersion;]$tagVersion") displayName: Set NuGet Version to Tag Number condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/') - # 16feb21 jfversluis: let's not pin this anymore and use latest - # make sure to select the correct Xamarin and mono - #- bash: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh $(MONO_VERSION) - # displayName: Switch to the latest Xamarin SDK - #- bash: echo '##vso[task.setvariable variable=MD_APPLE_SDK_ROOT;]'/Applications/Xcode_$(XCODE_VERSION).app;sudo xcode-select --switch /Applications/Xcode_$(XCODE_VERSION).app/Contents/Developer - # displayName: Switch to the latest Xcode - # restore, build and pack the packages + - task: UseDotNet@2 displayName: 'Install .NET SDK' inputs: version: $(NETCORE_VERSION) includePreviewVersions: false + - task: UseDotNet@2 displayName: 'Install .NET 3.1 Test SDK' inputs: version: $(NETCORE_TEST_VERSION_3_1) includePreviewVersions: false + - task: UseDotNet@2 displayName: 'Install .NET 2.1 Test SDK' inputs: version: $(NETCORE_TEST_VERSION_2_1) includePreviewVersions: false + - task: CmdLine@2 displayName: 'Build Markup' inputs: script: '$(PathToMsBuildOnMacOS) $(PathToMarkupCsproj) /p:Configuration=Release /restore /t:Build /p:ContinuousIntegrationBuild=true /p:Deterministic=false' + - task: CmdLine@2 displayName: 'Build Community Toolkit' inputs: script: '$(PathToMsBuildOnMacOS) $(PathToCommunityToolkitCsproj) /p:Configuration=Release /restore /t:Build /p:ContinuousIntegrationBuild=true /p:Deterministic=false' + - task: CmdLine@2 displayName: 'Run Markup Unit Tests' inputs: script: 'dotnet test $(PathToMarkupUnitTestCsproj) -c Release -p:BuildInParallel=false' + - task: CmdLine@2 displayName: 'Run Community Toolkit Unit Tests' inputs: script: 'dotnet test $(PathToCommunityToolkitUnitTestCsproj) -c Release -p:BuildInParallel=false' + - task: CmdLine@2 displayName: 'Pack Markup NuGets' inputs: - script: '$(PathToMsBuildOnMacOS) $(PathToMarkupUnitTestCsproj) /p:Configuration=Release /t:Pack /p:PackageVersion=$(NugetPackageVersion) /p:PackageOutputPath="$(Build.ArtifactStagingDirectory)/nuget"' + script: '$(PathToMsBuildOnMacOS) $(PathToMarkupUnitTestCsproj) /p:Configuration=Release /t:Pack /p:PackageVersion=$(NugetPackageVersion)' + - task: CmdLine@2 displayName: 'Pack CommunityToolkit NuGets' inputs: - script: '$(PathToMsBuildOnMacOS) $(PathToCommunityToolkitCsproj) /p:Configuration=Release /t:Pack /p:PackageVersion=$(NugetPackageVersion) /p:PackageOutputPath="$(Build.ArtifactStagingDirectory)/nuget"' + script: '$(PathToMsBuildOnMacOS) $(PathToCommunityToolkitCsproj) /p:Configuration=Release /t:Pack /p:PackageVersion=$(NugetPackageVersion)' - ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: - template: sign-artifacts/jobs/v2.yml@internal-templates diff --git a/samples/XCT.Sample/Pages/Effects/IconTintColorEffectPage.xaml b/samples/XCT.Sample/Pages/Effects/IconTintColorEffectPage.xaml index 9d09cb54b..a3a983cf7 100644 --- a/samples/XCT.Sample/Pages/Effects/IconTintColorEffectPage.xaml +++ b/samples/XCT.Sample/Pages/Effects/IconTintColorEffectPage.xaml @@ -37,16 +37,16 @@ HorizontalTextAlignment="Center" /> @@ -59,18 +59,18 @@ Grid.Column="1"/> diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/AssemblyInfo/AssemblyInfo.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/AssemblyInfo/AssemblyInfo.android.cs index 7fa1e6ed1..4165727f6 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/AssemblyInfo/AssemblyInfo.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/AssemblyInfo/AssemblyInfo.android.cs @@ -4,4 +4,4 @@ [assembly: LinkerSafe] -[assembly: ExportImageSourceHandler(typeof(GravatarImageSource), typeof(GravatarImageSourceHandler))] \ No newline at end of file +[assembly: ExportImageSourceHandler(typeof(GravatarImageSource), typeof(GravatarImageSourceHandler))] \ No newline at end of file diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/AssemblyInfo/AssemblyInfo.uwp.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/AssemblyInfo/AssemblyInfo.uwp.cs index 388c99372..9d1575428 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/AssemblyInfo/AssemblyInfo.uwp.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/AssemblyInfo/AssemblyInfo.uwp.cs @@ -1,4 +1,4 @@ using Xamarin.CommunityToolkit.UI.Views; using Xamarin.Forms.Platform.UWP; -[assembly: ExportImageSourceHandler(typeof(GravatarImageSource), typeof(GravatarImageSourceHandler))] \ No newline at end of file +[assembly: ExportImageSourceHandler(typeof(GravatarImageSource), typeof(GravatarImageSourceHandler))] \ No newline at end of file diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/IconTintColor/IconTintColorEffectRouter.ios.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/IconTintColor/IconTintColorEffectRouter.ios.cs index 18d1bd516..46cacc103 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/IconTintColor/IconTintColorEffectRouter.ios.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Effects/IconTintColor/IconTintColorEffectRouter.ios.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using System; +using System.ComponentModel; using UIKit; using Xamarin.CommunityToolkit.Effects; using Xamarin.Forms; @@ -53,14 +54,20 @@ void ClearTintColor() { case UIImageView imageView: if (imageView.Image != null) + { + Element.PropertyChanged -= ImageViewTintColorPropertyChanged; imageView.Image = imageView.Image.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal); + } + break; case UIButton button: - if (button.CurrentImage != null) + if (button.ImageView.Image != null) { + Element.PropertyChanged -= ButtonTintColorPropertyChanged; var originalImage = button.CurrentImage.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal); button.SetImage(originalImage, UIControlState.Normal); } + break; } } @@ -68,24 +75,57 @@ void ClearTintColor() void SetUIImageViewTintColor(UIImageView imageView, Color color) { if (imageView.Image == null) - return; + { + Element.PropertyChanged += ImageViewTintColorPropertyChanged; + } + else + { + imageView.Image = imageView.Image.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate); + imageView.TintColor = color.ToUIColor(); + } + } - imageView.Image = imageView.Image.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate); - imageView.TintColor = color.ToUIColor(); + void ImageViewTintColorPropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == Image.IsLoadingProperty.PropertyName) + { + var element = (Image)Element; + + if (!element.IsLoading) + { + ApplyTintColor(); + } + } } void SetUIButtonTintColor(UIButton button, Color color) { - if (button.CurrentImage == null) - return; + if (button.ImageView.Image == null) + { + Element.PropertyChanged += ButtonTintColorPropertyChanged; + } + else + { + var templatedImage = button.CurrentImage.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate); - var templatedImage = button.CurrentImage.ImageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate); + button.SetImage(null, UIControlState.Normal); - button.SetImage(null, UIControlState.Normal); + button.TintColor = color.ToUIColor(); + button.ImageView.TintColor = color.ToUIColor(); + button.SetImage(templatedImage, UIControlState.Normal); + } + } - button.TintColor = color.ToUIColor(); - button.ImageView.TintColor = color.ToUIColor(); - button.SetImage(templatedImage, UIControlState.Normal); + void ButtonTintColorPropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == ImageButton.IsLoadingProperty.PropertyName) + { + var element = (ImageButton)Element; + if (!element.IsLoading) + { + ApplyTintColor(); + } + } } } } \ No newline at end of file diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/UWP/PopupRenderer.uwp.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/UWP/PopupRenderer.uwp.cs index 76269b85b..6b31c52ec 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/UWP/PopupRenderer.uwp.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Popup/UWP/PopupRenderer.uwp.cs @@ -175,10 +175,8 @@ void SetColor() flyoutStyle.Setters.Add(new Windows.UI.Xaml.Setter(FlyoutPresenter.BackgroundProperty, Element.Color.ToWindowsColor())); -#if UWP_18362 if (Element.Color == Color.Transparent) flyoutStyle.Setters.Add(new Windows.UI.Xaml.Setter(FlyoutPresenter.IsDefaultShadowEnabledProperty, false)); -#endif } void ApplyStyles() diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Xamarin.CommunityToolkit.csproj b/src/CommunityToolkit/Xamarin.CommunityToolkit/Xamarin.CommunityToolkit.csproj index bd7a514b9..14ed10637 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Xamarin.CommunityToolkit.csproj +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Xamarin.CommunityToolkit.csproj @@ -45,19 +45,7 @@ true - $(DefineConstants);UAP10_0 - - - $(DefineConstants);UWP_14393 - - - $(DefineConstants);UWP_16299;UWP_14393 - - - $(DefineConstants);UWP_18362;UWP_16299;UWP_14393 - - - $(DefineConstants);UWP_19041;UWP_18362;UWP_16299;UWP_14393 + $(DefineConstants);UAP10_0;UWP