Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 2289789

Browse files
kvptKevin Petit
andauthored
[Android] Remove missings listeners on dispose (#13569)
Co-authored-by: Kevin Petit <[email protected]>
1 parent cbd89a3 commit 2289789

File tree

8 files changed

+71
-10
lines changed

8 files changed

+71
-10
lines changed

Xamarin.Forms.Platform.Android/Renderers/ButtonRenderer.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ protected override void Dispose(bool disposing)
9090

9191
if (disposing)
9292
{
93+
if (Control.IsAlive())
94+
{
95+
Control.SetOnClickListener(null);
96+
Control.SetOnTouchListener(null);
97+
Control.RemoveOnAttachStateChangeListener(this);
98+
}
99+
93100
_backgroundTracker?.Dispose();
94101
_backgroundTracker = null;
95102
_visualElementRenderer = null;

Xamarin.Forms.Platform.Android/Renderers/CarouselPageRenderer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ protected override void Dispose(bool disposing)
3131
{
3232
_previousPage = null;
3333

34-
if (_viewPager.Adapter != null)
35-
_viewPager.Adapter.Dispose();
34+
_viewPager.Adapter?.Dispose();
35+
_viewPager.ClearOnPageChangeListeners();
3636
_viewPager.Dispose();
3737
_viewPager = null;
3838
}

Xamarin.Forms.Platform.Android/Renderers/EditorRenderer.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,14 @@ protected override void Dispose(bool disposing)
196196

197197
if (disposing)
198198
{
199-
if (EditText != null && EditText is IFormsEditText formsEditText)
199+
if (EditText != null)
200200
{
201-
formsEditText.OnKeyboardBackPressed -= OnKeyboardBackPressed;
201+
EditText.RemoveTextChangedListener(this);
202+
203+
if (EditText is IFormsEditText formsEditText)
204+
{
205+
formsEditText.OnKeyboardBackPressed -= OnKeyboardBackPressed;
206+
}
202207
}
203208
}
204209

Xamarin.Forms.Platform.Android/Renderers/EntryRenderer.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,12 +205,20 @@ protected override void Dispose(bool disposing)
205205

206206
if (disposing)
207207
{
208-
if (EditText != null && EditText is IFormsEditText formsEditContext)
208+
if (EditText != null)
209209
{
210-
formsEditContext.OnKeyboardBackPressed -= OnKeyboardBackPressed;
211-
formsEditContext.SelectionChanged -= SelectionChanged;
212-
ListenForCloseBtnTouch(false);
210+
EditText.RemoveTextChangedListener(this);
211+
EditText.SetOnEditorActionListener(null);
212+
213+
if (EditText is IFormsEditText formsEditContext)
214+
{
215+
formsEditContext.OnKeyboardBackPressed -= OnKeyboardBackPressed;
216+
formsEditContext.SelectionChanged -= SelectionChanged;
217+
218+
ListenForCloseBtnTouch(false);
219+
}
213220
}
221+
214222
_clearBtn = null;
215223
}
216224

Xamarin.Forms.Platform.Android/Renderers/MasterDetailRenderer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ protected override void Dispose(bool disposing)
229229
_masterLayout = null;
230230
}
231231

232+
RemoveDrawerListener(this);
233+
232234
Device.Info.PropertyChanged -= DeviceInfoPropertyChanged;
233235

234236
if (_page != null)

Xamarin.Forms.Platform.Android/Renderers/RefreshViewRenderer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,9 @@ protected override void Dispose(bool disposing)
237237
Element.PropertyChanged -= HandlePropertyChanged;
238238
}
239239

240-
if (_renderer != null)
241-
_renderer.View.RemoveFromParent();
240+
SetOnRefreshListener(null);
242241

242+
_renderer?.View.RemoveFromParent();
243243
_renderer?.Dispose();
244244
_renderer = null;
245245

Xamarin.Forms.Platform.Android/Renderers/SearchBarRenderer.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class SearchBarRenderer : ViewRenderer<SearchBar, SearchView>, SearchView
2222
TextColorSwitcher _textColorSwitcher;
2323
TextColorSwitcher _hintColorSwitcher;
2424
float _defaultHeight => Context.ToPixels(42);
25+
bool _isDisposed;
2526

2627
public SearchBarRenderer(Context context) : base(context)
2728
{
@@ -348,5 +349,24 @@ protected virtual NumberKeyListener GetDigitsKeyListener(InputTypes inputTypes)
348349
// (e.g., inputTypes &= ~InputTypes.NumberFlagSigned to disallow the sign)
349350
return LocalizedDigitsKeyListener.Create(inputTypes);
350351
}
352+
353+
protected override void Dispose(bool disposing)
354+
{
355+
if (_isDisposed)
356+
return;
357+
358+
_isDisposed = true;
359+
360+
if (disposing)
361+
{
362+
if (Control.IsAlive())
363+
{
364+
Control.SetOnQueryTextListener(null);
365+
Control.SetOnQueryTextFocusChangeListener(null);
366+
}
367+
}
368+
369+
base.Dispose(disposing);
370+
}
351371
}
352372
}

Xamarin.Forms.Platform.Android/Renderers/SliderRenderer.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class SliderRenderer : ViewRenderer<Slider, SeekBar>, SeekBar.IOnSeekBarC
1616
ColorFilter defaultthumbcolorfilter;
1717
Drawable defaultthumb;
1818
PorterDuff.Mode defaultprogresstintmode, defaultprogressbackgroundtintmode;
19+
bool _isDisposed;
1920

2021
public SliderRenderer(Context context) : base(context)
2122
{
@@ -213,5 +214,23 @@ protected override void OnLayout(bool changed, int l, int t, int r, int b)
213214

214215
thumb.SetBounds(thumb.Bounds.Left, thumbTop, thumb.Bounds.Left + thumb.IntrinsicWidth, thumbTop + thumb.IntrinsicHeight);
215216
}
217+
218+
protected override void Dispose(bool disposing)
219+
{
220+
if (_isDisposed)
221+
return;
222+
223+
_isDisposed = true;
224+
225+
if (disposing)
226+
{
227+
if (Control.IsAlive())
228+
{
229+
Control.SetOnSeekBarChangeListener(null);
230+
}
231+
}
232+
233+
base.Dispose(disposing);
234+
}
216235
}
217236
}

0 commit comments

Comments
 (0)