All checks were successful
CI / Build (Linux) (pull_request) Successful in 23s
Change version from 1.0.0 to 9.0.0 to align with .NET 9 / MAUI 9.0.x versioning convention. Update all package references, templates, and documentation. Change copyright holder from "MarketAlly LLC" to "MarketAlly Pte Ltd" across all files. Update CHANGELOG to document version realignment and mark 1.0.0 as deprecated. Update release notes to reflect 541 passing tests (up from 217) and include native resource leak fixes, SafeHandle wrappers, and performance benchmarks.
7.5 KiB
7.5 KiB
OpenMaui Linux - RC1 Roadmap (Completed)
Goal
Achieve Release Candidate 1 with full XAML support, data binding, and stable controls.
Status: All phases completed. Released as v1.0.0 (now v9.0.0, aligned with .NET 9/MAUI 9).
Phase 1: BindableProperty Foundation
1.1 Core Base Class
- SkiaView.cs - Inherit from BindableObject, add base BindableProperties
- IsVisible, IsEnabled, Opacity, WidthRequest, HeightRequest
- BackgroundColor, Margin, Padding
- BindingContext propagation to children
1.2 Basic Controls (Priority)
- SkiaButton.cs - Convert all properties to BindableProperty
- SkiaLabel.cs - Convert all properties to BindableProperty
- SkiaEntry.cs - Convert all properties to BindableProperty
- SkiaCheckBox.cs - Convert all properties to BindableProperty
- SkiaSwitch.cs - Convert all properties to BindableProperty
1.3 Input Controls
- SkiaSlider.cs - Convert to BindableProperty
- SkiaStepper.cs - Convert to BindableProperty
- SkiaPicker.cs - Convert to BindableProperty
- SkiaDatePicker.cs - Convert to BindableProperty
- SkiaTimePicker.cs - Convert to BindableProperty
- SkiaEditor.cs - Convert to BindableProperty
- SkiaSearchBar.cs - Convert to BindableProperty
- SkiaRadioButton.cs - Convert to BindableProperty
1.4 Display Controls
- SkiaImage.cs - Convert to BindableProperty
- SkiaImageButton.cs - Convert to BindableProperty
- SkiaProgressBar.cs - Convert to BindableProperty
- SkiaActivityIndicator.cs - Convert to BindableProperty
- SkiaBoxView.cs - Convert to BindableProperty
- SkiaBorder.cs - Convert to BindableProperty
1.5 Layout Controls
- SkiaLayoutView.cs - Convert to BindableProperty (StackLayout, Grid base)
- SkiaScrollView.cs - Convert to BindableProperty
- SkiaContentPresenter.cs - Convert to BindableProperty
1.6 Collection Controls
- SkiaCollectionView.cs - Convert to BindableProperty
- SkiaCarouselView.cs - Convert to BindableProperty
- SkiaIndicatorView.cs - Convert to BindableProperty
- SkiaRefreshView.cs - Convert to BindableProperty
- SkiaSwipeView.cs - Convert to BindableProperty
- SkiaItemsView.cs - Convert to BindableProperty
1.7 Navigation Controls
- SkiaShell.cs - Convert to BindableProperty
- SkiaNavigationPage.cs - Convert to BindableProperty
- SkiaTabbedPage.cs - Convert to BindableProperty
- SkiaFlyoutPage.cs - Convert to BindableProperty
- SkiaPage.cs - Convert to BindableProperty
1.8 Other Controls
- SkiaMenuBar.cs - Convert to BindableProperty
- SkiaAlertDialog.cs - Convert to BindableProperty
- SkiaWebView.cs - Convert to BindableProperty
- SkiaGraphicsView.cs - Convert to BindableProperty
- SkiaTemplatedView.cs - Convert to BindableProperty
Phase 2: Visual State Manager Integration
2.1 VSM Infrastructure
- Update SkiaVisualStateManager.cs for MAUI VSM compatibility
- Add IVisualElementController implementation to SkiaView
2.2 Interactive Controls VSM
- SkiaButton - Normal, PointerOver, Pressed, Disabled states
- SkiaEntry - Normal, Focused, Disabled states
- SkiaCheckBox - Normal, PointerOver, Pressed, Disabled, Checked states
- SkiaSwitch - Normal, PointerOver, Disabled, On/Off states
- SkiaSlider - Normal, PointerOver, Pressed, Disabled states
- SkiaRadioButton - Normal, PointerOver, Pressed, Disabled, Checked states
- SkiaImageButton - Normal, PointerOver, Pressed, Disabled states
Phase 3: XAML Loading & Resources
3.1 Application Bootstrap
- Verify LinuxApplicationHandler.cs handles App.xaml loading
- Ensure ResourceDictionary from App.xaml is accessible
- Test Application.Current.Resources access
3.2 Page Loading
- Verify ContentPage XAML loading works
- Test InitializeComponent() pattern
- Ensure x:Name bindings work for code-behind
3.3 Resource System
- StaticResource lookup working
- DynamicResource lookup working
- Merged ResourceDictionaries support
- Platform-specific resources (OnPlatform)
3.4 Style System
- Implicit styles (TargetType without x:Key)
- Explicit styles (x:Key)
- Style inheritance (BasedOn)
- Style Setters applying correctly
Phase 4: Data Binding
4.1 Binding Infrastructure
- BindingContext propagation through visual tree
- OneWay binding working
- TwoWay binding working
- OneTime binding working
4.2 Binding Features
- StringFormat in bindings
- Converter support (IValueConverter)
- FallbackValue support
- TargetNullValue support
- MultiBinding (if feasible)
4.3 Command Binding
- ICommand binding for Button.Command
- CommandParameter binding
- CanExecute updating IsEnabled
Phase 5: Testing & Validation
5.1 Create XAML Test App
- Create XamlDemo sample app with App.xaml
- MainPage.xaml with various controls
- Styles defined in App.xaml
- Data binding to ViewModel
- VSM states demonstrated
5.2 Regression Testing
- ShellDemo still works (C# approach)
- TodoApp still works (C# approach)
- All 35+ controls render correctly
- Navigation works
- Input handling works
5.3 Edge Cases
- HiDPI rendering
- Wayland vs X11
- Long text wrapping
- Scrolling performance
- Memory usage
Phase 6: Documentation
6.1 README Updates
- Update main README with XAML examples
- Add "Getting Started with XAML" section
- Document supported controls
- Document platform services
6.2 API Documentation
- XML doc comments on public APIs
- Generate API reference
6.3 Samples Documentation
- Document each sample app
- Add XAML sample to samples repo
Progress Tracking
| Phase | Status | Progress |
|---|---|---|
| Phase 1: BindableProperty | Complete | 35/35 |
| Phase 2: VSM | Complete | 8/8 |
| Phase 3: XAML/Resources | Complete | 12/12 |
| Phase 4: Data Binding | Complete | 11/11 |
| Phase 5: Testing | Complete | 12/12 |
| Phase 6: Documentation | Complete | 6/6 |
Total: 84/84 tasks completed
Completed Work (v1.0.0-rc.1)
Phase 1 - BindableProperty Foundation:
- SkiaView base class inherits from BindableObject
- All 35+ controls converted to BindableProperty
- SkiaLayoutView, SkiaStackLayout, SkiaGrid with BindableProperty
- SkiaCollectionView with BindableProperty (SelectionMode, SelectedItem, etc.)
- SkiaShell with BindableProperty (FlyoutIsPresented, NavBarBackgroundColor, etc.)
Phase 2 - Visual State Manager:
- SkiaVisualStateManager with CommonStates
- VSM integration in SkiaButton, SkiaEntry, SkiaCheckBox, SkiaSwitch
- VSM integration in SkiaSlider, SkiaRadioButton, SkiaEditor
- VSM integration in SkiaImageButton
Phase 3 - XAML Loading:
- Handler registration for all MAUI controls
- Type converters for SKColor, SKRect, SKSize, SKPoint
- ResourceDictionary support
- StaticResource/DynamicResource lookups
Phase 4 - Data Binding:
- BindingContext propagation through visual tree
- OneWay, TwoWay, OneTime binding modes
- IValueConverter support
- Command binding for buttons
Phase 5 - Testing:
- TodoApp validated with full XAML support
- ShellDemo validated with C# approach
- All controls render correctly
Phase 6 - Documentation:
- README updated with styling/binding examples
- RC1 roadmap documented
Version Target
Current: v1.0.0-preview.4After Phase 1-2: v1.0.0-preview.5After Phase 3-4: v1.0.0-preview.6After Phase 5-6: v1.0.0-rc.1- Released: v1.0.0