Skip to content

Commit

Permalink
Interfaced handlers for Picker and ProgressBar (#4843)
Browse files Browse the repository at this point in the history
* interfaced PickerHandler

* interfaced ProgressBarHandler
  • Loading branch information
antonfirsov committed Feb 23, 2022
1 parent e23af0b commit 7b3c187
Show file tree
Hide file tree
Showing 12 changed files with 142 additions and 72 deletions.
18 changes: 18 additions & 0 deletions src/Core/src/Handlers/Picker/IPickerHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#if __IOS__ || MACCATALYST
using PlatformView = Microsoft.Maui.Platform.MauiPicker;
#elif MONOANDROID
using PlatformView = Microsoft.Maui.Platform.MauiPicker;
#elif WINDOWS
using PlatformView = Microsoft.Maui.Platform.MauiComboBox;
#elif NETSTANDARD || (NET6_0 && !IOS && !ANDROID)
using PlatformView = System.Object;
#endif

namespace Microsoft.Maui.Handlers
{
public partial interface IPickerHandler : IViewHandler
{
new IPicker VirtualView { get; }
new PlatformView PlatformView { get; }
}
}
28 changes: 14 additions & 14 deletions src/Core/src/Handlers/Picker/PickerHandler.Android.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,51 +51,51 @@ void SetupDefaults(MauiPicker platformView)
}

// This is a Android-specific mapping
public static void MapBackground(PickerHandler handler, IPicker picker)
public static void MapBackground(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateBackground(picker, s_defaultBackground);
}

public static void MapReload(PickerHandler handler, IPicker picker, object? args) => handler.Reload();
public static void MapReload(IPickerHandler handler, IPicker picker, object? args) => Reload(handler);

public static void MapTitle(PickerHandler handler, IPicker picker)
public static void MapTitle(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateTitle(picker);
}

public static void MapTitleColor(PickerHandler handler, IPicker picker)
public static void MapTitleColor(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateTitleColor(picker, s_defaultTitleColors);
}

public static void MapSelectedIndex(PickerHandler handler, IPicker picker)
public static void MapSelectedIndex(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateSelectedIndex(picker);
}

public static void MapCharacterSpacing(PickerHandler handler, IPicker picker)
public static void MapCharacterSpacing(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateCharacterSpacing(picker);
}

public static void MapFont(PickerHandler handler, IPicker picker)
public static void MapFont(IPickerHandler handler, IPicker picker)
{
var fontManager = handler.GetRequiredService<IFontManager>();

handler.PlatformView?.UpdateFont(picker, fontManager);
}

public static void MapHorizontalTextAlignment(PickerHandler handler, IPicker picker)
public static void MapHorizontalTextAlignment(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateHorizontalAlignment(picker.HorizontalTextAlignment);
}

public static void MapTextColor(PickerHandler handler, IPicker picker)
public static void MapTextColor(IPickerHandler handler, IPicker picker)
{
handler.PlatformView.UpdateTextColor(picker, s_defaultTextColors);
}

public static void MapVerticalTextAlignment(PickerHandler handler, IPicker picker)
public static void MapVerticalTextAlignment(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateVerticalAlignment(picker.VerticalTextAlignment);
}
Expand Down Expand Up @@ -168,15 +168,15 @@ void OnClick(object? sender, EventArgs e)

void OnRowsCollectionChanged(object? sender, EventArgs e)
{
Reload();
Reload(this);
}

void Reload()
static void Reload(IPickerHandler handler)
{
if (VirtualView == null || PlatformView == null)
if (handler.VirtualView == null || handler.PlatformView == null)
return;

PlatformView.UpdatePicker(VirtualView);
handler.PlatformView.UpdatePicker(handler.VirtualView);
}
}
}
18 changes: 9 additions & 9 deletions src/Core/src/Handlers/Picker/PickerHandler.Standard.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ public partial class PickerHandler : ViewHandler<IPicker, object>
{
protected override object CreatePlatformView() => throw new NotImplementedException();

public static void MapReload(PickerHandler handler, IPicker picker, object? args) { }
public static void MapTitle(PickerHandler handler, IPicker view) { }
public static void MapTitleColor(PickerHandler handler, IPicker view) { }
public static void MapSelectedIndex(PickerHandler handler, IPicker view) { }
public static void MapCharacterSpacing(PickerHandler handler, IPicker view) { }
public static void MapFont(PickerHandler handler, IPicker view) { }
public static void MapTextColor(PickerHandler handler, IPicker view) { }
public static void MapHorizontalTextAlignment(PickerHandler handler, IPicker view) { }
public static void MapVerticalTextAlignment(PickerHandler handler, IPicker view) { }
public static void MapReload(IPickerHandler handler, IPicker picker, object? args) { }
public static void MapTitle(IPickerHandler handler, IPicker view) { }
public static void MapTitleColor(IPickerHandler handler, IPicker view) { }
public static void MapSelectedIndex(IPickerHandler handler, IPicker view) { }
public static void MapCharacterSpacing(IPickerHandler handler, IPicker view) { }
public static void MapFont(IPickerHandler handler, IPicker view) { }
public static void MapTextColor(IPickerHandler handler, IPicker view) { }
public static void MapHorizontalTextAlignment(IPickerHandler handler, IPicker view) { }
public static void MapVerticalTextAlignment(IPickerHandler handler, IPicker view) { }
}
}
31 changes: 17 additions & 14 deletions src/Core/src/Handlers/Picker/PickerHandler.Windows.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,53 +43,56 @@ void SetupDefaults(MauiComboBox platformView)
_defaultForeground = platformView.Foreground;
}

void Reload()
static void Reload(IPickerHandler handler)
{
if (VirtualView == null || PlatformView == null)
if (handler.VirtualView == null || handler.PlatformView == null)
return;
PlatformView.ItemsSource = new ItemDelegateList<string>(VirtualView);
handler.PlatformView.ItemsSource = new ItemDelegateList<string>(handler.VirtualView);
}

public static void MapReload(PickerHandler handler, IPicker picker, object? args) => handler.Reload();
public static void MapReload(IPickerHandler handler, IPicker picker, object? args) => Reload(handler);

public static void MapTitle(PickerHandler handler, IPicker picker)
public static void MapTitle(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateTitle(picker);
}

public static void MapTitleColor(PickerHandler handler, IPicker picker)
public static void MapTitleColor(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateTitle(picker);
}

public static void MapSelectedIndex(PickerHandler handler, IPicker picker)
public static void MapSelectedIndex(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateSelectedIndex(picker);
}

public static void MapCharacterSpacing(PickerHandler handler, IPicker picker)
public static void MapCharacterSpacing(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateCharacterSpacing(picker);
}

public static void MapFont(PickerHandler handler, IPicker picker)
public static void MapFont(IPickerHandler handler, IPicker picker)
{
var fontManager = handler.GetRequiredService<IFontManager>();

handler.PlatformView?.UpdateFont(picker, fontManager);
}

public static void MapTextColor(PickerHandler handler, IPicker picker)
public static void MapTextColor(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateTextColor(picker, handler._defaultForeground);
if (handler is PickerHandler platformHandler)
{
platformHandler.PlatformView?.UpdateTextColor(picker, platformHandler._defaultForeground);
}
}

public static void MapHorizontalTextAlignment(PickerHandler handler, IPicker picker)
public static void MapHorizontalTextAlignment(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateHorizontalTextAlignment(picker);
}

public static void MapVerticalTextAlignment(PickerHandler handler, IPicker picker)
public static void MapVerticalTextAlignment(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateVerticalTextAlignment(picker);
}
Expand All @@ -102,7 +105,7 @@ void OnControlSelectionChanged(object? sender, WSelectionChangedEventArgs e)

void OnRowsCollectionChanged(object? sender, EventArgs e)
{
Reload();
Reload(this);
}
}
}
28 changes: 20 additions & 8 deletions src/Core/src/Handlers/Picker/PickerHandler.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
namespace Microsoft.Maui.Handlers
#if __IOS__ || MACCATALYST
using PlatformView = Microsoft.Maui.Platform.MauiPicker;
#elif MONOANDROID
using PlatformView = Microsoft.Maui.Platform.MauiPicker;
#elif WINDOWS
using PlatformView = Microsoft.Maui.Platform.MauiComboBox;
#elif NETSTANDARD || (NET6_0 && !IOS && !ANDROID)
using PlatformView = System.Object;
#endif

namespace Microsoft.Maui.Handlers
{
public partial class PickerHandler
public partial class PickerHandler : IPickerHandler
{
public static IPropertyMapper<IPicker, PickerHandler> PickerMapper = new PropertyMapper<IPicker, PickerHandler>(ViewMapper)
public static IPropertyMapper<IPicker, IPickerHandler> Mapper = new PropertyMapper<IPicker, PickerHandler>(ViewMapper)
{
#if __ANDROID__
[nameof(IPicker.Background)] = MapBackground,
Expand All @@ -17,26 +27,28 @@ public partial class PickerHandler
[nameof(ITextAlignment.VerticalTextAlignment)] = MapVerticalTextAlignment
};

public static CommandMapper<IPicker, PickerHandler> PickerCommandMapper = new(ViewCommandMapper)
public static CommandMapper<IPicker, IPickerHandler> CommandMapper = new(ViewCommandMapper)
{
["Reload"] = MapReload
};

static PickerHandler()
{
#if __IOS__
PickerMapper.PrependToMapping(nameof(IView.FlowDirection), (h, __) => h.UpdateValue(nameof(ITextAlignment.HorizontalTextAlignment)));
Mapper.PrependToMapping(nameof(IView.FlowDirection), (h, __) => h.UpdateValue(nameof(ITextAlignment.HorizontalTextAlignment)));
#endif
}

public PickerHandler() : base(PickerMapper, PickerCommandMapper)
public PickerHandler() : base(Mapper, CommandMapper)
{

}

public PickerHandler(IPropertyMapper mapper) : base(mapper)
{

}

IPicker IPickerHandler.VirtualView => VirtualView;

PlatformView IPickerHandler.PlatformView => PlatformView;
}
}
26 changes: 13 additions & 13 deletions src/Core/src/Handlers/Picker/PickerHandler.iOS.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,54 +87,54 @@ protected override void DisconnectHandler(MauiPicker platformView)

base.DisconnectHandler(platformView);
}
void Reload()
static void Reload(IPickerHandler handler)
{
if (VirtualView == null || PlatformView == null)
if (handler.VirtualView == null || handler.PlatformView == null)
return;

PlatformView.UpdatePicker(VirtualView);
handler.PlatformView.UpdatePicker(handler.VirtualView);
}

public static void MapReload(PickerHandler handler, IPicker picker, object? args) => handler.Reload();
public static void MapReload(IPickerHandler handler, IPicker picker, object? args) => Reload(handler);

public static void MapTitle(PickerHandler handler, IPicker picker)
public static void MapTitle(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateTitle(picker);
}

public static void MapTitleColor(PickerHandler handler, IPicker picker)
public static void MapTitleColor(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateTitleColor(picker);
}

public static void MapSelectedIndex(PickerHandler handler, IPicker picker)
public static void MapSelectedIndex(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateSelectedIndex(picker);
}

public static void MapCharacterSpacing(PickerHandler handler, IPicker picker)
public static void MapCharacterSpacing(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateCharacterSpacing(picker);
}

public static void MapFont(PickerHandler handler, IPicker picker)
public static void MapFont(IPickerHandler handler, IPicker picker)
{
var fontManager = handler.GetRequiredService<IFontManager>();

handler.PlatformView?.UpdateFont(picker, fontManager);
}

public static void MapHorizontalTextAlignment(PickerHandler handler, IPicker picker)
public static void MapHorizontalTextAlignment(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateHorizontalTextAlignment(picker);
}

public static void MapTextColor(PickerHandler handler, IPicker picker)
public static void MapTextColor(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateTextColor(picker);
}

public static void MapVerticalTextAlignment(PickerHandler handler, IPicker picker)
public static void MapVerticalTextAlignment(IPickerHandler handler, IPicker picker)
{
handler.PlatformView?.UpdateVerticalTextAlignment(picker);
}
Expand Down Expand Up @@ -177,7 +177,7 @@ void OnEditing(object? sender, EventArgs eventArgs)

void OnRowsCollectionChanged(object? sender, EventArgs e)
{
Reload();
Reload(this);
}

void UpdatePickerFromPickerSource(PickerSource pickerSource)
Expand Down
18 changes: 18 additions & 0 deletions src/Core/src/Handlers/ProgressBar/IProgressBarHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#if __IOS__ || MACCATALYST
using PlatformView = UIKit.UIProgressView;
#elif MONOANDROID
using PlatformView = Android.Widget.ProgressBar;
#elif WINDOWS
using PlatformView = Microsoft.UI.Xaml.Controls.ProgressBar;
#elif NETSTANDARD || (NET6_0 && !IOS && !ANDROID)
using PlatformView = System.Object;
#endif

namespace Microsoft.Maui.Handlers
{
public partial interface IProgressBarHandler : IViewHandler
{
new IProgress VirtualView { get; }
new PlatformView PlatformView { get; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ protected override AndroidProgressBar CreatePlatformView()
};
}

public static void MapProgress(ProgressBarHandler handler, IProgress progress)
public static void MapProgress(IProgressBarHandler handler, IProgress progress)
{
handler.PlatformView?.UpdateProgress(progress);
}

public static void MapProgressColor(ProgressBarHandler handler, IProgress progress)
public static void MapProgressColor(IProgressBarHandler handler, IProgress progress)
{
handler.PlatformView?.UpdateProgressColor(progress);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public partial class ProgressBarHandler : ViewHandler<IProgress, object>
{
protected override object CreatePlatformView() => throw new NotImplementedException();

public static void MapProgress(ProgressBarHandler handler, IProgress progress) { }
public static void MapProgressColor(ProgressBarHandler handler, IProgress progress) { }
public static void MapProgress(IProgressBarHandler handler, IProgress progress) { }
public static void MapProgressColor(IProgressBarHandler handler, IProgress progress) { }
}
}
Loading

0 comments on commit 7b3c187

Please sign in to comment.