Refactor PlaylistSelectorView for better scalability.
Fix dispose function for item layout classes.
Change-Id: Id311be6230a8ad7bf8afd80bf4131940e6e73c16
Signed-off-by: aman.jeph <aman.jeph@samsung.com>
},\r
defaultValueCreator: (bindable) => ((ListItemLayout)bindable).playingStatus);\r
\r
- public ListItemLayout(bool animationRequired = false, int width = 1792, int height = 108) : base()\r
+ public ListItemLayout(bool animationRequired = false) : base()\r
{\r
OnInitialize();\r
AnimationRequired = animationRequired;\r
WidthSpecification = LayoutParamPolicies.MatchParent;\r
- HeightSpecification = height.SpToPx();\r
+ HeightSpecification = 108.SpToPx();\r
BackgroundColor = Color.Transparent;\r
Layout = new RelativeLayout()\r
{\r
}\r
if (type == DisposeTypes.Explicit)\r
{\r
- base.Remove(itemSeperator);\r
+ Remove(itemSeperator);\r
itemSeperator?.Dispose();\r
itemSeperator = null;\r
\r
RemoveAnimation();\r
- base.Remove(icon);\r
+ RemovePlayingStatus();\r
+ Remove(icon);\r
icon?.Dispose();\r
icon = null;\r
\r
- base.Remove(titleLabel);\r
+ textView.Remove(titleLabel);\r
titleLabel?.Dispose();\r
titleLabel = null;\r
\r
- base.Remove(subtitleLabel);\r
+ textView.Remove(subtitleLabel);\r
subtitleLabel?.Dispose();\r
subtitleLabel = null;\r
+\r
+ Remove(textView);\r
+ textView?.Dispose();\r
+ textView = null;\r
}\r
\r
base.Dispose(type);\r
{\r
return false;\r
}\r
- LottieAnimationView lottieAnimationView = new LottieAnimationView();\r
+ LottieAnimationView lottieAnimationView = new LottieAnimationView()\r
+ {\r
+ Size2D = new Size2D(64, 64).SpToPx(),\r
+ };\r
if(lottieAnimationView == null)\r
{\r
return false;\r
}\r
private void RemoveAnimation()\r
{\r
- if(icon != null)\r
+ if(icon != null && icon.ChildCount > 0)\r
{\r
View child = icon.GetChildAt(0);\r
if (child != null && child is LottieAnimationView)\r
{\r
Icon = new ImageViewStyle()\r
{\r
+ Size = new Size(IconSize, IconSize).SpToPx(),\r
ResourceUrl = Resources.GetImagePath() + "play_icon.png",\r
},\r
IsEnabled = true,\r
IsSelectable = true,\r
};\r
- playPauseIcon = new Button(buttonStyle);\r
- playPauseIcon.WidthSpecification = IconSize;\r
- playPauseIcon.HeightSpecification = IconSize;\r
+ playPauseIcon = new Button(buttonStyle)\r
+ {\r
+ WidthSpecification = IconSize.SpToPx(),\r
+ HeightSpecification = IconSize.SpToPx()\r
+ };\r
playPauseIcon.Clicked += (object sender, ClickedEventArgs e) =>\r
{\r
PlaybackHelper.Instance.ChangePlayingStatus();\r
\r
private void RemovePlayingStatus()\r
{\r
- if (icon != null)\r
+ if (icon != null && icon.ChildCount > 0)\r
{\r
View child = icon.GetChildAt(0);\r
if (child != null && child is Button)\r
{
this.lyricsViewModel = lyricsViewModel;
BindingContext = lyricsViewModel.lyricsModel;
- WidthSpecification = LayoutParamPolicies.MatchParent;
- HeightSpecification = LayoutParamPolicies.MatchParent;
+ WidthSpecification = 784.SpToPx();
+ HeightSpecification = 784.SpToPx();
Layout = new FlexLayout()
{
Direction = FlexLayout.FlexDirection.Column,
Alignment = FlexLayout.AlignmentType.Center,
Justification = FlexLayout.FlexJustification.Center,
- Margin = new Extents(24, 24, 0, 46).SpToPx(),
+ Margin = new Extents(24, 24, 24, 46).SpToPx(),
};
isAnimating = false;
AddThumbnail();
playButton = new MultiStateButton()
{
Size2D = new Size2D(48, 48).SpToPx(),
+ IconSize = new Size(48, 48).SpToPx(),
BackgroundColor = Color.Transparent,
IconResources = new Dictionary<ThemeType, Dictionary<string, StringSelector>>()
{
AlbumArt,
TrackList,
}
- private const int IconSize = 48;
+ private const int IconButtonSize = 48;
private const int ControlViewHeightLandscape = 386;
private const int ControlViewHeightPortrait = 438;
private const int TitleLabelHeight = 48;
ThemeChangeSensitive = true,
WidthSpecification = LayoutParamPolicies.MatchParent,
HeightSpecification = 48.SpToPx(),
- PixelSize = 40.SpToPx(),
+ PixelSize = 36.SpToPx(),
FontFamily = "BreezeSans",
FontStyle = UIFontStyles.AllNormal,
Text = "Delete",
{
shuffleButton = new MultiStateButton()
{
- Size2D = new Size2D(IconSize, IconSize).SpToPx(),
+ Size2D = new Size2D(IconButtonSize, IconButtonSize).SpToPx(),
+ IconSize = new Tizen.NUI.Size(IconButtonSize, IconButtonSize).SpToPx(),
Margin = new Extents(0, 40, 0, 0).SpToPx(),
IconResources = new Dictionary<ThemeType, Dictionary<string, StringSelector>>()
{
{
playButton = new MultiStateButton()
{
- Size2D = new Size2D(IconSize, IconSize).SpToPx(),
+ Size2D = new Size2D(IconButtonSize, IconButtonSize).SpToPx(),
+ IconSize = new Tizen.NUI.Size(IconButtonSize, IconButtonSize).SpToPx(),
BackgroundColor = Color.Transparent,
IconResources = new Dictionary<ThemeType, Dictionary<string, StringSelector>>()
{
{
repeatButton = new MultiStateButton()
{
- Size2D = new Size2D(IconSize, IconSize).SpToPx(),
+ Size2D = new Size2D(IconButtonSize, IconButtonSize).SpToPx(),
+ IconSize = new Tizen.NUI.Size(IconButtonSize, IconButtonSize).SpToPx(),
Margin = new Extents(40, 0, 0, 0).SpToPx(),
IconResources = new Dictionary<ThemeType, Dictionary<string, StringSelector>>()
{
favouriteButton = new MultiStateButton()
{
- Size2D = new Size2D(IconSize, IconSize).SpToPx(),
+ Size2D = new Size2D(IconButtonSize, IconButtonSize).SpToPx(),
+ IconSize = new Tizen.NUI.Size(IconButtonSize, IconButtonSize).SpToPx(),
IconResources = new Dictionary<ThemeType, Dictionary<string, StringSelector>>()
{
{
ItemsLayouter = new LinearLayouter(),
ItemTemplate = new DataTemplate(() =>
{
- ListItemLayout layout = new ListItemLayout(true, 832, 108);
+ ListItemLayout layout = new ListItemLayout(true);
layout.Icon.SetBinding(ImageView.ResourceUrlProperty, "ThumbnailPath");
layout.TitleLabel.SetBinding(TextLabel.TextProperty, "TrackTitle");
layout.SubtitleLabel.SetBinding(TextLabel.TextProperty, "ArtistName");
using System;
using System.Collections.Generic;
-using Tizen.Content.MediaContent;
using MusicPlayer.ViewModels;
using Tizen.NUI.Components;
using Tizen.NUI.BaseComponents;
using Tizen.NUI;
using Tizen.NUI.Binding;
using MusicPlayer.Common;
-using MusicPlayer.Models;
-using MusicPlayer.Core;
namespace MusicPlayer.Views
{
private TextLabel noListText;
private TextLabel underText;
private CollectionView collectionView;
+ private View selectPlaylistActionArea;
private Button selectPlaylistCancelButton;
+ private View createPlaylistButtonArea;
private Button createPlaylistCancelButton;
private Button createPlaylistCreateButton;
private AlertDialog selectPlaylistDialog;
public PlaylistSelectorView(PlaylistSelectorViewModel viewModel)
{
this.viewModel = viewModel;
+ bool needShrinkedSize = viewModel.ListViewModel.Count <= 1;
AddSelectPlaylistContentArea();
AddSelectPlaylistCancelButton();
selectPlaylistDialog = new AlertDialog()
{
- Size2D = new Size2D((DeviceInfo.IsPortrait ? 1016 : 1184), 660).SpToPx(),
- Title = "Add to playlist",
+ WidthSpecification = (DeviceInfo.IsPortrait ? 1016 : 1184).SpToPx(),
+ HeightSpecification = (needShrinkedSize ? 544 : 652).SpToPx(),
+ Layout = new LinearLayout()
+ {
+ Padding = new Extents(80, 80, 40, 40).SpToPx(),
+ Margin = new Extents(32, 32, 0, 0).SpToPx(),
+ LinearOrientation = LinearLayout.Orientation.Vertical,
+ HorizontalAlignment = HorizontalAlignment.Begin,
+ VerticalAlignment = VerticalAlignment.Top,
+ },
+ TitleContent = CreateAlertDialogTitle("Add to playlist"),
Content = selectPlaylistContentArea,
- Actions = new List<View> { selectPlaylistCancelButton },
- Padding = new Extents(0, 0, 0, 0).SpToPx(),
- Margin = new Extents(32, 32, 0, 0).SpToPx(),
+ ActionContent = selectPlaylistActionArea,
};
- TextLabel textLabel = (TextLabel)selectPlaylistDialog.TitleContent;
- textLabel.FontStyle = UIFontStyles.AllNormal;
Window.Instance.Add(selectPlaylistDialog);
selectPlaylistDialog.BackKeyPressed += OnBackKeyPressed;
}
+ private TextLabel CreateAlertDialogTitle(string titleText)
+ {
+ TextLabel titleLabel = new TextLabel()
+ {
+ Name = "AlertDialogTitle",
+ StyleName = "LabelText",
+ ThemeChangeSensitive = true,
+ PixelSize = 40.SpToPx(),
+ FontFamily = "BreezeSans",
+ FontStyle = UIFontStyles.AllNormal,
+ Text = titleText,
+ WidthSpecification = LayoutParamPolicies.MatchParent,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ };
+ return titleLabel;
+ }
+
private void OnBackKeyPressed(object sender, EventArgs e)
{
OnBackKey();
selectPlaylistContentArea = new View()
{
WidthSpecification = LayoutParamPolicies.MatchParent,
- HeightSpecification = 340.SpToPx(),
+ HeightSpecification = (viewModel.ListViewModel.Count <= 1 ? 216 : 324).SpToPx(),
BackgroundColor = Color.Transparent,
Layout = new FlexLayout()
{
Direction = FlexLayout.FlexDirection.Column,
ItemsAlignment = FlexLayout.AlignmentType.FlexStart,
Justification = FlexLayout.FlexJustification.FlexStart,
+ Margin = new Extents(0, 0, 40, 0).SpToPx(),
},
};
AddCreatePlayListButton();
WidthSpecification = LayoutParamPolicies.MatchParent,
HeightSpecification = 108.SpToPx(),
TextAlignment = HorizontalAlignment.Begin,
- Padding = (DeviceInfo.IsPortrait ? new Extents(80, 80, 0, 0) : new Extents(64, 64, 0, 0)).SpToPx(),
IsEnabled = true,
IsSelectable = false,
- ItemAlignment = LinearLayout.Alignment.CenterVertical,
+ ItemHorizontalAlignment = HorizontalAlignment.Begin,
+ ItemVerticalAlignment = VerticalAlignment.Center,
};
createNewPlaylistButton.TextAlignment = HorizontalAlignment.Begin;
createNewPlaylistButton.BindingContext = viewModel;
WidthSpecification = LayoutParamPolicies.MatchParent,
HeightSpecification = 2.SpToPx(),
BackgroundColor = UIColors.ItemSeperator,
- Margin = (DeviceInfo.IsPortrait ? new Extents(80, 80, 0, 0) : new Extents(64, 64, 0, 0)).SpToPx(),
};
selectPlaylistContentArea.Add(itemSeperator);
createNewPlaylistButton.Clicked += CreateNewPlaylistButtonClicked;
AddCreatePlaylistButtons();
createPlaylistDialog = new AlertDialog()
{
- Size2D = new Size2D((DeviceInfo.IsPortrait ? 1016 : 1184), 465).SpToPx(),
- Title = "Create playlist",
+ WidthSpecification = (DeviceInfo.IsPortrait ? 1016 : 1184).SpToPx(),
+ HeightSpecification = 465.SpToPx(),
+ Layout = new LinearLayout()
+ {
+ Padding = new Extents(80, 80, 40, 40).SpToPx(),
+ Margin = new Extents(32, 32, 0, 0).SpToPx(),
+ LinearOrientation = LinearLayout.Orientation.Vertical,
+ HorizontalAlignment = HorizontalAlignment.Begin,
+ VerticalAlignment = VerticalAlignment.Top,
+ },
+ TitleContent = CreateAlertDialogTitle("Create playlist"),
Content = createPlaylistContentArea,
- Actions = new List<View> { createPlaylistCancelButton, createPlaylistCreateButton },
- Padding = new Extents(0, 0, 0, 0).SpToPx(),
- Margin = new Extents(32, 32, 0, 0).SpToPx(),
+ ActionContent = createPlaylistButtonArea,
};
- TextLabel textLabel = (TextLabel)selectPlaylistDialog.TitleContent;
- textLabel.FontStyle = UIFontStyles.AllNormal;
Window.Instance.Add(createPlaylistDialog);
createPlaylistDialog.BackKeyPressed += OnPlaylistCreateDialogBackKey;
}
{
ThemeChangeSensitive = true,
StyleName = "ListBackground",
- Size2D = new Size2D((DeviceInfo.IsPortrait ? 1016 : 1184), 108).SpToPx(),
+ WidthSpecification = LayoutParamPolicies.MatchParent,
+ HeightSpecification = 108.SpToPx(),
ItemsLayouter = new LinearLayouter(),
ScrollingDirection = ScrollableBase.Direction.Vertical,
- HeightSpecification = LayoutParamPolicies.WrapContent,
SelectionMode = ItemSelectionMode.Single,
};
collectionView.ScrollDragStarted += (object o, ScrollEventArgs e) =>
VerticalAlignment = VerticalAlignment.Center,
FontFamily = "BreezeSans",
FontStyle = UIFontStyles.NormalLight,
- Padding = (DeviceInfo.IsPortrait ? new Extents(80, 80, 0, 0) : new Extents(64, 64, 0, 0)).SpToPx(),
};
selectPlaylistContentArea.Add(noListText);
}
private void AddSelectPlaylistCancelButton()
{
+ selectPlaylistActionArea = new View()
+ {
+ BackgroundColor = Color.Transparent,
+ HeightSpecification = 96.SpToPx(),
+ WidthSpecification = LayoutParamPolicies.MatchParent,
+ Layout = new LinearLayout()
+ {
+ Margin = new Extents(0, 0, 64, 0).SpToPx(),
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center
+ }
+ };
+
selectPlaylistCancelButton = new Button()
{
Size2D = new Size2D(336, 96).SpToPx(),
Text = "Cancel",
};
+ selectPlaylistActionArea.Add(selectPlaylistCancelButton);
selectPlaylistCancelButton.TextLabel.FontStyle = UIFontStyles.AllNormal;
selectPlaylistCancelButton.IsSelectable = true;
selectPlaylistCancelButton.Clicked += SelectPlaylistCancelButtonClicked;
createPlaylistContentArea = new View()
{
WidthSpecification = LayoutParamPolicies.MatchParent,
- HeightSpecification = 169.SpToPx(),
+ HeightSpecification = 146.SpToPx(),
BackgroundColor = Color.Transparent,
Layout = new FlexLayout()
{
Direction = FlexLayout.FlexDirection.Column,
ItemsAlignment = FlexLayout.AlignmentType.FlexStart,
Justification = FlexLayout.FlexJustification.FlexStart,
- Padding = (DeviceInfo.IsPortrait ? new Extents(80, 80, 0, 0) : new Extents(64, 64, 0, 0)).SpToPx(),
+ Margin = new Extents(0, 0, 40, 0).SpToPx(),
},
};
TextLabel textLabel = new TextLabel()
{
BackgroundColor = UIColors.ItemSeperator,
WidthSpecification = LayoutParamPolicies.MatchParent,
- HeightSpecification = 1.SpToPx(),
+ HeightSpecification = 2.SpToPx(),
};
createPlaylistContentArea.Add(itemSeperator);
underText = new TextLabel()
{
inputArea = new View()
{
- Size2D = new Size2D((DeviceInfo.IsPortrait ? 856 : 1024), 48).SpToPx(),
+ WidthSpecification = LayoutParamPolicies.MatchParent,
+ HeightSpecification = 48.SpToPx(),
Layout = new FlexLayout()
{
Direction = FlexLayout.FlexDirection.Row,
private void AddCreatePlaylistButtons()
{
+ createPlaylistButtonArea = new View()
+ {
+ BackgroundColor = Color.Transparent,
+ HeightSpecification = 96.SpToPx(),
+ WidthSpecification = LayoutParamPolicies.MatchParent,
+ Layout = new RelativeLayout()
+ {
+ Margin = new Extents(0, 0, 54, 0).SpToPx(),
+ }
+ };
+
createPlaylistCancelButton = new Button("CancelButton")
{
ThemeChangeSensitive = true,
createPlaylistCancelButton.TextLabel.FontStyle = UIFontStyles.AllNormal;
createPlaylistCancelButton.IsSelectable = true;
createPlaylistCancelButton.Clicked += CreatePlaylistCancelButtonClicked;
+ createPlaylistButtonArea.Add(createPlaylistCancelButton);
+ RelativeLayout.SetLeftRelativeOffset(createPlaylistCancelButton, 0.0f);
+ RelativeLayout.SetHorizontalAlignment(createPlaylistCancelButton, RelativeLayout.Alignment.Start);
+ RelativeLayout.SetVerticalAlignment(createPlaylistCancelButton, RelativeLayout.Alignment.Start);
createPlaylistCreateButton = new Button()
{
createPlaylistCreateButton.TextLabel.FontStyle = UIFontStyles.AllNormal;
createPlaylistCreateButton.IsSelectable = true;
createPlaylistCreateButton.Clicked += CreatePlaylistCreateButtonClicked;
+ createPlaylistButtonArea.Add(createPlaylistCreateButton);
+ RelativeLayout.SetRightRelativeOffset(createPlaylistCreateButton, 1.0f);
+ RelativeLayout.SetHorizontalAlignment(createPlaylistCreateButton, RelativeLayout.Alignment.End);
+ RelativeLayout.SetVerticalAlignment(createPlaylistCreateButton, RelativeLayout.Alignment.Start);
}
private void OnCreateDialogBackKeyPressed()
}
inputArea = null;
underText = null;
- createPlaylistDialog.Dispose();
- createPlaylistDialog = null;
- createPlaylistContentArea = null;
+ createPlaylistButtonArea.Remove(createPlaylistCancelButton);
createPlaylistCancelButton?.Dispose();
createPlaylistCancelButton = null;
+ createPlaylistButtonArea.Remove(createPlaylistCreateButton);
createPlaylistCreateButton?.Dispose();
createPlaylistCreateButton = null;
+ createPlaylistDialog.Dispose();
+ createPlaylistDialog = null;
+ createPlaylistContentArea = null;
}
protected override void Dispose(DisposeTypes type)
collectionView = null;
noListText = null;
+ selectPlaylistActionArea.Remove(selectPlaylistCancelButton);
+ selectPlaylistCancelButton?.Dispose();
+ selectPlaylistCancelButton = null;
+
selectPlaylistDialog?.Dispose();
selectPlaylistDialog = null;
selectPlaylistContentArea = null;
-
- selectPlaylistCancelButton?.Dispose();
- selectPlaylistCancelButton = null;
}
base.Dispose(type);
Margin = new Extents(40, 0, 0, 0).SpToPx(),
};
playlistCreateButton.BindingContext = viewModel;
- playlistCreateButton.SetBinding(Button.IsEnabledProperty, "CanCreatePlaylist");
+ playlistCreateButton.SetBinding(IsEnabledProperty, "CanCreatePlaylist");
titleView.Add(playlistCreateButton);
RelativeLayout.SetLeftRelativeOffset(playlistCreateButton, 1.0f);
RelativeLayout.SetRightRelativeOffset(playlistCreateButton, 1.0f);
{
ThemeChangeSensitive = true,
StyleName = "Dialogs",
- //FixMe : Here WidthSpecification in portrait mode should be 1016 but that cause the
- // AlertDialog to fill Full width of window but keeping width 952 is showing correclty
- WidthSpecification = (DeviceInfo.IsPortrait ? 952 : 1184).SpToPx(),
+ WidthSpecification = (DeviceInfo.IsPortrait ? 1016 : 1184).SpToPx(),
HeightSpecification = 466.SpToPx(),
Layout = new LinearLayout()
{
}
if (type == DisposeTypes.Explicit)
{
- base.Remove(itemSeperator);
+ Remove(itemSeperator);
itemSeperator?.Dispose();
itemSeperator = null;
- base.Remove(checkBox);
+ Remove(checkBox);
checkBox?.Dispose();
checkBox = null;
- base.Remove(icon);
+ Remove(icon);
icon?.Dispose();
icon = null;
- base.Remove(titleLabel);
+ textView.Remove(titleLabel);
titleLabel?.Dispose();
titleLabel = null;
- base.Remove(subtitleLabel);
+ textView.Remove(subtitleLabel);
subtitleLabel?.Dispose();
subtitleLabel = null;
+
+ Remove(textView);
+ textView?.Dispose();
+ textView = null;
}
base.Dispose(type);
Track = 1,
Album = 2,
Artist = 3,
+ Search = 4,
};
abstract class ContentViewFactory
{
class MultiStateButton: Button
{
- public static readonly BindableProperty CustomStateProperty = BindableProperty.Create(nameof(CusotmState), typeof(string), typeof(MultiStateButton), null, propertyChanged: (bindable, oldValue, newValue) =>
+ public static readonly BindableProperty CustomStateProperty = BindableProperty.Create(nameof(CustomState), typeof(string), typeof(MultiStateButton), null, propertyChanged: (bindable, oldValue, newValue) =>
{
var instance = (MultiStateButton)bindable;
if (newValue != null)
instance.UpdateCustomState(newCustomState);
}
},
- defaultValueCreator: (bindable) =>
- {
- var instance = (MultiStateButton)bindable;
- return instance.customState;
- });
+ defaultValueCreator: (bindable) => ((MultiStateButton)bindable).customState);
public MultiStateButton() : base()
{
}
private string customState;
- public string CusotmState
+ public string CustomState
{
get => (string)GetValue(CustomStateProperty);
set => SetValue(CustomStateProperty, value);
protected override void OnThemeChanged(object sender, ThemeChangedEventArgs e)
{
base.OnThemeChanged(sender, e);
- UpdateCustomState(CusotmState);
+ UpdateCustomState(CustomState);
}
}
}
return addToPlaylistView;
}
- public SearchView CreateSearchView()
+ private View CreateSearchView()
{
SearchViewModel viewModel = new SearchViewModel();
SearchView searchView = new SearchView(viewModel);
using System;
using System.Collections.Generic;
using MusicPlayer.Common;
+using Tizen.NUI.BaseComponents;
namespace MusicPlayer.Views.Utils
{
class ViewLibrary
{
private readonly IDictionary<int, BaseContentView> contentViewDictionary;
- private readonly ConcreteContentViewFactory contentViewFactory;
- private readonly ConcreteSubContentViewFactory subContentViewFactory;
- private readonly ConcreteOperationViewFactory operationViewFactory;
+ private readonly ContentViewFactory contentViewFactory;
+ private readonly SubContentViewFactory subContentViewFactory;
+ private readonly OperationViewFactory operationViewFactory;
public ViewLibrary()
{
return view;
}
- public void AddOperationView(OperationViewType type, ContentViewType contentType, object viewModelData, object otherData)
+ public View AddOperationView(OperationViewType type, ContentViewType contentType, object viewModelData, object otherData)
{
- operationViewFactory.AddOperationView(type, contentType, viewModelData, otherData);
+ return operationViewFactory.AddOperationView(type, contentType, viewModelData, otherData);
}
-
- public SearchView CreateSearchView()
- {
- return operationViewFactory.CreateSearchView();
- }
-
}
}
private void OnSearchIconClicked(object sender, ClickedEventArgs e)
{
- SearchView searchView = viewLibrary.CreateSearchView();
+ SearchView searchView = (SearchView)viewLibrary.AddOperationView(OperationViewType.Search, ContentViewType.Search, null, null);
if (searchView != null)
{
searchView.LaunchDetailView += OnSubViewAdded;
</ItemGroup>\r
\r
<ItemGroup>\r
- <PackageReference Include="Tizen.NET" Version="10.0.0.17062">\r
- <ExcludeAssets>Runtime</ExcludeAssets>\r
- </PackageReference>\r
+ <PackageReference Include="Tizen.NET" Version="10.0.0.17064" />\r
<PackageReference Include="Tizen.NET.Sdk" Version="1.1.7" />\r
</ItemGroup>\r
\r
<c:ButtonStyle x:Key="PrevButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/prev.png" Pressed="*Resource*/images/prev_pressed.png" Disabled="*Resource*/images/prev_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="NextButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/next.png" Pressed="*Resource*/images/next_pressed.png" Disabled="*Resource*/images/next_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="ShuffleButton" Size="48sp, 48sp" Position="0sp, 196sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/shuffle_on.png" Pressed="*Resource*/images/shuffle_on_pressed.png" Disabled="*Resource*/images/shuffle_on_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="RepeatButton" Size="48sp, 48sp" Position="592sp, 196sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/next.png" Pressed="*Resource*/images/next_pressed.png" Disabled="*Resource*/images/next_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="ListButton" Size="48sp, 48sp" Position="0sp, 0sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/playing_queue.png" Pressed="*Resource*/images/playing_queue_pressed.png" Disabled="*Resource*/images/playing_queue_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="PlaylistButton" Size="48sp, 48sp" Position="88sp, 0sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/addtoplaylist.png" Pressed="*Resource*/images/addtoplaylist_pressed.png" Disabled="*Resource*/images/addtoplaylist_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="FavouriteButton" Size="48sp, 48sp" Position="176sp, 0sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/next.png" Pressed="*Resource*/images/next_pressed.png" Disabled="*Resource*/images/next_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="PlayAll" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/playall.png" Pressed="*Resource*/images/playall_pressed.png" Disabled="*Resource*/images/playall_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="PlaylistAdd" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/addtoplaylist.png" Pressed="*Resource*/images/addtoplaylist_pressed.png" Disabled="*Resource*/images/addtoplaylist_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="BackButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/back.png" Pressed="*Resource*/images/back_pressed.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="MoreButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/more.png" Pressed="*Resource*/images/more_pressed.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="SearchIcon" Size="40sp, 40sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="40sp, 40sp">
<ImageViewStyle.ResourceUrl>*Resource*/images/dark/search_icon.png</ImageViewStyle.ResourceUrl>
</ImageViewStyle>
</c:ButtonStyle.Icon>
<c:ButtonStyle x:Key="ClearButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>*Resource*/images/dark/cross_button.png</ImageViewStyle.ResourceUrl>
</ImageViewStyle>
</c:ButtonStyle.Icon>
<c:ButtonStyle x:Key="CheckBox" Size="36sp, 36sp" IsSelected="false" IsEnabled="false" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="36sp, 36sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Disabled="*Resource*/images/dark/check_off.png" DisabledSelected="*Resource*/images/dark/check_on.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="SearchButton" Size="96sp, 60sp" IsSelectable="false" IsEnabled="true" BackgroundImage="*Resource*/images/dark/search_button_bg.png">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="40sp, 40sp">
<ImageViewStyle.ResourceUrl>*Resource*/images/dark/search_icon.png</ImageViewStyle.ResourceUrl>
</ImageViewStyle>
</c:ButtonStyle.Icon>
<c:ButtonStyle x:Key="PrevButton" Size="48sp, 48sp" BackgroundColor="Transparent" >
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/prev.png" Pressed="*Resource*/images/prev_pressed.png" Disabled="*Resource*/images/prev_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="NextButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/next.png" Pressed="*Resource*/images/next_pressed.png" Disabled="*Resource*/images/next_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="ShuffleButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/shuffle_on.png" Pressed="*Resource*/images/shuffle_on_pressed.png" Disabled="*Resource*/images/shuffle_on_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="RepeatButton" Size="48sp, 48sp" Position="592sp, 196sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/next.png" Pressed="*Resource*/images/next_pressed.png" Disabled="*Resource*/images/next_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="ListButton" Size="48sp, 48sp" Position="0sp, 0sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/playing_queue.png" Pressed="*Resource*/images/playing_queue_pressed.png" Disabled="*Resource*/images/playing_queue_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="PlaylistButton" Size="48sp, 48sp" Position="88sp, 0sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/addtoplaylist.png" Pressed="*Resource*/images/addtoplaylist_pressed.png" Disabled="*Resource*/images/addtoplaylist_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="FavouriteButton" Size="48sp, 48sp" Position="176sp, 0sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/next.png" Pressed="*Resource*/images/next_pressed.png" Disabled="*Resource*/images/next_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="PlayAll" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/playall.png" Pressed="*Resource*/images/playall_pressed.png" Disabled="*Resource*/images/playall_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="PlaylistAdd" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/addtoplaylist.png" Pressed="*Resource*/images/addtoplaylist_pressed.png" Disabled="*Resource*/images/addtoplaylist_disabled.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="BackButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/back.png" Pressed="*Resource*/images/back_pressed.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="MoreButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/more.png" Pressed="*Resource*/images/more_pressed.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="SearchIcon" Size="40sp, 40sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="40sp, 40sp">
<ImageViewStyle.ResourceUrl>*Resource*/images/light/search_icon.png</ImageViewStyle.ResourceUrl>
</ImageViewStyle>
</c:ButtonStyle.Icon>
<c:ButtonStyle x:Key="ClearButton" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="48sp, 48sp">
<ImageViewStyle.ResourceUrl>*Resource*/images/light/cross_button.png</ImageViewStyle.ResourceUrl>
</ImageViewStyle>
</c:ButtonStyle.Icon>
<c:ButtonStyle x:Key="CheckBox" Size="36sp, 36sp" IsSelected="false" IsEnabled="false" BackgroundColor="Transparent">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="36sp, 36sp">
<ImageViewStyle.ResourceUrl>
<Selector x:TypeArguments="x:String" Disabled="*Resource*/images/light/check_off.png" DisabledSelected="*Resource*/images/light/check_on.png" />
</ImageViewStyle.ResourceUrl>
<c:ButtonStyle x:Key="SearchButton" Size="96sp, 60sp" IsSelectable="false" IsEnabled="true" BackgroundImage="*Resource*/images/light/search_button_bg.png">
<c:ButtonStyle.Icon>
- <ImageViewStyle>
+ <ImageViewStyle Size="40sp, 40sp">
<ImageViewStyle.ResourceUrl>*Resource*/images/light/search_icon.png</ImageViewStyle.ResourceUrl>
</ImageViewStyle>
</c:ButtonStyle.Icon>