fix: enable nullable reference types across FreakyControls - #194
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe project enables nullable reference types, trim analysis, and trimmability. Shared controls, platform handlers, signature views, samples, tests, and documentation now handle nullable values and unavailable resources. ChangesNullable safety migration
Estimated code review effort: 3 (Moderate) | ~30 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/InkPresenter.cs (1)
38-81: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winDo not retain a stroke when no touch is available.
Line 40 creates
currentPathbefore Line 43 rejects a missing touch. Line 81 also returns without clearing an existing stroke. A later movement can then append to an uninitialized path or retain stale stroke state.Proposed fix
public override void TouchesBegan(NSSet touches, UIEvent? evt) { - currentPath = new InkStroke(UIBezierPath.Create(), new List<CGPoint>(), StrokeColor, StrokeWidth); - var touch = touches.AnyObject as UITouch; - if (touch is null) return; + if (touch is null) + return; + + currentPath = new InkStroke(UIBezierPath.Create(), new List<CGPoint>(), StrokeColor, StrokeWidth); var touchLocation = touch.LocationInView(this);public override void TouchesEnded(NSSet touches, UIEvent? evt) { var touch = touches.AnyObject as UITouch; - if (touch is null) return; + if (touch is null) + { + currentPath = null; + return; + }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/InkPresenter.cs` around lines 38 - 81, Update TouchesBegan and TouchesEnded so a missing UITouch does not create or retain currentPath: validate touches.AnyObject before initializing the stroke in TouchesBegan, and clear any existing stroke state before returning from TouchesEnded when no touch is available. Ensure subsequent TouchesMoved calls cannot append to an uninitialized or stale stroke.MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyEditText.cs (1)
27-46: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winClear cached drawables when the native drawable is cleared.
When a caller changes alignment, it passes
nullfor the previous side. This method keeps the previous drawable indrawableLeft,drawableRight,drawableTop, ordrawableBottom.OnTouchEventcan then invokeclickListenerfor an image that is no longer displayed.Proposed fix
public override void SetCompoundDrawablesWithIntrinsicBounds(Drawable? left, Drawable? top, Drawable? right, Drawable? bottom) { - if (left is not null) - { - drawableLeft = left; - } - if (right is not null) - { - drawableRight = right; - } - if (top is not null) - { - drawableTop = top; - } - if (bottom is not null) - { - drawableBottom = bottom; - } + drawableLeft = left; + drawableTop = top; + drawableRight = right; + drawableBottom = bottom; base.SetCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyEditText.cs` around lines 27 - 46, Update SetCompoundDrawablesWithIntrinsicBounds so each cached drawable field is assigned the incoming value, including null, rather than only updating non-null values. Preserve the base method call and ensure drawableLeft, drawableRight, drawableTop, and drawableBottom accurately reflect which native drawables are currently displayed for OnTouchEvent.MAUI.FreakyControls/MAUI.FreakyControls/FreakyScratchView/FreakyScratchViewDrawable.cs (1)
257-268: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winDispose decoded bitmaps that are not adopted.
When cancellation is requested or
_maskBitmapor_maskCanvasis unavailable, disposebitmapbefore returning.ResetMask,ResetFrontBitmap, andResetcan invalidate these resources whileLoadFrontImageAsyncawaits.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@MAUI.FreakyControls/MAUI.FreakyControls/FreakyScratchView/FreakyScratchViewDrawable.cs` around lines 257 - 268, Update LoadFrontImageAsync to dispose the decoded bitmap whenever cancellation is detected or _maskBitmap or _maskCanvas is unavailable, since it is not adopted in those paths. Preserve ownership by retaining the bitmap only when assigning it to _frontBitmap, including cleanup for resources invalidated while the await is in progress.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/FreakySignatureCanvasView.md`:
- Line 63: Update the Events table in FreakySignatureCanvasView documentation to
remove ImageStreamRequested from the consumer-facing event list, or explicitly
label it as internal if it must remain. Keep the surrounding public API event
documentation unchanged and consistent with the statement that
ImageStreamRequested is internal handler plumbing.
In
`@MAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/ContentToInvisibilityConverterTests.cs`:
- Line 14: Update the converter test assertions to require exact Boolean
results: in
MAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/ContentToInvisibilityConverterTests.cs:14,
LeftImageAlignmentToVisibilityConverterTests.cs:23 and :33, and
RightImageAlignmentToVisibilityConverterTests.cs:23 and :33, assert the result
is false; in InverseBoolConverterTests.cs:16, assert the result is a Boolean
equal to expected.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/FreakyAutoCompleteView/FreakyAutoCompleteViewHandler.cs`:
- Around line 55-58: Update the FreakyAutoCompleteViewHandler constructor
parameters to mark both mapper and commandMapper as nullable, matching their
null-coalescing fallbacks in the base constructor call. Correct the mapper
parameter documentation to state that null selects PropertyMapper.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/FreakyCodeView.xaml.cs`:
- Around line 170-171: The nullable bindable-value handling is inconsistent with
the public property contracts. In
MAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/FreakyCodeView.xaml.cs
lines 170-171, normalize CodeValue to string.Empty before exposing or storing
it, or propagate string? through the property and all consumers. In
MAUI.FreakyControls/MAUI.FreakyControls/FreakyJumpList/FreakyJumpList.cs lines
182-184, declare AlphabetProvider as IAlphabetProvider? and validate a local
provider before using it.
In `@MAUI.FreakyControls/MAUI.FreakyControls/FreakyJumpList/FreakyJumpList.cs`:
- Line 10: Update OnTouch() to return immediately when charLocationDictionary is
empty, before calling GetClosestPoint() or updating SelectedCharacter. Preserve
the existing touch-selection behavior once the character map contains entries.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/FreakySvgImageView/FreakySvgImageView.cs`:
- Around line 18-24: Update the Canvas-clearing logic in FreakySvgImageView to
store surface.Canvas in a local variable, return immediately when that local is
null, and call Clear() only on the validated non-null canvas.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/CircularImageView.cs`:
- Around line 38-40: Update the drawable handling in the circular image view to
verify that drawable is a BitmapDrawable before casting or accessing Bitmap,
returning immediately for other drawable types while preserving the existing
null-bitmap guard.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiDatePicker.cs`:
- Around line 34-35: Update SetCompoundDrawablesWithIntrinsicBounds in
MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiDatePicker.cs:34-35,
FreakyMauiPicker.cs:24-25, FreakyMauiTimePicker.cs:33-34, and
FreakyNativeAutoCompleteView.cs:139-140 so every cached drawable field is
assigned from its corresponding parameter, including null, while preserving the
base-control call.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiPicker.cs`:
- Around line 68-73: Update the extraTapArea calculation in FreakyMauiPicker’s
drawableLeft handling so density conversion rounds the full 13dp value, matching
FreakyMauiDatePicker and FreakyMauiTimePicker, rather than adding 0.5 before
multiplying by 13.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakyAutoCompleteViewHandler.cs`:
- Around line 151-156: Update MapTextAlignment and MapFont to verify
handler.PlatformView is available before passing it to UpdateTextAlignment or
UpdateFont; return without updating when it is unavailable, while preserving the
existing update behavior when the platform view exists.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/FreakyNativeAutoCompleteView.cs`:
- Line 211: Update the code around the view-controller setup and SelectionList
attachment to return immediately when viewController.View is unavailable, before
activating any constraints. Only continue adding the subview and configuring
constraints when the controller view exists, ensuring SelectionList and
InputTextField share a common ancestor.
---
Outside diff comments:
In
`@MAUI.FreakyControls/MAUI.FreakyControls/FreakyScratchView/FreakyScratchViewDrawable.cs`:
- Around line 257-268: Update LoadFrontImageAsync to dispose the decoded bitmap
whenever cancellation is detected or _maskBitmap or _maskCanvas is unavailable,
since it is not adopted in those paths. Preserve ownership by retaining the
bitmap only when assigning it to _frontBitmap, including cleanup for resources
invalidated while the await is in progress.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyEditText.cs`:
- Around line 27-46: Update SetCompoundDrawablesWithIntrinsicBounds so each
cached drawable field is assigned the incoming value, including null, rather
than only updating non-null values. Preserve the base method call and ensure
drawableLeft, drawableRight, drawableTop, and drawableBottom accurately reflect
which native drawables are currently displayed for OnTouchEvent.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/InkPresenter.cs`:
- Around line 38-81: Update TouchesBegan and TouchesEnded so a missing UITouch
does not create or retain currentPath: validate touches.AnyObject before
initializing the stroke in TouchesBegan, and clear any existing stroke state
before returning from TouchesEnded when no touch is available. Ensure subsequent
TouchesMoved calls cannot append to an uninitialized or stale stroke.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 5746d07f-a7d6-4214-b3fe-bdaf06e2a7e9
📒 Files selected for processing (83)
.gitignoreMAUI.FreakyControls/MAUI.FreakyControls/Behaviors/BehaviorBase.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/BaseOneWayValueConverter.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/ContentToInvisibilityConverter.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/InverseBoolConverter.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/LeftImageAlignmentToVisibilityConverter.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/RightImageAlignmentToVisibilityConverter.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyAutoCompleteViewQuerySubmittedEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyAutoCompleteViewSuggestionChosenEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyCharacterChangedEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyCodeCompletedEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyRadioButtonEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakySelectedPinEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/ImageStreamRequestedEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/Extensions/Extensions.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyAutoCompleteView/FreakyAutoCompleteView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyAutoCompleteView/FreakyAutoCompleteViewHandler.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyAutoCompleteView/IFreakyAutoCompleteView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyButton/FreakyButton.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCheckbox/FreakyCheckbox.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyChip/FreakyChip.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyChip/FreakyChipGroup.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/CodeView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/FreakyCodeView.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/FreakyPinCodeControl.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyImage/FreakyImage.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyJumpList/FreakyJumpList.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyRadioButton/FreakyRadioButton.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyRadioButton/FreakyRadioGroup.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyScratchView/FreakyScratchView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyScratchView/FreakyScratchViewDrawable.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySignatureView/FreakySignatureCanvasView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySignatureView/FreakySignatureCanvasViewHandler.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySignatureView/FreakySignaturePadView.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySvgImageView/FreakySvgImageView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySwipeButton/FreakySwipeButton.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySwitch/FreakySwitch.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyTextInputLayout/FreakyTextInputLayout.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyZoomableImageView/FreakyZoomableView.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/Helpers/DownloadHelper.csMAUI.FreakyControls/MAUI.FreakyControls/Maui.FreakyControls.csprojMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyAutoCompleteViewHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyDatePickerHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyEntryHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyMauiAppCompatActivity.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyPickerHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakySignatureCanvasViewHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyTimePickerHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/CircularImageView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyEditText.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiDatePicker.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiPicker.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiTimePicker.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyNativeAutoCompleteView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Helpers/CustomInsertionActionModeCallback.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Helpers/CustomSelectionActionModeCallback.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Signature/InkPresenter.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Signature/PathSmoothing.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Signature/SignaturePadCanvasView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeExtensions.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakyAutoCompleteViewHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakyEditorHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakyEntryHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakySignatureCanvasViewHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/FreakyNativeAutoCompleteView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/FreakyUITextView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/FreakyUITextfield.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/InkPresenter.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/InkStroke.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/PathSmoothing.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/SignaturePadCanvasView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Windows/FreakyCircularImageHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Windows/FreakySignatureViewHandler.win.csMAUI.FreakyControls/MAUI.FreakyControls/Wrappers/StreamWrapper.csMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/ContentToInvisibilityConverterTests.csMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/InverseBoolConverterTests.csMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/LeftImageAlignmentToVisibilityConverterTests.csMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/RightImageAlignmentToVisibilityConverterTests.csMAUI.FreakyControls/Samples/Samples.csprojMAUI.FreakyControls/Samples/SignatureView/ImageDisplay.csMAUI.FreakyControls/Samples/SignatureView/SignatureViewModel.csdocs/FreakySignatureCanvasView.mdfuture-plans.md
|
@coderabbitai full review |
|
|
@coderabbitai full review |
✅ Action performedFull review finished. |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@MAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/RightImageAlignmentToVisibilityConverterTests.cs`:
- Line 23: Update the assertions in
RightImageAlignmentToVisibilityConverterTests at both affected test cases to
first enforce that the converter result is a bool, then assert that Boolean
value is false. Replace the result-is-true checks while preserving the existing
test scenarios.
In `@MAUI.FreakyControls/MAUI.FreakyControls/Extensions/Extensions.cs`:
- Around line 72-75: Update the provider lookup in the image-source extension to
use GetService<IImageSourceServiceProvider>() instead of GetRequiredService, so
an unregistered optional provider yields null and reaches the existing null
return. Leave the subsequent GetImageSourceService and null handling unchanged.
In
`@MAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/FreakyCodeView.xaml.cs`:
- Line 184: Update the delayed code-item flow around UpdateCodeItems so
overlapping CodeValue changes are serialized or invalidated with a
version/cancellation token. Check the token after every delay and before each
CodeView update, ensuring stale animations cannot restore characters after a
newer value arrives.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 796a2132-7729-4f34-aace-76bee199cdf5
📒 Files selected for processing (85)
.gitignoreMAUI.FreakyControls/MAUI.FreakyControls/Behaviors/BehaviorBase.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/BaseOneWayValueConverter.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/ContentToInvisibilityConverter.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/InverseBoolConverter.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/LeftImageAlignmentToVisibilityConverter.csMAUI.FreakyControls/MAUI.FreakyControls/Converters/RightImageAlignmentToVisibilityConverter.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyAutoCompleteViewQuerySubmittedEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyAutoCompleteViewSuggestionChosenEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyCharacterChangedEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyCodeCompletedEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakyRadioButtonEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/FreakySelectedPinEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/EventArgs/ImageStreamRequestedEventArgs.csMAUI.FreakyControls/MAUI.FreakyControls/Extensions/Extensions.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyAutoCompleteView/FreakyAutoCompleteView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyAutoCompleteView/FreakyAutoCompleteViewHandler.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyAutoCompleteView/IFreakyAutoCompleteView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyButton/FreakyButton.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCheckbox/FreakyCheckbox.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyChip/FreakyChip.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyChip/FreakyChipGroup.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/CodeView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/FreakyCodeView.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/FreakyPinCodeControl.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyImage/FreakyImage.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyJumpList/FreakyJumpList.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyRadioButton/FreakyRadioButton.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyRadioButton/FreakyRadioGroup.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyScratchView/FreakyScratchView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyScratchView/FreakyScratchViewDrawable.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySignatureView/FreakySignatureCanvasView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySignatureView/FreakySignatureCanvasViewHandler.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySignatureView/FreakySignaturePadView.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySvgImageView/FreakySvgImageView.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySwipeButton/FreakySwipeButton.csMAUI.FreakyControls/MAUI.FreakyControls/FreakySwitch/FreakySwitch.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyTextInputLayout/FreakyTextInputLayout.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyZoomableImageView/FreakyZoomableView.xaml.csMAUI.FreakyControls/MAUI.FreakyControls/Helpers/DownloadHelper.csMAUI.FreakyControls/MAUI.FreakyControls/Maui.FreakyControls.csprojMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyAutoCompleteViewHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyDatePickerHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyEntryHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyMauiAppCompatActivity.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyPickerHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakySignatureCanvasViewHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/FreakyTimePickerHandler.android.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/CircularImageView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyEditText.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiDatePicker.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiPicker.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyMauiTimePicker.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/FreakyNativeAutoCompleteView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Helpers/CustomInsertionActionModeCallback.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Helpers/CustomSelectionActionModeCallback.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Signature/InkPresenter.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Signature/PathSmoothing.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeControls/Signature/SignaturePadCanvasView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Android/NativeExtensions.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakyAutoCompleteViewHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakyEditorHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakyEntryHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/FreakySignatureCanvasViewHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/FreakyNativeAutoCompleteView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/FreakyUITextView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/FreakyUITextfield.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/InkPresenter.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/InkStroke.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/PathSmoothing.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Apple/NativeControls/Signature/SignaturePadCanvasView.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Windows/FreakyCircularImageHandler.csMAUI.FreakyControls/MAUI.FreakyControls/Platforms/Windows/FreakySignatureViewHandler.win.csMAUI.FreakyControls/MAUI.FreakyControls/Wrappers/StreamWrapper.csMAUI.FreakyControls/MAUI.FreakyControls/readme.mdMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/ContentToInvisibilityConverterTests.csMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/InverseBoolConverterTests.csMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/LeftImageAlignmentToVisibilityConverterTests.csMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/RightImageAlignmentToVisibilityConverterTests.csMAUI.FreakyControls/Samples/Samples.csprojMAUI.FreakyControls/Samples/SignatureView/ImageDisplay.csMAUI.FreakyControls/Samples/SignatureView/SignatureViewModel.csdocs/FreakyAutoCompleteView.mddocs/FreakySignatureCanvasView.mdfuture-plans.md
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@MAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/RightImageAlignmentToVisibilityConverterTests.cs`:
- Around line 23-24: Update the assertions in
RightImageAlignmentToVisibilityConverterTests to use the boolean returned by
Assert.IsType<bool>(result) directly, replacing the separate type assertion and
cast with Assert.False(Assert.IsType<bool>(result)) to avoid the nullable cast
warning.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 682c9906-47e1-4d98-a6ee-176bf82b0240
📒 Files selected for processing (3)
MAUI.FreakyControls/MAUI.FreakyControls/Extensions/Extensions.csMAUI.FreakyControls/MAUI.FreakyControls/FreakyCodeView/FreakyCodeView.xaml.csMAUI.FreakyControls/Maui.FreakyControls.Tests/Converters/RightImageAlignmentToVisibilityConverterTests.cs
🚧 Files skipped from review as they are similar to previous changes (1)
- MAUI.FreakyControls/MAUI.FreakyControls/Extensions/Extensions.cs
Summary by CodeRabbit
Bug Fixes
Documentation
Chores