Skip to content

Conversation

@PureWeen
Copy link
Member

Note

Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!

Description of Change

Issues Fixed

Fixes #

LogishaSelvarajSF4525 and others added 30 commits July 11, 2025 17:40
This PR includes a comprehensive set of UI test cases for the Editor
control. The tests validate the Editor control’s behavior across a wide
range of properties, including: Text, Placeholder, MaxLength,AutoSize,
IsReadOnly, IsEnabled, IsVisible, Keyboard, TextPrediction, SpellCheck,
TextColor, FontSize, FontFamily, FontAttributes, CharacterSpacing,
CursorPosition,
SelectionLength, HorizontalTextAlignment, VerticalTextAlignment.

### Editor Control Feature Matrix
**Gallery Page Addition**
- Integrated a new GalleryPageFactory entry for EditorControlPage into
CorePageView.cs.
- This allows easy navigation to the feature matrix page showcasing
Editor control functionality within the test app.

**Options Page Implementation**
- Created EditorOptionsPage.xaml, providing a UI to demonstrate and
interact with Editor properties dynamically.
- The page layout uses StackLayout and includes Editor controls
showcasing a variety of configurable properties, bound to the
EditorViewModel.

**Main Page Implementation**
- Added EditorControlPage.xaml.cs, which includes:
  - Initialization of the EditorViewModel for data binding.
- Event handlers for Editor control events such as TextChanged, Focused,
Unfocused, and Completed.
- Methods to update cursor position and selection length
programmatically.
  
  **Issues Identified**

- #29833
- #26968
- #29812
- #30071
- #30571



https://github.com/user-attachments/assets/ade2872b-9010-4b59-b554-96dab622d225
…30789)

This pull request makes updates to the `EntryControlPage.xaml` file to
improve the layout and simplify the user interface by replacing the
toolbar-based "Options" button with an in-page button. Below are the
most important changes:

### UI Layout Improvements:

* Added an `Options` button directly within the page layout, with
properties `Text="Options"`, `FontSize="11"`, and a `Clicked` event
handler (`NavigateToOptionsPage_Clicked`). This replaces the toolbar
item for better accessibility.

### Code Simplification:

* Removed the `<ContentPage.ToolbarItems>` section, which previously
contained the "Options" button. This change simplifies the structure by
consolidating the button into the main layout.

### Minor Adjustments:

* Adjusted the `Margin` property of the "Entry Control" label to improve
spacing consistency in the layout.
* Fix null reference exception when removing appearance observer in ShellContentFragment

* Change to use `as` syntax

* Add test to verify ShellContentFragment.Destroy handles null _shellContext gracefully

* Add test to ensure ShellContentFragment.Destroy handles null _shellContext gracefully

* Add safeguard in ShellContentFragment.Destroy to prevent multiple calls
…ScrollView (#30241)

* fix added

* Revert "fix added"

This reverts commit 138797f.

* fix added

* fix updated
…l Flyout content. (#30069)

* fix-22045 - Made changes on Android ShellFlyout sizing by adding OnDrawerOpened event and updating Content so OnSizeAllocated is called with correct values when drawer opens.

* fix-22045- Set the contentview frame value when the FlyoutView layout change.

* fix-22045- Changes committed.
…missions if NeverForLocation flag is present (#20874)

* otherwise the permission-status will be 'denied' if AccessFineLocation is in the manifest, but denied at runtime
  (even if it is not strictly required)
* Safe Get of RealParent to avoid warnings

* Optimized the fix

* Make it as default private

* Optimized the fix

* Modified the fix and added test

* Modified the fix based on concern and added test

* unwanted spacing

* Replaced the Parent property directly
… Immediately Setting ItemsSource to Null Causes a Crash (#29940)

* Re-evaluate indexpaths in PerformBatchUpdates

* Add UI test

* update test

* bring back null check

* add a check to see if ItemsSource is disposed
#29926)

* Fixed StackLayout crashes on Windows with HeightRequest 0, padding, and opposing alignment.

* Included test case for Vertical StackLayout

* Updated label content
)

* [Windows] Fixed CanvasDrawingSession Exception

* Update in description label

* Updated Suggested Changes
* Added Feature Matrix for ScrollView

* Updated changes

* Changes updated

* Modified the test cases

* Modified UI

* Added snapshots

* Added images

* Modified Test Case

* Added images

* Resaved images
# Conflicts:
#	src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
* modified UI and test cases

* updated test cases

* added new test cases

* updated test cases

* added android and iOS snapshots

* updated format

* updated flow direction code

* added mac and windows snapshots

* updated iOS snapshots
… fix (#30307)

* Disconnect context flyout handler

* Update MenuFlyoutHandler.iOS.cs
* Fix for TapGesture ButtonMask

* Added TestCase

* Update Testcase

* Modified Testcase
if the type is known then a direct cast should be used instead of an as.
since, in the case where the assumption is wrong, then it is better to
get a cast exception instead of a null ref exception.

basically if code uses `as` and does not check for null when that
variable is used, then it is likely problematic code.
PureWeen and others added 13 commits August 8, 2025 21:22
* Use a better logger for Azure DevOps

* Update dotnet.cake

* Update IMauiContext.cs
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…multiple windows are open. (#30537)

* Fixed the PointerGestureRecognizer events from another window interfere with the active window

* Optimize the fix

* Logging the error

* missed paramter

* - add some code to debounce when there are multi window scenarios

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
…d Gesture recognizers (#29649)

* Improve Keyboard Accessibility: Support Spacebar for Android Gesture Recognizers

* Update GesturePlatformManager.Android.cs

* - update code a bit

* Update ViewExtensions.cs

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
…1112)

* Revert "ToolbarItem behavior with ImageSource iOS - fix (#28833)"

This reverts commit 5860fe6.

* Update src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30818.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* - fix define on testing

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…der (#27928)

* Publish new snapshots and diffs to a specific artifacts folder

* Fix mistake

* Updated test to generate new snapshots (and verify the changes)

* More changes

* Fix identation issues

* Removed dependencies usage

* More fixes

* Revert changes
* [ci] Add more keys

* Fix

* Try again

* Remove extra pipelines
# Conflicts:
#	eng/Signing.props
#	eng/Versions.props
#	src/Controls/samples/Controls.Sample/Pages/PlatformSpecifics/iOS/iOSSafeAreaPage.xaml.cs
#	src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs
#	src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs
#	src/Controls/src/Core/ICornerElement.cs
#	src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyScrollViewWithScrollToPositionCenterAndAbsoluteLayoutContent.png
#	src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyScrollViewWithScrollToPositionCenterAndHorizontalLayoutContentWhenOrientationHorizontal.png
#	src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyScrollViewWithScrollToPositionCenterAndImageContent.png
#	src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyScrollViewWithScrollToPositionEndAndAbsoluteLayoutContent.png
#	src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyScrollViewWithScrollToPositionEndAndHorizontalLayoutContentWhenOrientationHorizontal.png
#	src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyScrollViewWithScrollToPositionEndAndImageContent.png
#	src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyScrollViewWithScrollToPositionMakeVisibleAndHorizontalLayoutContentWhenOrientationHorizontal.png
#	src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyScrollViewWithScrollToPositionStartAndHorizontalLayoutContentWhenOrientationHorizontal.png
#	src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
#	src/Controls/tests/TestCases.HostApp/FeatureMatrix/ScrollView/ScrollViewOptionsPage.xaml.cs
#	src/Controls/tests/TestCases.HostApp/FeatureMatrix/ScrollView/ScrollViewViewModel.cs
#	src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyScrollViewWithScrollToPositionCenterAndAbsoluteLayoutContent.png
#	src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyScrollViewWithScrollToPositionCenterAndImageContent.png
#	src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyScrollViewWithScrollToPositionEndAndAbsoluteLayoutContent.png
#	src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyScrollViewWithScrollToPositionEndAndImageContent.png
#	src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ScrollViewFeatureTests.cs
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyCharacterSpacingWhenFontFamily.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyCharacterSpacingWhenMaxLengthSet.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenFlowDirectionSet.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnCharacterSpacing.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnHorizontalTextAlignment.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnVerticalTextAlignment.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordWhenFontSizeSet.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordWhenMaxLenghtSetValue.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWhenFlowDirectionSet.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontAttributes.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontFamily.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontSize.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithHorizontalAlignment.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithPasswordTrue.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithVerticalAlignment.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenAlingnedHorizontally.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenAlingnedVertically.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenCharacterSpacingSetValues.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontAttributesSet.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontFamilySetValue.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontSizeSetCorrectly.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenIsPasswordTrueOrFalse.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenTextColorSetCorrectly.png
#	src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png
#	src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/ClearButtonVisiblityButton_TextPresent.png
#	src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyScrollViewWithScrollToPositionCenterAndAbsoluteLayoutContent.png
#	src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyScrollViewWithScrollToPositionCenterAndImageContent.png
#	src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyScrollViewWithScrollToPositionEndAndAbsoluteLayoutContent.png
#	src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyScrollViewWithScrollToPositionEndAndImageContent.png
#	src/Core/src/Platform/Android/MauiScrollView.cs
#	src/Core/src/Platform/iOS/MauiScrollView.cs
Copilot AI review requested due to automatic review settings August 13, 2025 17:35
@PureWeen PureWeen requested a review from a team as a code owner August 13, 2025 17:35
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR appears to be a merge of the main branch into a .NET 10 branch, bringing in numerous new features and test cases for .NET MAUI controls. The changes include extensive test coverage for HybridWebView functionality, new feature matrix implementations for various controls, and several bug fixes.

Key changes:

  • Addition of comprehensive HybridWebView test infrastructure with multiple HTML pages for testing JavaScript-C# communication
  • New feature matrix implementations for TimePicker, SearchBar, GraphicsView, and HybridWebView controls with associated view models and options pages
  • Multiple new issue test cases addressing specific bugs across iOS, Android, and Windows platforms
  • Updates to the test host app configuration to support new custom handlers

Reviewed Changes

Copilot reviewed 107 out of 652 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
HybridWebView HTML files Four new HTML test pages for comprehensive HybridWebView testing scenarios
Feature matrix implementations Complete MVVM implementations for TimePicker, SearchBar, GraphicsView, and HybridWebView controls
Issue test cases 15+ new test cases covering various platform-specific bugs and regressions
MauiProgram.cs Configuration updates to register new custom handlers
EntryOptionsPage.xaml UI layout improvements with better spacing and font sizing

You can also share your feedback on Copilot code review for a chance to win a $100 gift card. Take the survey.

if (stream != null)
{
_image = Microsoft.Maui.Graphics.Platform.PlatformImage.FromStream(stream);
Debug.WriteLine($"Successfully loaded image with resource name: {resourceName}");
Copy link

Copilot AI Aug 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The hard-coded resource name array contains multiple potential paths that may not exist. This approach creates maintenance overhead as resource names could change. Consider using a more systematic approach to locate embedded resources.

Suggested change
Debug.WriteLine($"Successfully loaded image with resource name: {resourceName}");
// Systematically search for the resource name ending with "royals.png"
string resourceFileName = "royals.png";
string foundResourceName = null;
foreach (var name in assembly.GetManifestResourceNames())
{
if (name.EndsWith(resourceFileName, StringComparison.OrdinalIgnoreCase))
{
foundResourceName = name;
break;
}
}
if (foundResourceName != null)
{
using (var stream = assembly.GetManifestResourceStream(foundResourceName))
{
if (stream != null)
{
_image = Microsoft.Maui.Graphics.Platform.PlatformImage.FromStream(stream);
Debug.WriteLine($"Successfully loaded image with resource name: {foundResourceName}");

Copilot uses AI. Check for mistakes.
behavior: 'smooth',
block: 'nearest'
});
}, 5);
Copy link

Copilot AI Aug 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nested setTimeout calls (setTimeout within requestAnimationFrame) create unnecessary delay and complexity. The 5ms timeout serves no clear purpose and could be removed.

Suggested change
}, 5);
messageDiv.scrollIntoView({
behavior: 'smooth',
block: 'nearest'
});

Copilot uses AI. Check for mistakes.
}
catch (Exception ex)
{
Debug.WriteLine($"Error loading image: {ex.Message}");
Copy link

Copilot AI Aug 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Exception handling swallows all exceptions and only logs the message. This could mask important debugging information. Consider logging the full exception details including stack trace.

Suggested change
Debug.WriteLine($"Error loading image: {ex.Message}");
Debug.WriteLine($"Error loading image: {ex}");

Copilot uses AI. Check for mistakes.
@jfversluis jfversluis merged commit 6441f81 into net10.0 Aug 15, 2025
129 checks passed
@jfversluis jfversluis deleted the net10_merge_main branch August 15, 2025 12:44
@PureWeen PureWeen added the area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions label Aug 20, 2025
@github-actions github-actions bot locked and limited conversation to collaborators Sep 20, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions

Projects

None yet

Development

Successfully merging this pull request may close these issues.