}
}
- internal class ChildHelper
+ internal class ChildHelper : Disposable
{
private FlexibleView mFlexibleView;
return mViewList[index];
}
+ protected override void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ Clear();
+
+ if (mTapGestureDetector != null)
+ {
+ mTapGestureDetector.Detected -= OnTapGestureDetected;
+ mTapGestureDetector.Dispose();
+ mTapGestureDetector = null;
+ }
+ }
+ base.Dispose(type);
+ }
+
private void OnTapGestureDetected(object source, TapGestureDetector.DetectedEventArgs e)
{
View itemView = e.View as View;
if (mLayout != null)
{
mLayout.StopScroll(false);
+ mLayout.Dispose();
+ mLayout = null;
}
if (mAdapter != null)
if (mChildHelper != null)
{
mChildHelper.Clear();
+ mChildHelper.Dispose();
mChildHelper = null;
}
}
/// </summary>
/// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
- public abstract class FlexibleViewLayoutManager
+ public abstract class FlexibleViewLayoutManager : Disposable
{
/// <summary>
/// Direction
return null;
}
+ /// <summary>
+ /// Dispose FlexibleView and all children on it.
+ /// </summary>
+ /// <param name="type">Dispose type.</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ mScrollAni?.Dispose();
+ }
+
+ base.Dispose(type);
+ }
+
internal virtual FlexibleViewViewHolder OnFocusSearchFailed(FlexibleViewViewHolder focused, FlexibleViewLayoutManager.Direction direction, FlexibleViewRecycler recycler)
{
return null;
return null;
}
+ /// <summary>
+ /// Dispose ButtonStyle and all children on it.
+ /// </summary>
+ /// <param name="type">Dispose type.</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ iconPadding?.Dispose();
+ textPadding?.Dispose();
+ }
+
+ base.Dispose(type);
+ }
+
private void InitSubStyle()
{
Overlay = new ImageViewStyle()
/// <since_tizen> 6 </since_tizen>
/// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
[EditorBrowsable(EditorBrowsableState.Never)]
- public class ControlStyle : ViewStyle
+ public class ControlStyle : ViewStyle, global::System.IDisposable
{
+ /// <summary>
+ /// A Flag to check if it is already disposed.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected bool disposed = false;
+
+ private bool isDisposeQueued = false;
+
static ControlStyle () { }
/// <summary>
this.CopyFrom(style);
}
+ /// <summary>
+ /// Dispose.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ ~ControlStyle()
+ {
+ if (!isDisposeQueued)
+ {
+ isDisposeQueued = true;
+ DisposeQueue.Instance.Add(this);
+ }
+ }
+
+ /// <summary>
+ /// Dispose.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public void Dispose()
+ {
+ //Throw excpetion if Dispose() is called in separate thread.
+ if (!Window.IsInstalled())
+ {
+ throw new global::System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
+ }
+
+ if (isDisposeQueued)
+ {
+ Dispose(DisposeTypes.Implicit);
+ }
+ else
+ {
+ Dispose(DisposeTypes.Explicit);
+ global::System.GC.SuppressFinalize(this);
+ }
+ }
+
+ /// <summary>
+ /// Dispose.
+ /// </summary>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected virtual void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ //Called by User
+ //Release your own managed resources here.
+ //You should release all of your own disposable objects here.
+ }
+
+ disposed = true;
+ }
+
private void InitSubstyle()
{
}
}
}
+ /// <summary>
+ /// Dispose SliderStyle and all children on it.
+ /// </summary>
+ /// <param name="type">Dispose type.</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ trackPadding?.Dispose();
+ }
+
+ base.Dispose(type);
+ }
+
private void InitSubStyle()
{
Track = new ImageViewStyle();
}
}
+ /// <summary>
+ /// Dispose CircularProgressStyle and all children on it.
+ /// </summary>
+ /// <param name="type">Dispose type.</param>
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ protected override void Dispose(DisposeTypes type)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (type == DisposeTypes.Explicit)
+ {
+ trackColor?.Dispose();
+ progressColor?.Dispose();
+ }
+
+ base.Dispose(type);
+ }
+
private void Initialize()
{
isEnabled = true;