</None>
</ItemGroup>
+ <ItemGroup>
+ <Folder Include="res\images\light\" />
+ <Folder Include="res\images\dark\" />
+ </ItemGroup>
+
</Project>
* See the License for the specific language governing permissions and
* limitations under the License
*/
-
+using System;
using Tizen.Applications;
using Tizen.Applications.Exceptions;
-using System;
+using Tizen;
using Apps.Common;
namespace Apps.Core
{
Tizen.Log.Error(Resources.LogTag, "app timeout" + e.Message);
}
}
+
+ public static void UninstallApplication(string id)
+ {
+ try
+ {
+ string packageId = PackageManager.GetPackageIdByApplicationId(id);
+ Package package = PackageManager.GetPackage(packageId);
+ Tizen.Log.Info(Resources.LogTag, "packageID: " + packageId);
+ bool ret = PackageManager.Uninstall(packageId);
+ }
+ catch (Exception ex)
+ {
+ Tizen.Log.Error(Resources.LogTag, "Cannot begin uninstallation" + ex.Message);
+ }
+ }
}
}
using System;
using System.Collections.Generic;
+using System.Windows.Input;
using Tizen.NUI;
+using Tizen.NUI.Binding;
using Apps.Common;
+using Apps.Core;
+
namespace Apps.Models
{
class AppInfoModel : PropertyNotifier
ApplicationId = applicationId;
IconUrl = url;
SetExtractedBackground(url);
+ AppSelectCommand = new Command(OnAppSelect);
}
public string Name { get; internal set; }
set => SetProperty(ref iconBackground, value);
}
+ private ICommand appSelectCommand;
+ public ICommand AppSelectCommand
+ {
+ get => appSelectCommand;
+ set => SetProperty(ref appSelectCommand, value);
+ }
+
+ private void OnAppSelect(object selectedItem)
+ {
+ AppLauncher.LaunchApplication(ApplicationId);
+ NUIApplication.Current.Exit();
+ }
+
private void SetDefaultImageVisual()
{
defaultVisual = new ImageVisual()
using System.IO;
using Tizen.NUI;
using Tizen.NUI.Xaml;
+using Tizen.NUI.Components;
using Tizen.Applications;
using Apps.Common;
using Apps.ViewModels;
UpdateViewModel(appListTask);
}
}
-
private void OnUninstallProgressChanged(object sender, PackageManagerEventArgs e)
{
- if (e.Progress == 0)
+ if (e.State == PackageEventState.Completed)
{
+ Tizen.Log.Info(Resources.LogTag, "Package id is : " + e.PackageId);
appList = appList.Where(c => c.PackageId != e.PackageId);
appViewModel.CreateData(appList);
+ string uninstallSuccessMessage = "App has been uninstalled successfully";
+ Notification.MakeToast(uninstallSuccessMessage, Notification.ToastBottom).Post(Notification.ToastShort);
+ }
+ else if (e.State == PackageEventState.Failed)
+ {
+ string uninstallFailedMessage = "This app can't be uninstalled";
+ Notification.MakeToast(uninstallFailedMessage, Notification.ToastBottom).Post(Notification.ToastShort);
}
}
* See the License for the specific language governing permissions and
* limitations under the License
*/
-
using System.Collections;
using System.Collections.Generic;
using System.Windows.Input;
public AppViewModel()
{
AppListSource = new AppInfoViewModel();
- AppSelectCommand = new Command(OnAppSelect);
+ AppRemoveCommand = new Command(OnAppRemove);
}
private IEnumerable appListSource;
set => SetProperty(ref appListSource, value);
}
- private ICommand appSelectCommand;
+ private ICommand appRemoveCommand;
- public ICommand AppSelectCommand
+ public ICommand AppRemoveCommand
{
- get => appSelectCommand;
- set => SetProperty(ref appSelectCommand, value);
+ get => appRemoveCommand;
+ set => SetProperty(ref appRemoveCommand, value);
}
public void CreateData(IEnumerable<ApplicationInfo> list)
((AppInfoViewModel)AppListSource).CreateData(list);
}
- private void OnAppSelect(object selectedItem)
+ private void OnAppRemove(object selectedItem)
{
Models.AppInfoModel appInfo = (Models.AppInfoModel)selectedItem;
- Core.AppLauncher.LaunchApplication(appInfo.ApplicationId);
+ Core.AppLauncher.UninstallApplication(appInfo.ApplicationId);
}
}
}
* See the License for the specific language governing permissions and
* limitations under the License
*/
-
+using System;
+using System.Windows.Input;
using Tizen.NUI;
+using Tizen.NUI.Binding;
using Tizen.NUI.Components;
using Tizen.NUI.BaseComponents;
using Apps.Common;
private View iconBackgroundView;
private TextLabel appLabel;
private ImageView appIcon;
+ private bool isRemoveMode = false;
+ private Timer timer;
+ private bool isMoved;
+ private bool isLongPressed;
+
+ public event EventHandler<EventArgs> LongPressed;
+ public event EventHandler<EventArgs> RemoveClicked;
+
+ public static readonly BindableProperty AppSelectCommandProperty = BindableProperty.Create(nameof(AppSelectCommand), typeof(ICommand), typeof(AppView), null, propertyChanged: (bindable, oldValue, newValue) =>
+ {
+ var instance = (AppItemLayout)bindable;
+ if (oldValue != newValue)
+ {
+ instance.appSelectCommand = (ICommand)newValue;
+ }
+ },
+ defaultValueCreator: (bindable) => ((AppItemLayout)bindable).appSelectCommand);
- public AppItemLayout() : base()
+ public AppItemLayout(bool removeMode) : base()
{
+ isRemoveMode = removeMode;
BackgroundColor = Color.Transparent;
WidthSpecification = 154.SpToPx();
HeightSpecification = 162.SpToPx();
HeightSpecification = 138.SpToPx(),
CornerRadius = new Vector4(12, 12, 12, 12),
BoxShadow = new Shadow(4.0f, new Color(0, 0, 0, 0.10f), new Vector2(2, 2)),
- Layout = new LinearLayout()
+ Layout = new RelativeLayout()
{
Padding = new Extents(0, 0, 8, 0).SpToPx(),
- HorizontalAlignment = HorizontalAlignment.Center,
- VerticalAlignment = VerticalAlignment.Top,
- LinearOrientation = LinearLayout.Orientation.Vertical,
}
};
base.Add(baseView);
},
};
baseView.Add(iconBackgroundView);
+ RelativeLayout.SetHorizontalAlignment(IconBackground, RelativeLayout.Alignment.Center);
+ RelativeLayout.SetVerticalAlignment(IconBackground, RelativeLayout.Alignment.Start);
appIcon = new ImageView()
{
appLabel = new TextLabel()
{
StyleName = "ItemTitle",
+ FontFamily = "BreezeSans",
ThemeChangeSensitive = true,
HeightSpecification = 24.SpToPx(),
WidthSpecification = LayoutParamPolicies.MatchParent,
};
baseView.Add(appLabel);
+ RelativeLayout.SetHorizontalAlignment(Label, RelativeLayout.Alignment.Center);
+ RelativeLayout.SetVerticalAlignment(Label, RelativeLayout.Alignment.End);
UpdateTheme(ThemeManager.PlatformThemeId);
ThemeManager.ThemeChanged += OnThemeUpdated;
+ TouchEvent += OnTouched;
+ AllowOnlyOwnTouch = true;
+ if (removeMode)
+ {
+ AddCrossButton();
+ }
+ }
+
+ private ICommand appSelectCommand;
+
+ public ICommand AppSelectCommand
+ {
+ get => (ICommand)GetValue(AppSelectCommandProperty);
+ set => SetValue(AppSelectCommandProperty, value);
}
public TextLabel Label => appLabel;
public View IconBackground => iconBackgroundView;
+ public Button CrossButton { get; internal set; }
+
+ private void OnThemeUpdated(object sender, ThemeChangedEventArgs e)
+ {
+ if (e.IsPlatformThemeChanged)
+ {
+ UpdateTheme(e.PlatformThemeId);
+ }
+ }
+
+ private void UpdateTheme(string currentPlatformThemeId)
+ {
+ if (currentPlatformThemeId.Equals(Resources.LightPlatformThemeId))
+ {
+ baseView.BoxShadow = new Shadow(4.0f, new Color(0, 0, 0, 0.20f), new Vector2(2, 2));
+ }
+ else if (currentPlatformThemeId.Equals(Resources.DarkPlatformThemeId))
+ {
+ baseView.BoxShadow = new Shadow(4.0f, new Color(1.0f, 1.0f, 1.0f, 0.20f), new Vector2(2, 2));
+ }
+ }
+
+ private bool OnTouched(object source, TouchEventArgs e)
+ {
+ if (e.Touch.GetState(0) == PointStateType.Down)
+ {
+ timer = new Timer(500);
+ timer.Start();
+ isMoved = false;
+ isLongPressed = false;
+ timer.Tick += (object source1, Timer.TickEventArgs ev) =>
+ {
+ if (isMoved == false)
+ {
+ isLongPressed = true;
+ LongPressed.Invoke(this, new EventArgs());
+ Tizen.Log.Debug(Resources.LogTag, "Long Pressed");
+ }
+ return false;
+ };
+ }
+ else
+ {
+ DisposeTimer();
+ if (e.Touch.GetState(0) == PointStateType.Up)
+ {
+ if (isLongPressed == false && isMoved == false)
+ {
+ if (isRemoveMode == false)
+ {
+ AppSelectCommand.Execute(BindingContext);
+ }
+ else
+ {
+ RemoveClicked.Invoke(this, new EventArgs());
+ }
+ Tizen.Log.Debug(Resources.LogTag, "Clicked");
+ }
+ isLongPressed = false;
+ }
+ else
+ {
+ isMoved = true;
+ }
+ }
+ return true;
+ }
+
+ public void AddCrossButton()
+ {
+ if (CrossButton == null)
+ {
+ CrossButton = new Button("CrossButton")
+ {
+ Size2D = new Size2D(48, 48).SpToPx(),
+ };
+ baseView.Add(CrossButton);
+ RelativeLayout.SetHorizontalAlignment(CrossButton, RelativeLayout.Alignment.End);
+ RelativeLayout.SetVerticalAlignment(CrossButton, RelativeLayout.Alignment.Start);
+ CrossButton.Clicked += (object sender, ClickedEventArgs e) =>{
+ if (isRemoveMode)
+ {
+ RemoveClicked.Invoke(this, new EventArgs());
+ }
+ };
+ }
+ }
+
+ private void DisposeTimer()
+ {
+ if (timer != null)
+ {
+ timer.Stop();
+ timer.Dispose();
+ timer = null;
+ }
+ }
+
protected override void Dispose(DisposeTypes type)
{
if (Disposed)
}
if (type == DisposeTypes.Explicit)
{
+ DisposeTimer();
+
baseView.Remove(appLabel);
appLabel?.Dispose();
appLabel = null;
-
+
iconBackgroundView.Remove(appIcon);
appIcon?.Dispose();
appIcon = null;
iconBackgroundView?.Dispose();
iconBackgroundView = null;
+ baseView.Remove(CrossButton);
+ CrossButton?.Dispose();
+ CrossButton = null;
+
Remove(baseView);
baseView?.Dispose();
baseView = null;
+
}
Tizen.Log.Info(Resources.LogTag, "Dispose appItemLayout");
base.Dispose(type);
}
-
- private void OnThemeUpdated(object sender, ThemeChangedEventArgs e)
- {
- if (e.IsPlatformThemeChanged)
- {
- UpdateTheme(e.PlatformThemeId);
- }
- }
-
- private void UpdateTheme(string currentPlatformThemeId)
- {
- if (currentPlatformThemeId.Equals(Resources.LightPlatformThemeId))
- {
- baseView.BoxShadow = new Shadow(4.0f, new Color(0, 0, 0, 0.20f), new Vector2(2, 2));
- }
- else if (currentPlatformThemeId.Equals(Resources.DarkPlatformThemeId))
- {
- baseView.BoxShadow = new Shadow(4.0f, new Color(1.0f, 1.0f, 1.0f, 0.20f), new Vector2(2, 2));
- }
- }
}
}
* See the License for the specific language governing permissions and
* limitations under the License
*/
-
+using System;
+using System.Collections.Generic;
using System.Windows.Input;
using Tizen.NUI;
using Tizen.NUI.Components;
{
class AppView : CollectionView
{
- public static readonly BindableProperty AppSelectCommandProperty = BindableProperty.Create(nameof(AppSelectCommand), typeof(ICommand), typeof(AppView), null, propertyChanged: (bindable, oldValue, newValue) =>
+ private bool removeMode;
+ private Window removePopupWindow;
+ private AlertDialog removePopup;
+ private View popupBaseView;
+ private Window.WindowOrientation popupOrientation;
+
+ public static readonly BindableProperty AppRemoveCommandProperty = BindableProperty.Create(nameof(AppRemoveCommand), typeof(ICommand), typeof(AppView), null, propertyChanged: (bindable, oldValue, newValue) =>
{
var instance = (AppView)bindable;
if (oldValue != newValue)
{
- instance.appSelectCommand = (ICommand)newValue;
+ instance.appRemoveCommand = (ICommand)newValue;
}
},
- defaultValueCreator: (bindable) => ((AppView)bindable).appSelectCommand);
+ defaultValueCreator: (bindable) => ((AppView)bindable).appRemoveCommand);
public AppView(object viewModel) : base()
{
ScrollingDirection = Direction.Vertical;
SelectionMode = ItemSelectionMode.Single;
BindingContext = viewModel;
+ removeMode = false;
+ UpdateItemTemplate(removeMode);
+ Header = GetHeader();
+ this.SetBinding(AppRemoveCommandProperty, "AppRemoveCommand");
+ this.SetBinding(ItemsSourceProperty, "AppListSource");
+ Tizen.Log.Info(Resources.LogTag, "AppView");
+ }
+
+ private void OnLongPressed(object sender, EventArgs e)
+ {
+ removeMode = !removeMode;
+ UpdateItemTemplate(removeMode);
+ }
+
+ private void UpdateItemTemplate(bool removeMode)
+ {
ItemTemplate = new DataTemplate(() =>
{
- AppItemLayout item = new AppItemLayout();
+ AppItemLayout item = new AppItemLayout(removeMode);
item.Label.SetBinding(TextLabel.TextProperty, "Name");
item.Icon.SetBinding(ImageView.ResourceUrlProperty, "IconUrl");
item.IconBackground.SetBinding(BackgroundProperty, "IconBackground");
+ item.SetBinding(AppItemLayout.AppSelectCommandProperty, "AppSelectCommand");
+ item.LongPressed += OnLongPressed;
+ if (removeMode && item.CrossButton != null)
+ {
+ item.RemoveClicked += OnRemoveClicked;
+ }
return item;
});
- Header = GetHeader();
- this.SetBinding(ItemsSourceProperty, "AppListSource");
- this.SetBinding(AppSelectCommandProperty, "AppSelectCommand");
+ }
- SelectionChanged += OnAppSelection;
- Tizen.Log.Info(Resources.LogTag, "AppView");
+ private void OnRemoveClicked(object sender, EventArgs e)
+ {
+ AddConfirmationPopup(((AppItemLayout)sender).BindingContext);
}
- private ICommand appSelectCommand;
+ private void UpdateRemovePopupWindowDimensions()
+ {
+ popupBaseView.WidthSpecification = removePopupWindow.Size.Width;
+ popupBaseView.HeightSpecification = removePopupWindow.Size.Height - 361.SpToPx();
+ popupBaseView.Remove(removePopup);
+ popupBaseView.Add(removePopup);
+ }
- public ICommand AppSelectCommand
+ private void OnRemovePopupWindowResized(object sender, Window.ResizedEventArgs e)
{
- get => (ICommand)GetValue(AppSelectCommandProperty);
- set => SetValue(AppSelectCommandProperty, value);
+ UpdateRemovePopupWindowDimensions();
+ popupOrientation = removePopupWindow.GetCurrentOrientation();
+ Tizen.Log.Info(Resources.LogTag, "Orientation: " + popupOrientation);
}
- private void OnAppSelection(object sender, SelectionChangedEventArgs e)
+ public void AddConfirmationPopup(object selectedItem)
{
- if(SelectedItem == null)
+ Tizen.Log.Info(Resources.LogTag, "Popup Added");
+ if (removePopupWindow == null)
{
- return;
+ removePopupWindow = new Window();
+ List<Window.WindowOrientation> list = new List<Window.WindowOrientation>
+ {
+ Window.WindowOrientation.Landscape,
+ Window.WindowOrientation.LandscapeInverse,
+ Window.WindowOrientation.NoOrientationPreference,
+ Window.WindowOrientation.Portrait,
+ Window.WindowOrientation.PortraitInverse
+ };
+ removePopupWindow.SetAvailableOrientations(list);
+ popupOrientation = removePopupWindow.GetCurrentOrientation();
+
+ removePopupWindow.SetTransparency(true);
+ removePopupWindow.BackgroundColor = Color.Transparent;
+ popupBaseView = new View();
+ removePopupWindow.Add(popupBaseView);
+
+ Button cancelButton = new Button("CancelButton");
+ Button deleteButton = new Button()
+ {
+ Size2D = new Size2D(252, 48).SpToPx(),
+ Text = "Delete",
+ };
+ deleteButton.PointSize = 16.SpToPx();
+ if (removePopup == null)
+ {
+ removePopup = new AlertDialog()
+ {
+ StyleName = "AlertDialogBackground",
+ Title = "Delete App from the Device",
+ Message = "Do you want to delete this app from the device?",
+ Actions = new List<Button>() { cancelButton, deleteButton },
+ };
+ }
+ popupBaseView.Add(removePopup);
+ UpdateRemovePopupWindowDimensions();
+ removePopupWindow.Resized += OnRemovePopupWindowResized;
+
+ cancelButton.Clicked += (object sender, ClickedEventArgs e) =>
+ {
+ removeMode = false;
+ UpdateItemTemplate(removeMode);
+ RemoveConfirmationPopup();
+ };
+ deleteButton.Clicked += (object sender, ClickedEventArgs e) =>
+ {
+ removeMode = false;
+ UpdateItemTemplate(removeMode);
+ AppRemoveCommand.Execute(selectedItem);
+ RemoveConfirmationPopup();
+ };
+ }
+ }
+
+ private void RemoveConfirmationPopup()
+ {
+ if (removePopup != null)
+ {
+ removePopupWindow?.Remove(popupBaseView);
+ popupBaseView?.Remove(removePopup);
+ removePopup.Dispose();
+ removePopup = null;
+ popupBaseView?.Dispose();
+ popupBaseView = null;
+ removePopupWindow?.Dispose();
+ removePopupWindow = null;
}
- AppSelectCommand.Execute(SelectedItem);
- SelectedItem = null;
- NUIApplication.Current.Exit();
}
private RecyclerViewItem GetHeader()
Add("width", new PropertyValue("normal")).
Add("weight", new PropertyValue("normal")).
Add("slant", new PropertyValue("normal"));
-
return allAppTitle;
}
+
+ private ICommand appRemoveCommand;
+ public ICommand AppRemoveCommand
+ {
+ get => (ICommand)GetValue(AppRemoveCommandProperty);
+ set => SetValue(AppRemoveCommandProperty, value);
+ }
}
}
<TextLabelStyle PixelSize ="24sp" TextColor ="#FDFDFD" />
</c:DefaultTitleItemStyle.Label>
</c:DefaultTitleItemStyle>
-
+ <c:ButtonStyle x:Key="CrossButton" ThemeChangeSensitive="true" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
+ <c:ButtonStyle.Icon>
+ <ImageViewStyle Size="48sp, 48sp">
+ <ImageViewStyle.ResourceUrl>
+ <Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/cross_button.png" Pressed="*Resource*/images/light/cross_button_selected.png" />
+ </ImageViewStyle.ResourceUrl>
+ </ImageViewStyle>
+ </c:ButtonStyle.Icon>
+ </c:ButtonStyle>
+ <c:AlertDialogStyle x:Key="AlertDialogBackground" ThemeChangeSensitive="true" BackgroundColor="#16131A">
+ <c:AlertDialogStyle.TitleTextLabel>
+ <TextLabelStyle TextColor="#FDFDFD" FontFamily="BreezeSans" PixelSize="24sp" />
+ </c:AlertDialogStyle.TitleTextLabel>
+ <c:AlertDialogStyle.MessageTextLabel>
+ <TextLabelStyle TextColor="#FDFDFD" FontFamily="BreezeSans" PixelSize="24sp" />
+ </c:AlertDialogStyle.MessageTextLabel>
+ </c:AlertDialogStyle>
+ <c:ButtonStyle x:Key="CancelButton" ThemeChangeSensitive="true" Size="252sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Icon>
+ <ImageViewStyle Size="252sp, 48sp">
+ <ImageViewStyle.ResourceUrl>
+ <Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/cancel_button.png" />
+ </ImageViewStyle.ResourceUrl>
+ </ImageViewStyle>
+ </c:ButtonStyle.Icon>
+ </c:ButtonStyle>
<TextLabelStyle x:Key="ItemTitle" TextColor="#FDFDFD" FontFamily="BreezeSans" PixelSize="16sp"/>
</Theme>
\ No newline at end of file
<TextLabelStyle PixelSize ="24sp" TextColor ="#090E21" />
</c:DefaultTitleItemStyle.Label>
</c:DefaultTitleItemStyle>
-
+ <c:ButtonStyle x:Key="CrossButton" ThemeChangeSensitive="true" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
+ <c:ButtonStyle.Icon>
+ <ImageViewStyle Size="48sp, 48sp">
+ <ImageViewStyle.ResourceUrl>
+ <Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/cross_button.png" Pressed="*Resource*/images/light/cross_button_selected.png" />
+ </ImageViewStyle.ResourceUrl>
+ </ImageViewStyle>
+ </c:ButtonStyle.Icon>
+ </c:ButtonStyle>
+ <c:AlertDialogStyle x:Key="AlertDialogBackground" ThemeChangeSensitive="true" BackgroundColor="#FAFAFA">
+ <c:AlertDialogStyle.TitleTextLabel>
+ <TextLabelStyle TextColor="#090E21" FontFamily="BreezeSans" PixelSize="24sp" />
+ </c:AlertDialogStyle.TitleTextLabel>
+ <c:AlertDialogStyle.MessageTextLabel>
+ <TextLabelStyle TextColor="#090E21" FontFamily="BreezeSans" PixelSize="24sp" />
+ </c:AlertDialogStyle.MessageTextLabel>
+ </c:AlertDialogStyle>
+ <c:ButtonStyle x:Key="CancelButton" ThemeChangeSensitive="true" Size="252sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Icon>
+ <ImageViewStyle Size="252sp, 48sp">
+ <ImageViewStyle.ResourceUrl>
+ <Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/cancel_button.png" />
+ </ImageViewStyle.ResourceUrl>
+ </ImageViewStyle>
+ </c:ButtonStyle.Icon>
+ </c:ButtonStyle>
<TextLabelStyle x:Key="ItemTitle" TextColor="#090E21" FontFamily="BreezeSans" PixelSize="16sp"/>
</Theme>
\ No newline at end of file
<privileges>
<privilege>http://tizen.org/privilege/appmanager.launch</privilege>
<privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+ <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
+ <privilege>http://tizen.org/privilege/window.priority.set</privilege>
</privileges>
<dependencies />
<provides-appdefined-privileges />
{
if (isMoved == false)
{
+ Overlay.BackgroundColor = new Color(0.0f, 0.0f, 0.0f, 0.0f);
isLongPressed = true;
LongPressed.Invoke(this, new EventArgs());
Tizen.Log.Debug(Resources.LogTag, "Long Pressed");
else
{
Overlay.BackgroundColor = new Color(0.0f, 0.0f, 0.0f, 0.0f);
- if (timer != null)
- {
- timer.Stop();
- timer.Dispose();
- timer = null;
- }
+ DisposeTimer();
if (e.Touch.GetState(0) == PointStateType.Up)
{
if (isLongPressed == false && isMoved == false)
return true;
}
+ private void DisposeTimer()
+ {
+ if (timer != null)
+ {
+ timer.Stop();
+ timer.Dispose();
+ timer = null;
+ }
+ }
+
public View BaseView { get; }
public TextLabel Label { get; }
}
if (type == DisposeTypes.Explicit)
{
+ DisposeTimer();
+
BaseView.Remove(Label);
Label?.Dispose();
BaseView.Remove(IconBackground);
IconBackground?.Dispose();
- BaseView.Remove(CrossButton);
+ Remove(CrossButton);
CrossButton?.Dispose();
Remove(BaseView);