Skip to content

Commit 4db4481

Browse files
committed
Securing against memory leaks
1 parent e2fcb67 commit 4db4481

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

src/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ namespace Microsoft.Maui.Handlers
88
public partial class DatePickerHandler : ViewHandler<IDatePicker, MauiDatePicker>
99
{
1010
DatePickerDialog? _dialog;
11+
EventHandler? _setDateLater;
12+
EventHandler? _dismiss;
1113

1214
protected override MauiDatePicker CreatePlatformView()
1315
{
@@ -52,6 +54,8 @@ protected override void DisconnectHandler(MauiDatePicker platformView)
5254
{
5355
if (_dialog != null)
5456
{
57+
_dialog.DismissEvent -= _dismiss;
58+
_dialog.ShowEvent -= _setDateLater;
5559
_dialog.Hide();
5660
_dialog.Dispose();
5761
_dialog = null;
@@ -144,19 +148,17 @@ void ShowPickerDialog(int year, int month, int day)
144148
_dialog = CreateDatePickerDialog(year, month, day);
145149
else
146150
{
147-
EventHandler? setDateLater = null;
148-
EventHandler? dismiss = null;
149-
setDateLater = (sender, e) => { _dialog!.UpdateDate(year, month, day); _dialog.ShowEvent -= setDateLater; };
150-
_dialog.ShowEvent += setDateLater;
151-
dismiss = (sender, e) =>
151+
_setDateLater = (sender, e) => { _dialog!.UpdateDate(year, month, day); _dialog.ShowEvent -= _setDateLater; };
152+
_dialog.ShowEvent += _setDateLater;
153+
_dismiss = (sender, e) =>
152154
{
153155
if (VirtualView != null)
154156
{
155157
VirtualView.IsFocused = false;
156158
}
157-
_dialog.DismissEvent -= dismiss;
159+
_dialog.DismissEvent -= _dismiss;
158160
};
159-
_dialog.DismissEvent += dismiss;
161+
_dialog.DismissEvent += _dismiss;
160162
}
161163

162164
_dialog.Show();

src/Core/src/Handlers/TimePicker/TimePickerHandler.Android.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public partial class TimePickerHandler : ViewHandler<ITimePicker, MauiTimePicker
1010
{
1111
MauiTimePicker? _timePicker;
1212
TimePickerDialog? _dialog;
13+
EventHandler? dismiss;
1314

1415
protected override MauiTimePicker CreatePlatformView()
1516
{
@@ -27,13 +28,13 @@ protected override void DisconnectHandler(MauiTimePicker platformView)
2728
if (_dialog != null)
2829
{
2930
_dialog.Hide();
31+
_dialog.DismissEvent -= dismiss;
3032
_dialog = null;
3133
}
3234
}
3335

3436
protected virtual TimePickerDialog CreateTimePickerDialog(int hour, int minute)
3537
{
36-
EventHandler? dismiss = null;
3738
void onTimeSetCallback(object? obj, TimePickerDialog.TimeSetEventArgs args)
3839
{
3940
if (VirtualView == null || PlatformView == null)

0 commit comments

Comments
 (0)