Skip to content

[2025/06/02] Candidate - In Flight Branch #29754

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Jun 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
3c27291
Convert HybridWebView.js to TypeScript and embed (#27183)
mattleibow May 23, 2025
636bd12
Fix up relevant CA1416 warnings - Set 3 (#26751)
Tamilarasan-Paranthaman May 24, 2025
ae8be78
Fix up relevant CA1416 warnings - Set 1 (#26696)
Tamilarasan-Paranthaman May 28, 2025
0aa43b2
[iOS/Mac]Fix StrokeDashArray Property not Rendering (#29670)
devanathan-vaithiyanathan May 28, 2025
984889f
[Android/ iOS] Fix Flyout icon is displayed when flyout is disabled …
devanathan-vaithiyanathan May 28, 2025
9827339
[Android & iOS] Fix for SearchHandler Character Spacing Property (#29…
SubhikshaSf4851 May 28, 2025
d57b54f
[create-pull-request] automated change (#29724)
github-actions[bot] May 29, 2025
fb97a7e
[Windows] Fix for SearchHandler Visibility Not Updating During In-Sec…
BagavathiPerumal May 29, 2025
907d603
[Windows] - Fix view position shift when shadows are added or removed…
prakashKannanSf3972 May 30, 2025
1189b8f
[Testing] Feature Matrix UITest Cases for Shadows (#27701)
jsuarezruiz May 30, 2025
39a6e48
[iOS] Fixed Shell.SearchHandler ClearPlaceholderIcon Color Issue (#28…
Tamilarasan-Paranthaman May 30, 2025
bb3bd7c
Fix -[iOS] - CarouselView Throws ArgumentOutOfRangeException Immediat…
SuthiYuvaraj May 30, 2025
35a19e4
[Windows] Fix for ItemsSource Does Not Dynamically Set to null in Car…
SyedAbdulAzeemSF4852 May 30, 2025
730766a
[Testing] Feature Matrix UITest Cases for Label (#29690)
NafeelaNazhir May 30, 2025
4b537ae
updated base images for candidate PR failures (#29766)
anandhan-rajagopal Jun 2, 2025
2b2b6d0
[Android] Fix: Modal Animation Repeats When Returning from Background…
bhavanesh2001 Jun 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,7 @@
</ItemGroup>
</Target>

<!-- Tell typescript to stop deleting everything before building the next TFM -->
<Target Name="TypeScriptDeleteOutputFromOtherConfigs" />

</Project>
2 changes: 1 addition & 1 deletion eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -216,4 +216,4 @@
<MicrosoftiOSSdkPackageVersion>$(MicrosoftiOSSdknet90_180PackageVersion)</MicrosoftiOSSdkPackageVersion>
<MicrosofttvOSSdkPackageVersion>$(MicrosofttvOSSdknet90_180PackageVersion)</MicrosofttvOSSdkPackageVersion>
</PropertyGroup>
</Project>
</Project>
2 changes: 1 addition & 1 deletion eng/pipelines/common/ui-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ parameters:
- 'ScrollView,SearchBar,Shape,Slider,SoftInput,Stepper,Switch,SwipeView'
- 'Shell'
- 'TabbedPage,TableView,TimePicker,TitleView,ToolbarItem'
- 'ViewBaseTests,Visual,WebView,Window'
- 'Shadow,ViewBaseTests,Visual,WebView,Window'

projects:
- name: name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@
<ItemGroup>
<EmbeddedResource Include="Resources\Embedded\*" />
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
<MauiAsset Include="..\..\..\Core\src\Handlers\HybridWebView\HybridWebView.js" LogicalName="HybridSamplePage\scripts\HybridWebView.js" />
<MauiImage Include="Resources\Images\*" />
<MauiImage Update="Resources\Images\*.gif" Resize="false" />
<MauiIcon Include="Resources\AppIcons\appicon.svg" ForegroundFile="Resources\AppIcons\appicon_foreground.svg" />
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using CoreGraphics;
using Foundation;
using Microsoft.Maui.Controls.Compatibility;
using Microsoft.Maui.Controls.Compatibility.iOS.Resources;
Expand Down Expand Up @@ -33,19 +34,15 @@ static ContextActionsCell()
{
var rect = new RectangleF(0, 0, 1, 1);
var size = rect.Size;

UIGraphics.BeginImageContext(size);
var context = UIGraphics.GetCurrentContext();
context.SetFillColor(Microsoft.Maui.Platform.ColorExtensions.Red.CGColor);
context.FillRect(rect);
DestructiveBackground = UIGraphics.GetImageFromCurrentImageContext();

context.SetFillColor(Microsoft.Maui.Platform.ColorExtensions.LightGray.CGColor);
context.FillRect(rect);

NormalBackground = UIGraphics.GetImageFromCurrentImageContext();

context.Dispose();
using var renderer = new UIGraphicsImageRenderer(size);
DestructiveBackground = renderer.CreateImage((UIGraphicsImageRendererContext ctx) =>
{
FillRect(ctx, rect, ColorExtensions.Red.CGColor);
});
NormalBackground = renderer.CreateImage((UIGraphicsImageRendererContext ctx) =>
{
FillRect(ctx, rect, ColorExtensions.LightGray.CGColor);
});
}

public ContextActionsCell() : base(UITableViewCellStyle.Default, Key)
Expand Down Expand Up @@ -84,6 +81,13 @@ public void Close()
_scroller.ContentOffset = new PointF(0, 0);
}

static void FillRect(UIGraphicsImageRendererContext ctx, RectangleF rect, CGColor color)
{
var context = ctx.CGContext;
context.SetFillColor(color);
context.FillRect(rect);
}

public override void LayoutSubviews()
{
base.LayoutSubviews();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public SearchHandlerAppearanceTracker(IShellSearchView searchView, IShellContext
UpdateHorizontalTextAlignment();
UpdateVerticalTextAlignment();
UpdateInputType();
UpdateCharacterSpacing();
}

protected virtual void SearchHandlerPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
Expand Down Expand Up @@ -90,6 +91,17 @@ protected virtual void SearchHandlerPropertyChanged(object sender, System.Compon
{
UpdateText();
}
else if (e.Is(SearchHandler.CharacterSpacingProperty))
{
UpdateCharacterSpacing();
}
}
void UpdateCharacterSpacing()
{
if (_editText is not null)
{
_editText.LetterSpacing = _searchHandler.CharacterSpacing.ToEm();
}
}

void UpdateText()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,8 @@ protected virtual async void UpdateLeftBarButtonItem(Context context, AToolbar t
var text = backButtonHandler.GetPropertyIfSet(BackButtonBehavior.TextOverrideProperty, String.Empty);
var command = backButtonHandler.GetPropertyIfSet<ICommand>(BackButtonBehavior.CommandProperty, null);
bool isEnabled = _shell.Toolbar.BackButtonEnabled;
var image = GetFlyoutIcon(backButtonHandler, page);
//Add the FlyoutIcon only if the FlyoutBehavior is Flyout
var image = _flyoutBehavior == FlyoutBehavior.Flyout ? GetFlyoutIcon(backButtonHandler, page) : null;
var backButtonVisible = _toolbar.BackButtonVisible;

DrawerArrowDrawable icon = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,10 @@ void SearchHandlerPropertyChanged(object sender, System.ComponentModel.PropertyC
{
UpdateText(_uiSearchBar.FindDescendantView<UITextField>());
}
else if (e.Is(SearchHandler.CharacterSpacingProperty))
{
UpdateCharacterSpacing(_uiSearchBar.FindDescendantView<UITextField>());
}
}

void UpdateText(UITextField uiTextField)
Expand All @@ -128,6 +132,27 @@ void UpdateText(UITextField uiTextField)

uiTextField.Text = _searchHandler.Query;
UpdateTextTransform(uiTextField);
UpdateCharacterSpacing(uiTextField);
}

void UpdateCharacterSpacing(UITextField textField)
{
if (textField is null)
{
return;
}

var attributedText = textField.AttributedText?.WithCharacterSpacing(_searchHandler.CharacterSpacing);
if (attributedText is not null)
{
textField.AttributedText = attributedText;
}

var placeholderAttributedText = textField.AttributedPlaceholder?.WithCharacterSpacing(_searchHandler.CharacterSpacing);
if (placeholderAttributedText is not null)
{
textField.AttributedPlaceholder = placeholderAttributedText;
}
}

void GetDefaultSearchBarColors(UISearchBar searchBar)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,11 @@ void UpdateLeftToolbarItems()

if (String.IsNullOrWhiteSpace(text) && image == null)
{
image = _context.Shell.FlyoutIcon;
//Add the FlyoutIcon only if the FlyoutBehavior is Flyout
if (_flyoutBehavior == FlyoutBehavior.Flyout)
{
image = _context.Shell.FlyoutIcon;
}
}

if (!IsRootPage)
Expand Down Expand Up @@ -803,7 +807,14 @@ void SearchButtonClicked(object sender, EventArgs e)

void SetSearchBarIcon(UISearchBar searchBar, ImageSource source, UISearchBarIcon icon)
{
source.LoadImage(source.FindMauiContext(), image =>
var mauiContext = source.FindMauiContext(true);

if (mauiContext is null)
{
return;
}

source.LoadImage(mauiContext, image =>
{
var result = image?.Value;
if (result != null)
Expand All @@ -829,6 +840,11 @@ void OnPageLoaded(object sender, EventArgs e)
}

UpdateToolbarItemsInternal();

//UIKIt will try to override our colors when the SearchController is inside the NavigationBar
//Best way was to force them to be set again when page is loaded / ViewDidLoad
_searchHandlerAppearanceTracker?.UpdateSearchBarColors();

CheckAppeared();
}

Expand All @@ -850,9 +866,6 @@ void SetAppeared()
return;

_isVisiblePage = true;
//UIKIt will try to override our colors when the SearchController is inside the NavigationBar
//Best way was to force them to be set again when page is Appearing / ViewDidLoad
_searchHandlerAppearanceTracker?.UpdateSearchBarColors();
UpdateShellToMyPage();

if (_context.Shell.Toolbar != null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,6 @@ protected override void DisconnectHandler(ListViewBase platformView)

protected override void UpdateItemsSource()
{
var itemsSource = ItemsView?.ItemsSource;

if (itemsSource == null)
return;

var itemTemplate = ItemsView?.ItemTemplate;

if (itemTemplate == null)
Expand Down Expand Up @@ -149,7 +144,7 @@ protected override ItemsViewScrolledEventArgs ComputeVisibleIndexes(ItemsViewScr
{
args = base.ComputeVisibleIndexes(args, orientation, advancing);

if (ItemsView.Loop)
if (ItemsView.Loop && ItemsView.ItemsSource is not null)
{
args.FirstVisibleItemIndex %= ItemCount;
args.CenterItemIndex %= ItemCount;
Expand Down Expand Up @@ -513,6 +508,9 @@ void CarouselScrolled(object sender, ItemsViewScrolledEventArgs e)

void OnScrollViewChanging(object sender, ScrollViewerViewChangingEventArgs e)
{
if (ItemsView.ItemsSource is null)
return;

ItemsView.SetIsDragging(true);
ItemsView.IsScrolling = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public static ILoopItemsViewSource CreateForCarouselView(IEnumerable itemsSource
IList _ when itemsSource is INotifyCollectionChanged => new LoopObservableItemsSource2(itemsSource as IList, collectionViewController, loop),
IEnumerable _ when itemsSource is INotifyCollectionChanged => new LoopObservableItemsSource2(itemsSource as IEnumerable, collectionViewController, loop),
IEnumerable<object> generic => new LoopListSource2(generic, loop),
_ => new LoopListSource(itemsSource, loop),
_ => new LoopListSource2(itemsSource, loop),
};
}

Expand Down
Loading
Loading