Skip to content
Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
57877ec
Extend BindableProperty source gen to handle partial property initial…
stephenquan Dec 5, 2025
a9085ef
Update CommonUsageTests.cs
TheCodeTraveler Dec 5, 2025
fba8b25
Only implement new initializer code for when initializers are present
stephenquan Dec 5, 2025
fd700dc
Revert IntegrationTests
stephenquan Dec 5, 2025
b2dc373
Revert setter accessibility changes
stephenquan Dec 5, 2025
30fabbd
Merge branch 'feature/bp-sourcegen-init' of github.com:stephenquan/Ma…
stephenquan Dec 5, 2025
6ddcd78
Corrected setter
stephenquan Dec 5, 2025
c4bda26
Refactor GetDefaultValueCreatorMethod. Update XML Doc. Apply to reado…
stephenquan Dec 5, 2025
06dd458
Include global root namespace for BindableObject
stephenquan Dec 5, 2025
825adf8
Corrected typo in GetDefautValueCreatorMethodName
stephenquan Dec 5, 2025
1727770
Revert initializer-setter changes (not needed). Refactor getter-initi…
stephenquan Dec 5, 2025
9d785b6
Remove unneeded test from BindablePropertyModelTests
stephenquan Dec 5, 2025
8c823de
Refctor EffectiveDefaultValueCreatorMethodName property (replacing Ge…
stephenquan Dec 6, 2025
ebab9e1
Update BindablePropertyName_WithInitializer_ReturnsCorrectEffectiveDe…
stephenquan Dec 6, 2025
c80418c
Corrected unit test name GenerateBindableProperty_WithInitializer_Gen…
stephenquan Dec 6, 2025
0aed7ad
Refactor InitializingPropertyName property
stephenquan Dec 6, 2025
1ba82b4
Add Edge Case Test `GenerateBindableProperty_WithBothInitializerAndDe…
TheCodeTraveler Dec 8, 2025
50b229b
Merge branch 'main' into feature/bp-sourcegen-init
TheCodeTraveler Dec 8, 2025
1ce2b6a
Merge branch 'main' into pr/2987
TheCodeTraveler Dec 8, 2025
07d0087
Use `"null"` instead of `string.IsNullOrEmpty()`
TheCodeTraveler Dec 8, 2025
45adcdf
Merge branch 'feature/bp-sourcegen-init' of https://github.com/stephe…
TheCodeTraveler Dec 8, 2025
3a642d0
Remove `DefaultValue`
TheCodeTraveler Dec 8, 2025
77b3fa5
Move out-of-scope variables to `file static class`
TheCodeTraveler Dec 8, 2025
72fd4f6
Update `BindablePropertyAttributeSourceGenerator` and Unit Tests
TheCodeTraveler Dec 8, 2025
9df56c5
Update `MaxLengthReachedBehavior`
TheCodeTraveler Dec 8, 2025
6f784a4
Update StatusBarBehavior
TheCodeTraveler Dec 8, 2025
3497247
Remove DefaultValue
TheCodeTraveler Dec 8, 2025
b84522e
Update TouchBehaviorTests.cs
TheCodeTraveler Dec 8, 2025
cfa82a2
Update TouchBehavior.shared.cs
TheCodeTraveler Dec 8, 2025
7631934
Merge branch 'main' into Remove-`BindablePropertyAttribute.DefaultValue`
TheCodeTraveler Dec 9, 2025
9bba9e7
Revert "Update TouchBehaviorTests.cs"
TheCodeTraveler Dec 9, 2025
4880b95
Update Unit Tests
TheCodeTraveler Dec 9, 2025
75cfbd6
Merge branch 'Remove-`BindablePropertyAttribute.DefaultValue`' of htt…
TheCodeTraveler Dec 9, 2025
e3a8c6f
Merge branch 'main' into Remove-`BindablePropertyAttribute.DefaultValue`
TheCodeTraveler Dec 11, 2025
8f4f5e5
Update TouchBehavior
TheCodeTraveler Dec 11, 2025
5c98f8f
Implement Default Values in `GestureManager`
TheCodeTraveler Dec 11, 2025
e4ddbff
Update GestureManager.shared.cs
TheCodeTraveler Dec 11, 2025
dfc0df0
Merge branch 'main' into Remove-`BindablePropertyAttribute.DefaultValue`
TheCodeTraveler Dec 11, 2025
bb3364e
Update ImageTouchBehavior Logic
TheCodeTraveler Dec 11, 2025
014f2f7
Merge branch 'Remove-`BindablePropertyAttribute.DefaultValue`' of htt…
TheCodeTraveler Dec 11, 2025
d592e7d
Update ImageTouchBehavior
TheCodeTraveler Dec 12, 2025
03595a1
Update BackgroundColor Properties
TheCodeTraveler Dec 12, 2025
7cfad7a
Update TouchBehaviorTests.cs
TheCodeTraveler Dec 12, 2025
7a2a63e
Use `TryGetBindableImageTouchBehaviorElement` to prevent runtime crash
TheCodeTraveler Dec 12, 2025
f4afb43
`dotnet format`
TheCodeTraveler Dec 12, 2025
f829660
Fix failing unit tests
TheCodeTraveler Dec 12, 2025
c129384
Avoid using same URL
TheCodeTraveler Dec 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ async void HandleSelfClosingPopupButtonClicked(object? sender, EventArgs e)

await this.ClosePopupAsync();
}

async void HandleCollectionViewPopupClicked(object? sender, EventArgs e)
{
var popupResult = await popupService.ShowPopupAsync<CollectionViewPopup, string>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ async Task OnReturnButtonTapped(CancellationToken token)
{
await popupService.ClosePopupAsync<string>(navigation, SelectedTitle ?? string.Empty, token);
}

[ObservableProperty, NotifyCanExecuteChangedFor(nameof(ReturnButtonTappedCommand))]
public partial string? SelectedTitle { get; set; }
}
28 changes: 12 additions & 16 deletions src/CommunityToolkit.Maui.Camera/Views/CameraView.shared.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ public event EventHandler<MediaCapturedEventArgs> MediaCaptured
static ICameraProvider CameraProvider => IPlatformApplication.Current?.Services.GetRequiredService<ICameraProvider>() ?? throw new CameraException("Unable to retrieve CameraProvider");

/// <inheritdoc cref="ICameraView.IsAvailable"/>
[BindableProperty(DefaultValue = CameraViewDefaults.IsAvailable)]
public partial bool IsAvailable { get; }
[BindableProperty]
public partial bool IsAvailable { get; } = CameraViewDefaults.IsAvailable;

/// <inheritdoc cref="ICameraView.IsBusy"/>
[BindableProperty(DefaultValue = CameraViewDefaults.IsCameraBusy)]
public partial bool IsBusy { get; }
[BindableProperty]
public partial bool IsBusy { get; } = CameraViewDefaults.IsCameraBusy;

/// <summary>
/// Gets the <see cref="Command{CancellationToken}"/> that triggers an image capture.
Expand Down Expand Up @@ -92,24 +92,24 @@ public event EventHandler<MediaCapturedEventArgs> MediaCaptured
public partial Command<CancellationToken> StopVideoRecordingCommand { get; }

/// <inheritdoc cref="ICameraView.CameraFlashMode"/>
[BindableProperty(DefaultValueCreatorMethodName = nameof(CreateCameraFlashMode))]
public partial CameraFlashMode CameraFlashMode { get; set; }
[BindableProperty]
public partial CameraFlashMode CameraFlashMode { get; set; } = CameraViewDefaults.CameraFlashMode;

/// <inheritdoc cref="ICameraView.SelectedCamera"/>
[BindableProperty(DefaultBindingMode = BindingMode.TwoWay)]
public partial CameraInfo? SelectedCamera { get; set; }

/// <inheritdoc cref="ICameraView.ZoomFactor"/>
[BindableProperty(DefaultValue = CameraViewDefaults.ZoomFactor, DefaultBindingMode = BindingMode.TwoWay, CoerceValueMethodName = nameof(CoerceZoom))]
public partial float ZoomFactor { get; set; }
[BindableProperty(DefaultBindingMode = BindingMode.TwoWay, CoerceValueMethodName = nameof(CoerceZoom))]
public partial float ZoomFactor { get; set; } = CameraViewDefaults.ZoomFactor;

/// <inheritdoc cref="ICameraView.ImageCaptureResolution"/>
[BindableProperty(DefaultValueCreatorMethodName = nameof(CreateImageCaptureResolution), DefaultBindingMode = BindingMode.TwoWay)]
public partial Size ImageCaptureResolution { get; set; }
[BindableProperty(DefaultBindingMode = BindingMode.TwoWay)]
public partial Size ImageCaptureResolution { get; set; } = CameraViewDefaults.ImageCaptureResolution;

/// <inheritdoc cref="ICameraView.IsTorchOn"/>
[BindableProperty(DefaultValue = CameraViewDefaults.IsTorchOn)]
public partial bool IsTorchOn { get; set; }
[BindableProperty]
public partial bool IsTorchOn { get; set; } = CameraViewDefaults.IsTorchOn;

new CameraViewHandler Handler => (CameraViewHandler)(base.Handler ?? throw new InvalidOperationException("Unable to retrieve Handler"));

Expand Down Expand Up @@ -230,10 +230,6 @@ protected virtual void Dispose(bool disposing)
}
}

static object CreateImageCaptureResolution(BindableObject bindable) => CameraViewDefaults.ImageCaptureResolution;

static object CreateCameraFlashMode(BindableObject bindable) => CameraViewDefaults.CameraFlashMode;

static Command<CancellationToken> CreateCaptureImageCommand(BindableObject bindable)
{
var cameraView = (CameraView)bindable;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using System.Windows.Input;

namespace CommunityToolkit.Maui.Core;

static class MaxLengthReachedBehaviorDefaults
{
public const bool ShouldDismissKeyboardAutomatically = false;
public static ICommand? Command { get; } = null;
}
Original file line number Diff line number Diff line change
Expand Up @@ -190,15 +190,15 @@ static class TouchBehaviorDefaults
/// <summary>
/// Default Value for TouchBehavior <see cref="DefaultBackgroundColor"/>
/// </summary>
public const Color? DefaultBackgroundColor = null;
public static Color DefaultBackgroundColor { get; } = Colors.Transparent;

/// <summary>
/// Default Value for TouchBehavior <see cref="HoveredBackgroundColor"/>
/// </summary>
public const Color? HoveredBackgroundColor = null;
public static Color HoveredBackgroundColor { get; } = Colors.Transparent;

/// <summary>
/// Default Value for TouchBehavior <see cref="PressedBackgroundColor"/>
/// </summary>
public const Color? PressedBackgroundColor = null;
public static Color PressedBackgroundColor { get; } = Colors.Transparent;
}
64 changes: 32 additions & 32 deletions src/CommunityToolkit.Maui.MediaElement/MediaElement.shared.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,26 +102,26 @@ internal event EventHandler StopRequested
/// <summary>
/// Gets the <see cref="MediaHeight"/> in pixels.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.MediaHeight)]
public partial int MediaHeight { get; }
[BindableProperty]
public partial int MediaHeight { get; } = MediaElementDefaults.MediaHeight;

/// <summary>
/// Gets the <see cref="MediaWidth"/> in pixels.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.MediaWidth)]
public partial int MediaWidth { get; }
[BindableProperty]
public partial int MediaWidth { get; } = MediaElementDefaults.MediaWidth;

/// <summary>
/// Gets the current <see cref="Position"/> of the media playback.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.Position)]
public partial TimeSpan Position { get; }
[BindableProperty]
public partial TimeSpan Position { get; } = MediaElementDefaults.Position;

/// <summary>
/// Gets the <see cref="Duration"/> of the media.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.Duration)]
public partial TimeSpan Duration { get; }
[BindableProperty]
public partial TimeSpan Duration { get; } = MediaElementDefaults.Duration;

/// <summary>
/// Gets or sets the <see cref="AndroidViewType"/> of the media.
Expand All @@ -131,38 +131,38 @@ internal event EventHandler StopRequested
/// <summary>
/// Gets or sets the <see cref="Aspect"/> ratio used to display the video content.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.Aspect)]
public partial Aspect Aspect { get; set; }
[BindableProperty]
public partial Aspect Aspect { get; set; } = MediaElementDefaults.Aspect;

/// <summary>
/// Gets or sets the <see cref="ShouldAutoPlay"/> indicating whether the media should play automatically.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.ShouldAutoPlay)]
public partial bool ShouldAutoPlay { get; set; }
[BindableProperty]
public partial bool ShouldAutoPlay { get; set; } = MediaElementDefaults.ShouldAutoPlay;

/// <summary>
/// Gets or sets the <see cref="ShouldLoopPlayback"/> indicating whether the media should loop playback.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.ShouldLoopPlayback)]
public partial bool ShouldLoopPlayback { get; set; }
[BindableProperty]
public partial bool ShouldLoopPlayback { get; set; } = MediaElementDefaults.ShouldLoopPlayback;

/// <summary>
/// Gets or sets the <see cref="ShouldKeepScreenOn"/> indicating whether the screen should be kept on during media playback.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.ShouldKeepScreenOn)]
public partial bool ShouldKeepScreenOn { get; set; }
[BindableProperty]
public partial bool ShouldKeepScreenOn { get; set; } = MediaElementDefaults.ShouldKeepScreenOn;

/// <summary>
/// Gets or sets the <see cref="ShouldMute"/> indicating whether the media should be muted.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.ShouldMute)]
public partial bool ShouldMute { get; set; }
[BindableProperty]
public partial bool ShouldMute { get; set; } = MediaElementDefaults.ShouldMute;

/// <summary>
/// Gets or sets the <see cref="ShouldShowPlaybackControls"/> indicating whether playback controls should be shown.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.ShouldShowPlaybackControls)]
public partial bool ShouldShowPlaybackControls { get; set; }
[BindableProperty]
public partial bool ShouldShowPlaybackControls { get; set; } = MediaElementDefaults.ShouldShowPlaybackControls;

/// <summary>
/// Gets or sets the <see cref="Source"/> of the media.
Expand All @@ -174,38 +174,38 @@ internal event EventHandler StopRequested
/// <summary>
/// Gets or sets the <see cref="Speed"/> of the media playback.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.Speed)]
public partial double Speed { get; set; }
[BindableProperty]
public partial double Speed { get; set; } = MediaElementDefaults.Speed;

/// <summary>
/// Gets or sets the <see cref="MetadataTitle"/> of the media.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.MetadataTitle)]
public partial string MetadataTitle { get; set; }
[BindableProperty]
public partial string MetadataTitle { get; set; } = MediaElementDefaults.MetadataTitle;

/// <summary>
/// Gets or sets the <see cref="MetadataArtist"/> of the media.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.MetadataArtist)]
public partial string MetadataArtist { get; set; }
[BindableProperty]
public partial string MetadataArtist { get; set; } = MediaElementDefaults.MetadataArtist;

/// <summary>
/// Gets or sets the <see cref="MetadataArtworkUrl"/> of the media.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.MetadataArtworkUrl)]
public partial string MetadataArtworkUrl { get; set; }
[BindableProperty]
public partial string MetadataArtworkUrl { get; set; } = MediaElementDefaults.MetadataArtworkUrl;

/// <summary>
/// Gets or sets the <see cref="Volume"/> of the media.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.Volume, DefaultBindingMode = BindingMode.TwoWay, PropertyChangingMethodName = nameof(OnVolumeChanging))]
public partial double Volume { get; set; }
[BindableProperty(DefaultBindingMode = BindingMode.TwoWay, PropertyChangingMethodName = nameof(OnVolumeChanging))]
public partial double Volume { get; set; } = MediaElementDefaults.Volume;

/// <summary>
/// Gets or sets the <see cref="CurrentState"/> of the media.
/// </summary>
[BindableProperty(DefaultValue = MediaElementDefaults.CurrentState, PropertyChangedMethodName = nameof(OnCurrentStatePropertyChanged))]
public partial MediaElementState CurrentState { get; private set; }
[BindableProperty(PropertyChangedMethodName = nameof(OnCurrentStatePropertyChanged))]
public partial MediaElementState CurrentState { get; private set; } = MediaElementDefaults.CurrentState;

/// <inheritdoc/>
TaskCompletionSource IAsynchronousMediaElementHandler.SeekCompletedTCS => seekCompletedTaskCompletionSource;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ static class MediaElementDefaults

public const int MediaWidth = 0;

public const string Position = "00:00:00";

public const string Duration = "00:00:00";

public const bool ShouldAutoPlay = false;

public const bool ShouldLoopPlayback = false;
Expand All @@ -33,4 +29,8 @@ static class MediaElementDefaults
public const string MetadataArtworkUrl = "";

public const MediaElementState CurrentState = MediaElementState.None;

public static TimeSpan Position { get; } = TimeSpan.Zero;

public static TimeSpan Duration { get; } = TimeSpan.Zero;
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ sealed partial class BindablePropertyAttribute : global::System.Attribute
{
public string? PropertyName { get; }
public global::System.Type? DeclaringType { get; set; }
public object? DefaultValue { get; set; }
public global::Microsoft.Maui.Controls.BindingMode DefaultBindingMode { get; set; }
public string ValidateValueMethodName { get; set; } = string.Empty;
public string PropertyChangedMethodName { get; set; } = string.Empty;
Expand Down
Loading
Loading