-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26730.12
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TVMediaHub.Tizen", "TVMediaHub\TVMediaHub.Tizen\TVMediaHub.Tizen.csproj", "{2C968D00-4043-4202-9060-36C831AE6784}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {2C968D00-4043-4202-9060-36C831AE6784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2C968D00-4043-4202-9060-36C831AE6784}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2C968D00-4043-4202-9060-36C831AE6784}.Debug|x86.ActiveCfg = Debug|x86
- {2C968D00-4043-4202-9060-36C831AE6784}.Debug|x86.Build.0 = Debug|x86
- {2C968D00-4043-4202-9060-36C831AE6784}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2C968D00-4043-4202-9060-36C831AE6784}.Release|Any CPU.Build.0 = Release|Any CPU
- {2C968D00-4043-4202-9060-36C831AE6784}.Release|x86.ActiveCfg = Release|x86
- {2C968D00-4043-4202-9060-36C831AE6784}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {41764591-2375-476F-A664-7DA9F077C762}
- EndGlobalSection
-EndGlobal
+\r
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio Version 16\r
+VisualStudioVersion = 16.0.29806.167\r
+MinimumVisualStudioVersion = 10.0.40219.1\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TVMediaHub.Tizen", "TVMediaHub\TVMediaHub.Tizen\TVMediaHub.Tizen.csproj", "{2C968D00-4043-4202-9060-36C831AE6784}"\r
+EndProject\r
+Global\r
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+ Debug|Any CPU = Debug|Any CPU\r
+ Debug|x86 = Debug|x86\r
+ Release|Any CPU = Release|Any CPU\r
+ Release|x86 = Release|x86\r
+ EndGlobalSection\r
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+ {2C968D00-4043-4202-9060-36C831AE6784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+ {2C968D00-4043-4202-9060-36C831AE6784}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+ {2C968D00-4043-4202-9060-36C831AE6784}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+ {2C968D00-4043-4202-9060-36C831AE6784}.Debug|x86.Build.0 = Debug|Any CPU\r
+ {2C968D00-4043-4202-9060-36C831AE6784}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+ {2C968D00-4043-4202-9060-36C831AE6784}.Release|Any CPU.Build.0 = Release|Any CPU\r
+ {2C968D00-4043-4202-9060-36C831AE6784}.Release|x86.ActiveCfg = Release|Any CPU\r
+ {2C968D00-4043-4202-9060-36C831AE6784}.Release|x86.Build.0 = Release|Any CPU\r
+ EndGlobalSection\r
+ GlobalSection(SolutionProperties) = preSolution\r
+ HideSolutionNode = FALSE\r
+ EndGlobalSection\r
+ GlobalSection(ExtensibilityGlobals) = postSolution\r
+ SolutionGuid = {41764591-2375-476F-A664-7DA9F077C762}\r
+ EndGlobalSection\r
+EndGlobal\r
--- /dev/null
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.Linq;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// The ContextPopup class allows a contextual popup to be anchored at a view.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// ContextPopup popup = new ContextPopup
+ /// {
+ /// DirectionPriorities = new ContextPopupDirectionPriorities(ContextPopupDirection.Down, ContextPopupDirection.Right, ContextPopupDirection.Left, ContextPopupDirection.Up),
+ /// };
+ /// popup.Items.Add(new ContextPopupItem("Text only item"));
+ /// popup.Items.Add(new ContextPopupItem("Home icon", "home"));
+ /// popup.Items.Add(new ContextPopupItem("Chat", StandardIconResource.MenuChat.Name));
+ /// popup.SelectedIndexChanged += (s, e) =>
+ /// {
+ /// var ctxPopup = s as ContextPopup;
+ /// Debug.WriteLine("Item with index {0} selected", ctxPopup.SelectedIndex);
+ /// Debug.WriteLine("It has label: " + (ctxPopup.SelectedItem as ContextPopupItem).Label);
+ /// };
+ ///
+ /// Button btn = new Button
+ /// {
+ /// Text = "Toggle popup"
+ /// };
+ /// btn.Clicked += (s, e) =>
+ /// {
+ /// popup.Show(s as Button);
+ /// };
+ /// </code>
+ /// </example>
+ public class ContextPopup : BindableObject
+ {
+ IContextPopup _contextPopup;
+
+ ObservableCollection<ContextPopupItem> _items;
+
+ static ContextPopupDirectionPriorities _priorities =
+ new ContextPopupDirectionPriorities(ContextPopupDirection.Up, ContextPopupDirection.Left, ContextPopupDirection.Right, ContextPopupDirection.Down);
+
+ [Obsolete("OrientationProperty is obsolete as of version 2.3.5-r256-001. The orientation is always vertical.")]
+ public static readonly BindableProperty OrientationProperty = BindableProperty.Create(nameof(Orientation), typeof(ContextPopupOrientation), typeof(ContextPopup),
+ defaultValue: ContextPopupOrientation.Vertical);
+
+ /// <summary>
+ /// BindableProperty. Identifies the IsAutoHidingEnabled bindable property.
+ /// </summary>
+ public static readonly BindableProperty IsAutoHidingEnabledProperty = BindableProperty.Create(nameof(IsAutoHidingEnabled), typeof(bool), typeof(ContextPopup), defaultValue: true);
+
+ /// <summary>
+ /// BindableProperty. Identifies the DirectionPriorities bindable property.
+ /// </summary>
+ public static readonly BindableProperty DirectionPrioritiesProperty = BindableProperty.Create(nameof(DirectionPriorities), typeof(ContextPopupDirectionPriorities),
+ typeof(ContextPopup), defaultValue: _priorities);
+
+ /// <summary>
+ /// BindableProperty. Identifies the SelectedIndex bindable property.
+ /// </summary>
+ public static readonly BindableProperty SelectedIndexProperty = BindableProperty.Create(nameof(SelectedIndex), typeof(int), typeof(ContextPopup), defaultValue: -1,
+ propertyChanged: OnSelectedIndexChanged, coerceValue: CoerceSelectedIndex);
+
+ /// <summary>
+ /// BindableProperty. Identifies the SelectedItem bindable property.
+ /// </summary>
+ public static readonly BindableProperty SelectedItemProperty = BindableProperty.Create(nameof(SelectedItem), typeof(object), typeof(ContextPopup), null,
+ propertyChanged: OnSelectedItemChanged);
+
+ [Obsolete("ItemsSourceProperty is obsolete as of version 2.3.5-r256-001. Please use Items instead.")]
+ public static readonly BindableProperty ItemsSourceProperty = BindableProperty.Create(nameof(ItemsSource), typeof(IList), typeof(ContextPopup), default(IList));
+
+ /// <summary>
+ /// The constructor, which creates a new ContextPopup instance.
+ /// </summary>
+ public ContextPopup()
+ {
+ _contextPopup = DependencyService.Get<IContextPopup>(DependencyFetchTarget.NewInstance);
+
+ _contextPopup.Dismissed += (s, e) => Dismissed?.Invoke(this, EventArgs.Empty);
+ _contextPopup.ItemSelected += (s, e) => ItemSelected?.Invoke(this, EventArgs.Empty);
+
+ _items = new ObservableCollection<ContextPopupItem>();
+ _items.CollectionChanged += ItemsCollectionChanged;
+
+ SetBinding(IsAutoHidingEnabledProperty, new Binding(nameof(IsAutoHidingEnabled), mode: BindingMode.TwoWay, source: _contextPopup));
+ SetBinding(DirectionPrioritiesProperty, new Binding(nameof(DirectionPriorities), mode: BindingMode.TwoWay, source: _contextPopup));
+ SetBinding(SelectedItemProperty, new Binding(nameof(SelectedItem), mode: BindingMode.TwoWay, source: _contextPopup));
+ }
+
+ /// <summary>
+ /// Occurs when the ContextPopup is dismissed.
+ /// </summary>
+ public event EventHandler Dismissed;
+
+ /// <summary>
+ /// Occurs when the index of the selected ContextPopupItem changes.
+ /// </summary>
+ public event EventHandler SelectedIndexChanged;
+
+ /// <summary>
+ /// Occurs when a ContextPopupItem is selected.
+ /// </summary>
+ public event EventHandler ItemSelected;
+
+ [Obsolete("Orientation is obsolete as of version 2.3.5-r256-001. The orientation is always vertical.")]
+ public ContextPopupOrientation Orientation
+ {
+ get { return (ContextPopupOrientation)GetValue(OrientationProperty); }
+ set { SetValue(OrientationProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets whether ContextPopup should be hidden automatically or not when parent of ContextPopup is resized.
+ /// </summary>
+ /// <remarks>
+ /// Setting IsAutoHidingEnabled to false will not be dismissed automatically whenever such as mouse clicked its background area, language i s changed, and its parent geometry is updated(changed).
+ /// </remarks>
+ public bool IsAutoHidingEnabled
+ {
+ get { return (bool)GetValue(IsAutoHidingEnabledProperty); }
+ set { SetValue(IsAutoHidingEnabledProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets the direction priorities for the ContextPopup.<br>
+ /// The position of the ContextPopup depends on the available space.
+ /// Therefore, DirectionPriorities are used to specify desired first, second, third, and fourth priorities for positioning the ContextPopup.
+ /// </summary>
+ public ContextPopupDirectionPriorities DirectionPriorities
+ {
+ get { return (ContextPopupDirectionPriorities)GetValue(DirectionPrioritiesProperty); }
+ set { SetValue(DirectionPrioritiesProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets the index of the selected item of the ContextPopup.
+ /// It is -1 when no item is selected.
+ /// </summary>
+ public int SelectedIndex
+ {
+ get { return (int)GetValue(SelectedIndexProperty); }
+ set { SetValue(SelectedIndexProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets the selected item of the ContextPopup.
+ /// </summary>
+ public ContextPopupItem SelectedItem
+ {
+ get { return (ContextPopupItem)GetValue(SelectedItemProperty); }
+ set { SetValue(SelectedItemProperty, value); }
+ }
+
+ [Obsolete("ItemsSource is obsolete as of version 2.3.5-r256-001. Please use Items instead.")]
+ public IList ItemsSource
+ {
+ get { return (IList)GetValue(ItemsSourceProperty); }
+ set { SetValue(ItemsSourceProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets the list of items in the ContextPopup.
+ /// </summary>
+ public IList<ContextPopupItem> Items
+ {
+ get
+ {
+ return _items;
+ }
+ }
+
+ /// <summary>
+ /// Shows the ContextPopup. The ContextPopup is positioned at the horizontal and the vertical position of a specific anchor.
+ /// </summary>
+ /// <param name="anchor">The view to which the popup should be anchored.</param>
+ public void Show(View anchor)
+ {
+ Show(anchor, 0, 0);
+ }
+
+ /// <summary>
+ /// Shows the ContextPopup. The ContextPopup is positioned at the horizontal and the vertical position of a specific anchor with offsets.
+ /// </summary>
+ /// <param name="anchor">The view to which the popup should be anchored.</param>
+ /// <param name="xOffset">The horizontal offset from the anchor.</param>
+ /// <param name="yOffset">The vertical offset from the anchor.</param>
+ public void Show(View anchor, int xOffset, int yOffset)
+ {
+ _contextPopup.Show(anchor, xOffset, yOffset);
+ }
+
+ /// <summary>
+ /// Shows the ContextPopup. The ContextPopup is positioned at the horizontal and the vertical position of a specific anchor with offsets.
+ /// </summary>
+ /// <param name="anchor">The view to which the popup should be anchored.</param>
+ /// <param name="xOffset">The horizontal offset from the anchor.</param>
+ /// <param name="yOffset">The vertical offset from the anchor.</param>
+ public void Show(View anchor, double xOffset, double yOffset)
+ {
+ Show(anchor, (int)xOffset, (int)yOffset);
+ }
+
+ /// <summary>
+ /// Dismisses the ContextPopup.
+ /// </summary>
+ public void Dismiss()
+ {
+ _contextPopup.Dismiss();
+ }
+
+ /// <summary>
+ /// Gets the direction of the ContextPopup if it is shown.
+ /// This method returns false if it is not shown and the output argument is a default value.
+ /// </summary>
+ /// <param name="direction">The direction of the ContextPopup.</param>
+ /// <returns>true if the ContextPopup is shown, false otherwise.</returns>
+ public bool TryGetContextPopupDirection(out ContextPopupDirection direction)
+ {
+ direction = default(ContextPopupDirection);
+ return _contextPopup.TryGetContextPopupDirection(out direction);
+ }
+
+ void ItemsCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
+ {
+ switch (e.Action)
+ {
+ case NotifyCollectionChangedAction.Add:
+ AddItems(e);
+ break;
+
+ case NotifyCollectionChangedAction.Remove:
+ RemoveItems(e);
+ break;
+
+ default: // Move, replace, reset
+ ResetItems();
+ break;
+ }
+
+ SelectedIndex = SelectedIndex.Clamp(-1, Items.Count - 1);
+ UpdateSelectedItem();
+ }
+
+ void ResetItems()
+ {
+ _contextPopup.ClearItems();
+ }
+
+ void RemoveItems(NotifyCollectionChangedEventArgs e)
+ {
+ _contextPopup.RemoveItems(e.OldItems.OfType<ContextPopupItem>());
+ }
+
+ void AddItems(NotifyCollectionChangedEventArgs e)
+ {
+ _contextPopup.AddItems(e.NewItems.OfType<ContextPopupItem>());
+ }
+
+ static void OnSelectedIndexChanged(BindableObject bindable, object oldValue, object newValue)
+ {
+ var contextPopup = (ContextPopup)bindable;
+ contextPopup.UpdateSelectedItem();
+ contextPopup.SelectedIndexChanged?.Invoke(contextPopup, EventArgs.Empty);
+ }
+
+ static object CoerceSelectedIndex(BindableObject bindable, object value)
+ {
+ var contextPopup = (ContextPopup)bindable;
+ return contextPopup.Items == null ? -1 : ((int)value).Clamp(-1, contextPopup.Items.Count - 1);
+ }
+
+ void UpdateSelectedItem()
+ {
+ if (SelectedIndex == -1)
+ {
+ SelectedItem = null;
+ return;
+ }
+
+ SelectedItem = Items[SelectedIndex];
+ }
+
+ static void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue)
+ {
+ var contextPopup = (ContextPopup)bindable;
+ contextPopup.UpdateSelectedIndex(newValue);
+ }
+
+ void UpdateSelectedIndex(object selectedItem)
+ {
+ SelectedIndex = Items.IndexOf(selectedItem as ContextPopupItem);
+ }
+ }
+
+ internal static class NumericExtensions
+ {
+ public static int Clamp(this int self, int min, int max)
+ {
+ return Math.Min(max, Math.Max(self, min));
+ }
+ }
+}
--- /dev/null
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// Enumeration for the direction of a ContextPopup.
+ /// </summary>
+ public enum ContextPopupDirection
+ {
+ /// <summary>
+ /// The down ContextPopup direction.
+ /// </summary>
+ Down,
+
+ /// <summary>
+ /// The right ContextPopup direction.
+ /// </summary>
+ Right,
+
+ /// <summary>
+ /// The left ContextPopup direction.
+ /// </summary>
+ Left,
+
+ /// <summary>
+ /// The up ContextPopup direction.
+ /// </summary>
+ Up,
+ }
+}
\ No newline at end of file
--- /dev/null
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// The direction priorities of a ContextPopup.
+ /// </summary>
+ public struct ContextPopupDirectionPriorities
+ {
+ /// <summary>
+ /// Creates a ContextPopupDirectionPriorities structure.
+ /// </summary>
+ /// <param name="first">The first direction priority.</param>
+ /// <param name="second">The second direction priority.</param>
+ /// <param name="third">The third direction priority.</param>
+ /// <param name="fourth">The fourth direction priority.</param>
+ public ContextPopupDirectionPriorities(ContextPopupDirection first, ContextPopupDirection second, ContextPopupDirection third, ContextPopupDirection fourth)
+ {
+ First = first;
+ Second = second;
+ Third = third;
+ Fourth = fourth;
+ }
+
+ /// <summary>
+ /// Gets the first direction priority.
+ /// </summary>
+ public ContextPopupDirection First { get; private set; }
+
+ /// <summary>
+ /// Gets the second direction priority.
+ /// </summary>
+ public ContextPopupDirection Second { get; private set; }
+
+ /// <summary>
+ /// Gets the third direction priority.
+ /// </summary>
+ public ContextPopupDirection Third { get; private set; }
+
+ /// <summary>
+ /// Gets the fourth direction priority.
+ /// </summary>
+ public ContextPopupDirection Fourth { get; private set; }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using Xamarin.Forms.Platform.Tizen;\r
+using EContextPopup = ElmSharp.ContextPopup;
+using EContextPopupDirection = ElmSharp.ContextPopupDirection;
+using EContextPopupItem = ElmSharp.ContextPopupItem;
+using EIcon = ElmSharp.Icon;
+using TForms = Xamarin.Forms.Platform.Tizen.Forms;
+using XForms = Xamarin.Forms;
+using XFPlatformTizen = Xamarin.Forms.Platform.Tizen;
+
+[assembly: XForms.Dependency(typeof(Tizen.Xamarin.Forms.Extension.Renderer.ContextPopupImplementation))]
+namespace Tizen.Xamarin.Forms.Extension.Renderer
+{
+ internal class ContextPopupImplementation : IContextPopup, INotifyPropertyChanged, IDisposable
+ {
+ EContextPopup _popup;
+ IDictionary<ContextPopupItem, EContextPopupItem> _items;
+ bool _isAutoHidingEnabled = true;
+
+ ContextPopupDirectionPriorities _priorities =
+ new ContextPopupDirectionPriorities(ContextPopupDirection.Up, ContextPopupDirection.Left, ContextPopupDirection.Right, ContextPopupDirection.Down);
+
+ ContextPopupItem _selectedItem = null;
+
+ bool _isDisposed;
+
+ public ContextPopupImplementation()
+ {
+ _popup = new EContextPopup((TForms.Context as FormsApplication).MainWindow);
+
+ _popup.BackButtonPressed += (s, e) =>
+ {
+ _popup.Dismiss();
+ };
+
+ _popup.Dismissed += (s, e) =>
+ {
+ Dismissed?.Invoke(this, EventArgs.Empty);
+ };
+
+ _items = new Dictionary<ContextPopupItem, EContextPopupItem>();
+ }
+
+ ~ContextPopupImplementation()
+ {
+ Dispose(false);
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public event EventHandler ItemSelected;
+
+ public event EventHandler Dismissed;
+
+ public bool IsAutoHidingEnabled
+ {
+ get
+ {
+ return _isAutoHidingEnabled;
+ }
+
+ set
+ {
+ _isAutoHidingEnabled = value;
+ UpdateIsAutoHidingEnabled();
+ OnPropertyChanged();
+ }
+ }
+
+ public ContextPopupDirectionPriorities DirectionPriorities
+ {
+ get
+ {
+ return _priorities;
+ }
+
+ set
+ {
+ _priorities = value;
+ UpdateDirectionPriorities();
+ OnPropertyChanged();
+ }
+ }
+
+ public ContextPopupItem SelectedItem
+ {
+ get
+ {
+ return _selectedItem;
+ }
+
+ set
+ {
+ _selectedItem = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public void Dismiss()
+ {
+ _popup.Dismiss();
+ }
+
+ public void AddItems(IEnumerable<ContextPopupItem> items)
+ {
+ foreach (var item in items)
+ {
+ item.PropertyChanged += ContextPopupItemPropertyChanged;
+ AddItem(item);
+ }
+ }
+
+ public void RemoveItems(IEnumerable<ContextPopupItem> items)
+ {
+ foreach (var item in items)
+ {
+ item.PropertyChanged -= ContextPopupItemPropertyChanged;
+ if (_items.ContainsKey(item))
+ {
+ var nativeItem = _items[item];
+ nativeItem.Delete();
+ _items.Remove(item);
+ }
+ }
+ }
+
+ public void ClearItems()
+ {
+ foreach (var item in _items.Keys)
+ item.PropertyChanged -= ContextPopupItemPropertyChanged;
+
+ _items.Clear();
+ _popup.Clear();
+ }
+
+ public void Show(XForms.View anchor, int xAnchorOffset, int yAnchorOffset)
+ {
+ var geometry = XFPlatformTizen.Platform.GetRenderer(anchor).NativeView.Geometry;
+ _popup.Move(geometry.X + xAnchorOffset, geometry.Y + yAnchorOffset);
+ _popup.Show();
+ }
+
+ public bool TryGetContextPopupDirection(out ContextPopupDirection direction)
+ {
+ var nativeDirection = _popup.Direction;
+ if (nativeDirection != EContextPopupDirection.Unknown)
+ {
+ direction = (ContextPopupDirection)nativeDirection;
+ return true;
+ }
+ else
+ {
+ direction = default(ContextPopupDirection);
+ return false;
+ }
+ }
+
+ public void UpdateContextPopupItemLabel(ContextPopupItem item)
+ {
+ EContextPopupItem nativeItem = _items[item];
+ nativeItem.SetPartText("default", item.Label);
+ }
+
+ public void UpdateContextPopupItemIcon(ContextPopupItem item)
+ {
+ if(string.IsNullOrEmpty(item.Icon))
+ _items[item]?.SetPartContent("icon", null);
+ else
+ AppendOrModifyItemWithIcon(item);
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ protected virtual void Dispose(bool isDisposing)
+ {
+ if (_isDisposed)
+ return;
+
+ if (isDisposing)
+ {
+ if (_popup != null)
+ {
+ _popup.Unrealize();
+ _popup = null;
+ }
+ }
+
+ _isDisposed = true;
+ }
+
+ protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+
+ void ContextPopupItemPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ var item = sender as ContextPopupItem;
+
+ if (e.PropertyName == nameof(ContextPopupItem.Label))
+ {
+ // If the native item already has a label
+ UpdateContextPopupItemLabel(item);
+ }
+ else if (e.PropertyName == nameof(ContextPopupItem.Icon))
+ {
+ // If the native item already has an icon
+ UpdateContextPopupItemIcon(item);
+ }
+ }
+
+ void UpdateDirectionPriorities()
+ {
+ _popup.SetDirectionPriorty(
+ (EContextPopupDirection)_priorities.First,
+ (EContextPopupDirection)_priorities.Second,
+ (EContextPopupDirection)_priorities.Third,
+ (EContextPopupDirection)_priorities.Fourth);
+ }
+
+ void UpdateIsAutoHidingEnabled()
+ {
+ _popup.AutoHide = IsAutoHidingEnabled;
+ }
+
+ void AddItem(ContextPopupItem item)
+ {
+ if (_items.ContainsKey(item))
+ return;
+
+ EContextPopupItem nativeItem;
+ if (string.IsNullOrEmpty(item.Icon))
+ {
+ nativeItem = _popup.Append(item.Label);
+ }
+ else
+ {
+ nativeItem = AppendOrModifyItemWithIcon(item);
+ }
+
+ _items.Add(item, nativeItem);
+
+ nativeItem.Selected += (s, e) =>
+ {
+ SelectedItem = item; // This will invoke SelectedIndexChanged if the index has changed
+ ItemSelected?.Invoke(this, EventArgs.Empty);
+ };
+ }
+
+ EContextPopupItem AppendOrModifyItemWithIcon(ContextPopupItem item)
+ {
+ EContextPopupItem nativeItem = null;
+ EIcon icon = new EIcon(_popup);
+ icon.StandardIconName = item.Icon;
+ if (!string.IsNullOrEmpty(icon.StandardIconName))
+ {
+ if (!_items.ContainsKey(item))
+ nativeItem = _popup.Append(item.Label, icon);
+ else
+ _items[item].SetPartContent("icon", icon);
+ }
+ else
+ {
+ //Not a standard icon
+ XFPlatformTizen.Native.Image iconImage = new XFPlatformTizen.Native.Image(_popup);
+ var task = iconImage.LoadFromImageSourceAsync(item.Icon);
+ if (!_items.ContainsKey(item))
+ nativeItem = _popup.Append(item.Label, iconImage);
+ else
+ _items[item].SetPartContent("icon", iconImage);
+ }
+
+ return nativeItem;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// The class for the items in a ContextPopup.
+ /// Each item can have a label and an icon.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// new ContextPopupItem("Text only item");
+ /// new ContextPopupItem("Home icon", "home");
+ /// new ContextPopupItem("Car", "car.png");
+ /// new ContextPopupItem("Chat", StandardIconResource.MenuChat.Name);
+ /// </code>
+ /// </example>
+ public class ContextPopupItem : INotifyPropertyChanged
+ {
+ string _label;
+ FileImageSource _icon;
+
+ /// <summary>
+ /// Creates a ContextPopupItem with only a label.
+ /// </summary>
+ /// <param name="label">The label of the ContextPopupItem.</param>
+ public ContextPopupItem(string label)
+ {
+ _label = label;
+ }
+
+ /// <summary>
+ /// Creates a ContextPopupItem with a label and an icon. The icon may be an image or a standard icon.<br>
+ /// To create a ContextPopupItem with only an icon, set the label to an empty string.<br>
+ /// The available standard icons that can be used are specified in the StandardIconResource class.
+ /// The name property of the StandardIconResource class can be used to specify a standard icon.
+ /// </summary>
+ /// <param name="label">The label of the ContextPopupItem.</param>
+ /// <param name="icon">The icon of the ContextPopupItem.</param>
+ /// <code>
+ /// new ContextPopupItem("Text only item");
+ /// new ContextPopupItem("Home icon", "home");
+ /// new ContextPopupItem("Car", "car.png");
+ /// new ContextPopupItem("Chat", StandardIconResource.MenuChat.Name);
+ /// </code>
+ public ContextPopupItem(string label, FileImageSource icon)
+ {
+ if (label == null)
+ label = "";
+ _label = label;
+ _icon = icon;
+ }
+
+ /// <summary>
+ /// Occurs when the label or an icon of a ContextPopupItem is changed.
+ /// </summary>
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ /// <summary>
+ /// Gets or sets the label of a ContextPopupItem.
+ /// </summary>
+ public string Label
+ {
+ get
+ {
+ return _label;
+ }
+ set
+ {
+ if (value != _label)
+ {
+ _label = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the icon of a ContextPopupItem. The icon may be an image or a standard icon.<br>
+ /// The available standard icons that can be used are specified in the StandardIconResource class.
+ /// The name property of the StandardIconResource class can be used to specify a standard icon.
+ /// </summary>
+ /// <remarks>
+ /// Icon is only supported on the mobile profile.
+ /// Icon does not always work as expected on the TV profile.
+ /// </remarks>
+ public FileImageSource Icon
+ {
+ get
+ {
+ return _icon;
+ }
+ set
+ {
+ if (value != _icon)
+ {
+ _icon = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ /// <summary>
+ /// Called when a bindable property has changed.
+ /// </summary>
+ protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ [Obsolete("ContextPopupOrientation is obsolete as of version 2.3.5-r256-001. ContextPopup does not support orientation. The orientation is always vertical.")]
+ public enum ContextPopupOrientation
+ {
+ Horizontal,
+ Vertical,
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// The dialog widget displays its content with buttons and title.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// var dialog = new Dialog();
+ /// dialog.Title = "Dialog"
+ ///
+ /// var positive = new Button()
+ /// {
+ /// Text = "OK"
+ /// }
+ /// var negative = new Button()
+ /// {
+ /// Text = "Cancel"
+ /// }
+ /// negative.Clicked += (s,e)=>
+ /// {
+ /// dialog.Hide();
+ /// }
+ ///
+ /// dialog.Positive = positive;
+ /// dialog.Negative = negative;
+ ///
+ /// var label = new Label()
+ /// {
+ /// Text = "New Dialog"
+ /// }
+ ///
+ /// dialog.Content = label;
+ ///
+ /// dialog.Show();
+ ///
+ /// </code>
+ /// </example>
+ public class Dialog : BindableObject
+ {
+ /// <summary>
+ /// BindableProperty. Identifies the content bindable property.
+ /// </summary>
+ public static readonly BindableProperty ContentProperty = BindableProperty.Create(nameof(Content), typeof(View), typeof(Dialog), null);
+
+ /// <summary>
+ /// BindableProperty. Identifies the positive bindable property.
+ /// </summary>
+ public static readonly BindableProperty PositiveProperty = BindableProperty.Create(nameof(Positive), typeof(Button), typeof(Dialog), null);
+
+ /// <summary>
+ /// BindableProperty. Identifies the neutral bindable property.
+ /// </summary>
+ public static readonly BindableProperty NeutralProperty = BindableProperty.Create(nameof(Neutral), typeof(Button), typeof(Dialog), null);
+
+ /// <summary>
+ /// BindableProperty. Identifies the negative bindable property.
+ /// </summary>
+ public static readonly BindableProperty NegativeProperty = BindableProperty.Create(nameof(Negative), typeof(Button), typeof(Dialog), null);
+
+ /// <summary>
+ /// BindableProperty. Identifies the title bindable property.
+ /// </summary>
+ public static readonly BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(Dialog), null);
+
+ /// <summary>
+ /// BindableProperty. Identifies the subtitle bindable property.
+ /// </summary>
+ public static readonly BindableProperty SubtitleProperty = BindableProperty.Create(nameof(Subtitle), typeof(string), typeof(Dialog), null);
+
+ /// <summary>
+ /// BindableProperty. Identifies the HorizontalOption bindable property.
+ /// </summary>
+ public static readonly BindableProperty HorizontalOptionProperty = BindableProperty.Create(nameof(HorizontalOption), typeof(LayoutOptions), typeof(Dialog), LayoutOptions.Center);
+
+ /// <summary>
+ /// BindableProperty. Identifies the VerticalOption bindable property.
+ /// </summary>
+ public static readonly BindableProperty VerticalOptionProperty = BindableProperty.Create(nameof(VerticalOption), typeof(LayoutOptions), typeof(Dialog), LayoutOptions.End);
+
+ IDialog _dialog = null;
+
+ /// <summary>
+ /// Occurs when the dialog is hidden.
+ /// </summary>
+ public event EventHandler Hidden;
+
+ /// <summary>
+ /// Occurs when outside of the dialog is clicked.
+ /// </summary>
+ public event EventHandler OutsideClicked;
+
+ /// <summary>
+ /// Occurs when the dialog is shown on the display.
+ /// </summary>
+ public event EventHandler Shown;
+
+ /// <summary>
+ /// Occurs when the device's back button is pressed.
+ /// </summary>
+ public event EventHandler BackButtonPressed;
+
+ public Dialog()
+ {
+ _dialog = DependencyService.Get<IDialog>(DependencyFetchTarget.NewInstance);
+ if (_dialog == null)
+ {
+ throw new Exception("Object reference not set to an instance of a Dialog.");
+ }
+
+ _dialog.Hidden += (s, e) =>
+ {
+ Hidden?.Invoke(this, EventArgs.Empty);
+ };
+
+ _dialog.OutsideClicked += (s, e) =>
+ {
+ OutsideClicked?.Invoke(this, EventArgs.Empty);
+ };
+
+ _dialog.Shown += (s, e) =>
+ {
+ Shown?.Invoke(this, EventArgs.Empty);
+ };
+
+ _dialog.BackButtonPressed += (s, e) =>
+ {
+ BackButtonPressed?.Invoke(this, EventArgs.Empty);
+ };
+
+ SetBinding(ContentProperty, new Binding(nameof(Content), mode: BindingMode.OneWayToSource, source: _dialog));
+ SetBinding(PositiveProperty, new Binding(nameof(Positive), mode: BindingMode.OneWayToSource, source: _dialog));
+ SetBinding(NeutralProperty, new Binding(nameof(Neutral), mode: BindingMode.OneWayToSource, source: _dialog));
+ SetBinding(NegativeProperty, new Binding(nameof(Negative), mode: BindingMode.OneWayToSource, source: _dialog));
+ SetBinding(TitleProperty, new Binding(nameof(Title), mode: BindingMode.OneWayToSource, source: _dialog));
+ SetBinding(SubtitleProperty, new Binding(nameof(Subtitle), mode: BindingMode.OneWayToSource, source: _dialog));
+ SetBinding(HorizontalOptionProperty, new Binding(nameof(HorizontalOption), mode: BindingMode.OneWayToSource, source: _dialog));
+ SetBinding(VerticalOptionProperty, new Binding(nameof(VerticalOption), mode: BindingMode.OneWayToSource, source: _dialog));
+ }
+
+ /// <summary>
+ /// Gets or sets content view of the dialog.
+ /// </summary>
+ public View Content
+ {
+ get { return (View)GetValue(ContentProperty); }
+ set { SetValue(ContentProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets positive button of the dialog.
+ /// This button is on the left.
+ /// When used alone, it is variable in size (can increase to the size of dialog).
+ /// Dialog's all buttons style is bottom
+ /// </summary>
+ public Button Positive
+ {
+ get { return (Button)GetValue(PositiveProperty); }
+ set { SetValue(PositiveProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets neutral button of the dialog.
+ /// This button is at the center.
+ /// When used alone or used with positive, its size is half the size of the dialog and is on the right.
+ /// </summary>
+ public Button Neutral
+ {
+ get { return (Button)GetValue(NeutralProperty); }
+ set { SetValue(NeutralProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets negative button of the dialog.
+ /// This button is always on the right and is displayed at a fixed size.
+ /// </summary>
+ public Button Negative
+ {
+ get { return (Button)GetValue(NegativeProperty); }
+ set { SetValue(NegativeProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets title of the dialog.
+ /// </summary>
+ public string Title
+ {
+ get { return (string)GetValue(TitleProperty); }
+ set { SetValue(TitleProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets subtitle of the dialog.
+ /// When title property value is null, subtitle is not displayed.
+ /// </summary>
+ public string Subtitle
+ {
+ get { return (string)GetValue(SubtitleProperty); }
+ set { SetValue(SubtitleProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets the LayoutOptions that define how the dialog gets laid in a layout cycle.
+ /// The default is center.
+ /// </summary>
+ public LayoutOptions HorizontalOption
+ {
+ get { return (LayoutOptions)GetValue(HorizontalOptionProperty); }
+ set { SetValue(HorizontalOptionProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets the LayoutOptions that define how the dialog gets laid in a layout cycle.
+ /// The default is end.
+ /// </summary>
+ public LayoutOptions VerticalOption
+ {
+ get { return (LayoutOptions)GetValue(VerticalOptionProperty); }
+ set { SetValue(VerticalOptionProperty, value); }
+ }
+
+ /// <summary>
+ /// Shows the dialog.
+ /// </summary>
+ public void Show()
+ {
+ _dialog.Show();
+ }
+
+ /// <summary>
+ /// Hides the dialog.
+ /// </summary>
+ public void Hide()
+ {
+ _dialog.Hide();
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.Tizen;
+using TForms = Xamarin.Forms.Platform.Tizen.Forms;
+using EPopup = ElmSharp.Popup;
+using Tizen.Xamarin.Forms.Extension.Renderer;
+
+[assembly: Dependency(typeof(DialogImplementation))]
+
+namespace Tizen.Xamarin.Forms.Extension.Renderer
+{
+ class DialogImplementation : IDialog, IDisposable
+ {
+ EPopup _control;
+ View _content;
+ Button _positive;
+ Button _neutral;
+ Button _negative;
+ string _title;
+ string _subtitle;
+ StackLayout _contentView;
+ LayoutOptions _horizontalOption = LayoutOptions.Center;
+ LayoutOptions _verticalOption = LayoutOptions.End;
+
+ LayoutOptions _previousHorizontalOption = LayoutOptions.Center;
+
+ bool _isDisposed = false;
+
+ ElmSharp.Button _nativePositive;
+
+ ElmSharp.Button _nativeNeutral;
+ ElmSharp.Button _nativeNegative;
+ ElmSharp.EvasObject _nativeContent;
+
+ public event EventHandler Hidden;
+
+ public event EventHandler OutsideClicked;
+
+ public event EventHandler Shown;
+
+ public event EventHandler BackButtonPressed;
+
+ public DialogImplementation()
+ {
+ _control = new EPopup((TForms.Context as FormsApplication).MainWindow);
+
+ _control.ShowAnimationFinished += ShowAnimationFinishedHandler;
+ _control.Dismissed += DismissedHandler;
+ _control.OutsideClicked += OutsideClickedHandler;
+ _control.BackButtonPressed += BackButtonPressedHandler;
+
+ _contentView = new StackLayout();
+ }
+
+ ~DialogImplementation()
+ {
+ Dispose(false);
+ }
+
+ public View Content
+ {
+ get
+ {
+ return _content;
+ }
+ set
+ {
+ _content = value;
+ UpdateContent();
+ }
+ }
+
+ public Button Positive
+ {
+ get
+ {
+ return _positive;
+ }
+ set
+ {
+ _positive = value;
+ UpdatePositive();
+ }
+ }
+
+ public Button Neutral
+ {
+ get
+ {
+ return _neutral;
+ }
+ set
+ {
+ _neutral = value;
+ UpdateNeutral();
+ }
+ }
+
+ public Button Negative
+ {
+ get
+ {
+ return _negative;
+ }
+ set
+ {
+ _negative = value;
+ UpdateNegative();
+ }
+ }
+
+ public string Title
+ {
+ get
+ {
+ return _title;
+ }
+ set
+ {
+ _title = value;
+ UpdateTitle();
+ }
+ }
+
+ public string Subtitle
+ {
+ get
+ {
+ return _subtitle;
+ }
+ set
+ {
+ _subtitle = value;
+ UpdateSubtitle();
+ }
+ }
+
+ public LayoutOptions HorizontalOption
+ {
+ get
+ {
+ return _horizontalOption;
+ }
+ set
+ {
+ _horizontalOption = value;
+ UpdateHorizontalOption();
+ }
+ }
+
+ public LayoutOptions VerticalOption
+ {
+ get
+ {
+ return _verticalOption;
+ }
+ set
+ {
+ _verticalOption = value;
+ UpdateVerticalOption();
+ }
+ }
+
+ public void Show()
+ {
+ if (Application.Current.Platform == null)
+ {
+ throw new Exception("When the Application's Platform is null, can not show the Dialog.");
+ }
+ if (_contentView.Platform == null)
+ {
+ UpdateContent();
+ }
+ _control.Show();
+ }
+
+ public void Hide()
+ {
+ _control.Hide();
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (_isDisposed)
+ return;
+
+ if (disposing)
+ {
+ if (_nativePositive != null)
+ {
+ _nativePositive.Unrealize();
+ _nativePositive = null;
+ }
+ if (_nativeNeutral != null)
+ {
+ _nativeNeutral.Unrealize();
+ _nativeNeutral = null;
+ }
+ if (_nativeNegative != null)
+ {
+ _nativeNegative.Unrealize();
+ _nativeNegative = null;
+ }
+ if (_nativeContent != null)
+ {
+ _nativeContent.Unrealize();
+ _nativeContent = null;
+ }
+
+ if (_control != null)
+ {
+ _control.ShowAnimationFinished -= ShowAnimationFinishedHandler;
+ _control.Dismissed -= DismissedHandler;
+ _control.OutsideClicked -= OutsideClickedHandler;
+ _control.BackButtonPressed -= BackButtonPressedHandler;
+
+ _control.Unrealize();
+ _control = null;
+ }
+ }
+
+ _isDisposed = true;
+ }
+
+ void ShowAnimationFinishedHandler(object sender, EventArgs e)
+ {
+ _nativeContent?.MarkChanged();
+ Shown?.Invoke(this, EventArgs.Empty);
+ }
+
+ void DismissedHandler(object sender, EventArgs e)
+ {
+ Hidden?.Invoke(this, EventArgs.Empty);
+ }
+
+ void OutsideClickedHandler(object sender, EventArgs e)
+ {
+ OutsideClicked?.Invoke(this, EventArgs.Empty);
+ }
+
+ void BackButtonPressedHandler(object sender, EventArgs e)
+ {
+ BackButtonPressed?.Invoke(this, EventArgs.Empty);
+ }
+
+ void UpdateContent()
+ {
+ if (Application.Current.Platform == null)
+ return;
+
+ _contentView.Children.Clear();
+
+ if (Content != null)
+ {
+ _contentView.Children.Add(Content);
+
+ _contentView.Platform = Application.Current.Platform;
+
+ var renderer = Platform.GetOrCreateRenderer(_contentView);
+ (renderer as LayoutRenderer)?.RegisterOnLayoutUpdated();
+
+ var sizeRequest = _contentView.Measure((TForms.Context as FormsApplication).MainWindow.ScreenSize.Width, (TForms.Context as FormsApplication).MainWindow.ScreenSize.Height).Request.ToPixel();
+
+ _nativeContent = renderer.NativeView;
+ _nativeContent.MinimumHeight = sizeRequest.Height;
+
+ _control.SetPartContent("default", _nativeContent, true);
+ }
+ else
+ {
+ _control.SetPartContent("default", null, true);
+ }
+ }
+
+ void UpdatePositive()
+ {
+ _nativePositive?.Hide();
+
+ if (Positive != null)
+ {
+ _nativePositive = (ElmSharp.Button)Platform.GetOrCreateRenderer(Positive).NativeView;
+ _nativePositive.Style = "popup";
+ }
+ else
+ {
+ _nativePositive = null;
+ }
+
+ _control.SetPartContent("button1", _nativePositive, true);
+ }
+
+ void UpdateNeutral()
+ {
+ _nativeNeutral?.Hide();
+
+ if (Neutral != null)
+ {
+ _nativeNeutral = (ElmSharp.Button)Platform.GetOrCreateRenderer(Neutral).NativeView;
+ _nativeNeutral.Style = "popup";
+ }
+ else
+ {
+ _nativeNeutral = null;
+ }
+
+ _control.SetPartContent("button2", _nativeNeutral, true);
+ }
+
+ void UpdateNegative()
+ {
+ _nativeNegative?.Hide();
+
+ if (Negative != null)
+ {
+ _nativeNegative = (ElmSharp.Button)Platform.GetOrCreateRenderer(Negative).NativeView;
+ _nativeNegative.Style = "popup";
+ }
+ else
+ {
+ _nativeNegative = null;
+ }
+
+ _control.SetPartContent("button3", _nativeNegative, true);
+ }
+
+ void UpdateTitle()
+ {
+ _control.SetPartText("title,text", Title);
+ }
+
+ void UpdateSubtitle()
+ {
+ _control.SetPartText("subtitle,text", Subtitle);
+ }
+
+ void UpdateHorizontalOption()
+ {
+ switch (HorizontalOption.Alignment)
+ {
+ case LayoutAlignment.Start:
+ _control.AlignmentX = 0.0;
+ break;
+
+ case LayoutAlignment.Center:
+ _control.AlignmentX = 0.5;
+ break;
+
+ case LayoutAlignment.End:
+ _control.AlignmentX = 1.0;
+ break;
+
+ case LayoutAlignment.Fill:
+ _control.AlignmentX = -1;
+ break;
+ }
+ if (HorizontalOption.Alignment == LayoutAlignment.Fill || _previousHorizontalOption.Alignment == LayoutAlignment.Fill)
+ {
+ UpdateContent();
+ _previousHorizontalOption = HorizontalOption;
+ }
+ }
+
+ void UpdateVerticalOption()
+ {
+ switch (VerticalOption.Alignment)
+ {
+ case LayoutAlignment.Start:
+ _control.AlignmentY = 0.0;
+ break;
+
+ case LayoutAlignment.Center:
+ _control.AlignmentY = 0.5;
+ break;
+
+ case LayoutAlignment.End:
+ _control.AlignmentY = 1.0;
+ break;
+
+ case LayoutAlignment.Fill:
+ _control.AlignmentY = -1;
+ break;
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.Collections;
+using System.Collections.ObjectModel;
+using System.Collections.Specialized;
+using System.ComponentModel;
+using System.Linq;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// The DropdownList is a button like widget that pops up a list of items(automatically choosing the direction to display) that have a string label.
+ /// It is a convenient widget to avoid the need to do all the piecing together yourself.
+ /// It is intended for a small number of items in the DropdownList menu (no more than 8), though, it is capable of many more.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// var dropdownList = new DropdownList();
+ /// dropdownList.ItemSelected += (s, e) =>
+ /// {
+ /// Debug.WriteLine("e.Selected Item: " + e.SelectedItem);
+ /// };
+ ///
+ /// ObservableCollection<string> ItemsList = new ObservableCollection<string>()
+ /// {
+ /// "item5", "item6", "item7", "item8"
+ /// };
+ ///
+ /// dropdownList.ItemsSource = ItemsList;
+ /// </code>
+ /// </example>
+ public class DropdownList : View
+ {
+ /// <summary>
+ /// BindableProperty. Identifies the SelectedItem bindable property.
+ /// </summary>
+ public static readonly BindableProperty SelectedItemProperty = BindableProperty.Create("SelectedItem", typeof(object), typeof(DropdownList), default(object), BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
+
+ [Obsolete("IsHorizontalProperty is obsolete as of version 2.3.5-r256. The orientation is always vertical.")]
+ public static readonly BindableProperty IsHorizontalProperty = BindableProperty.Create("IsHorizontal", typeof(bool), typeof(DropdownList), default(bool));
+
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public static readonly BindablePropertyKey IsExpandedPropertyKey = BindableProperty.CreateReadOnly("IsExpanded", typeof(bool), typeof(DropdownList), default(bool), propertyChanged: OnIsExpandedPropertyChanged);
+
+ /// <summary>
+ /// BindableProperty. Identifies the IsExpanded bindable property.
+ /// </summary>
+ public static readonly BindableProperty IsExpandedProperty = IsExpandedPropertyKey.BindableProperty;
+
+ /// <summary>
+ /// BindableProperty. Identifies the ItemsSource bindable property.
+ /// </summary>
+ public static readonly BindableProperty ItemsSourceProperty = BindableProperty.Create("ItemsSource", typeof(IEnumerable), typeof(DropdownList), default(IEnumerable), propertyChanged: OnItemsSourceChanged);
+
+ /// <summary>
+ /// BindableProperty. Identifies the DisplayMemberPath bindable property.
+ /// </summary>
+ public static readonly BindableProperty DisplayMemberPathProperty = BindableProperty.Create("DisplayMemberPath", typeof(string), typeof(DropdownList), default(string));
+
+ /// <summary>
+ /// Occurs when an item in the DropdownList is selected.
+ /// SelectedItemChangedEventArgs will also have the selected item.
+ /// </summary>
+ public event EventHandler<SelectedItemChangedEventArgs> ItemSelected;
+
+ /// <summary>
+ /// Occurs when the DropdownList is expanded.
+ /// </summary>
+ public event EventHandler Expanded;
+
+ /// <summary>
+ /// Occurs when the DropdownList is collapsed.
+ /// </summary>
+ public event EventHandler Collapsed;
+
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public event EventHandler<ExpandRequestArgs> ExpandChangeRequested;
+
+ /// <summary>
+ /// Raised when one or more items of ItemsSource is changed.
+ /// </summary>
+ public event NotifyCollectionChangedEventHandler CollectionChanged;
+
+ /// <summary>
+ /// Gets or sets the currently selected item from the DropdownList.ItemsSource.
+ /// </summary>
+ public object SelectedItem
+ {
+ get { return (object)GetValue(SelectedItemProperty); }
+ set { SetValue(SelectedItemProperty, value); }
+ }
+
+ [Obsolete("IsHorizontal is obsolete as of version 2.3.5-r256. The orientation is always vertical.")]
+ public bool IsHorizontal
+ {
+ get { return (bool)GetValue(IsHorizontalProperty); }
+ set { SetValue(IsHorizontalProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets the flag of whether the dropdownlist is expanded.
+ /// </summary>
+ public bool IsExpanded
+ {
+ get { return (bool)GetValue(IsExpandedProperty); }
+ }
+
+ /// <summary>
+ /// Gets or sets the source of items to template and display.
+ /// </summary>
+ public IEnumerable ItemsSource
+ {
+ get { return (IEnumerable)GetValue(ItemsSourceProperty); }
+ set { SetValue(ItemsSourceProperty, value); }
+ }
+
+ /// <summary>
+ /// Gets or sets a member path to a value on the ItemsSource.
+ /// </summary>
+ public string DisplayMemberPath
+ {
+ get { return (string)GetValue(DisplayMemberPathProperty); }
+ set { SetValue(DisplayMemberPathProperty, value); }
+ }
+
+ /// <summary>
+ /// Expands the DropdownList popup from code.
+ /// </summary>
+ public void Expand()
+ {
+ if (!IsExpanded)
+ {
+ var arg = new ExpandRequestArgs { IsExpand = true };
+ ExpandChangeRequested?.Invoke(this, arg);
+ }
+ }
+
+ /// <summary>
+ /// Collapses the DropdownList popup from code.
+ /// </summary>
+ public void Collapse()
+ {
+ if (IsExpanded)
+ {
+ var arg = new ExpandRequestArgs();
+ ExpandChangeRequested?.Invoke(this, arg);
+ }
+ }
+
+ static void OnItemsSourceChanged(BindableObject bindable, object oldValue, object newValue)
+ {
+ (bindable as DropdownList).OnItemsSourceChanged(oldValue as INotifyCollectionChanged, newValue as INotifyCollectionChanged);
+ }
+
+ void OnItemsSourceChanged(INotifyCollectionChanged oldValue, INotifyCollectionChanged newValue)
+ {
+ if (oldValue != null)
+ {
+ oldValue.CollectionChanged -= OnNotifyCollectionChanged;
+ }
+ if (newValue != null)
+ {
+ newValue.CollectionChanged += OnNotifyCollectionChanged;
+ }
+ }
+
+ void OnNotifyCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
+ {
+ CollectionChanged?.Invoke(this, e);
+ }
+
+ static void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue)
+ {
+ var dropdownList = (DropdownList)bindable;
+ dropdownList.ItemSelected?.Invoke(bindable, new SelectedItemChangedEventArgs(newValue));
+ }
+
+ static void OnIsExpandedPropertyChanged(BindableObject bindable, object oldvalue, object newvalue)
+ {
+ var element = bindable as DropdownList;
+ if (element != null)
+ {
+ var isExpanded = (bool)newvalue;
+ if (isExpanded)
+ {
+ element.Expanded?.Invoke(element, EventArgs.Empty);
+ }
+ else
+ {
+ element.Collapsed?.Invoke(element, EventArgs.Empty);
+ }
+ }
+ }
+
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public class ExpandRequestArgs : EventArgs
+ {
+ public bool IsExpand { get; set; }
+ }
+ }
+}
--- /dev/null
+using ElmSharp;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.ComponentModel;
+using Tizen.Xamarin.Forms.Extension;
+using Tizen.Xamarin.Forms.Extension.Renderer;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.Tizen;
+using TForms = Xamarin.Forms.Platform.Tizen.Forms;
+
+[assembly: ExportRenderer(typeof(DropdownList), typeof(DropdownListRenderer))]
+
+namespace Tizen.Xamarin.Forms.Extension.Renderer
+{
+ public class DropdownListRenderer : ViewRenderer<DropdownList, Hoversel>
+ {
+ class DropdownItem : BindableObject
+ {
+ public static readonly BindableProperty TextProperty = BindableProperty.Create("Text", typeof(string), typeof(DropdownItem), default(string));
+
+ public string Text
+ {
+ get { return (string)GetValue(TextProperty); }
+ set { SetValue(TextProperty, value); }
+ }
+
+ public HoverselItem HoverselItem { get; set; }
+ public object Data { get; set; }
+ }
+
+ Dictionary<HoverselItem, DropdownItem> _items = new Dictionary<HoverselItem, DropdownItem>();
+ Dictionary<object, DropdownItem> _objectMap = new Dictionary<object, DropdownItem>();
+ object _selectedItem = null;
+
+ protected override void OnElementChanged(ElementChangedEventArgs<DropdownList> e)
+ {
+ if (Control == null)
+ {
+ var dropdownList = new Hoversel((TForms.Context as FormsApplication).MainWindow);
+ SetNativeControl(dropdownList);
+ Control.ItemSelected += OnHoverselItemSelected;
+ Control.Dismissed += OnDismissed;
+ Control.Expanded += OnExpanded;
+ }
+ if (e.OldElement != null)
+ {
+ e.OldElement.ExpandChangeRequested -= OnExpandChangeRequested;
+ e.OldElement.CollectionChanged -= OnCollectionChanged;
+ ClearItems();
+ }
+ if (e.NewElement != null)
+ {
+ e.NewElement.ExpandChangeRequested += OnExpandChangeRequested;
+ e.NewElement.CollectionChanged += OnCollectionChanged;
+ Control.HoverParent = (TForms.Context as FormsApplication).MainWindow;
+
+ AddItems(e.NewElement.ItemsSource);
+ UpdateIsExpanded();
+ UpdateSelectedItem();
+ }
+ base.OnElementChanged(e);
+ }
+
+ void OnHoverselItemSelected(object sender, HoverselItemEventArgs e)
+ {
+ Element.SelectedItem = GetItem(e.Item)?.Data;
+ }
+
+ void OnExpanded(object sender, EventArgs e)
+ {
+ Element?.SetValue(DropdownList.IsExpandedPropertyKey, true);
+ }
+
+ void OnDismissed(object sender, EventArgs e)
+ {
+ Element?.SetValue(DropdownList.IsExpandedPropertyKey, false);
+ }
+
+ protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == DropdownList.IsExpandedProperty.PropertyName)
+ {
+ UpdateIsExpanded();
+ }
+ else if (e.PropertyName == DropdownList.DisplayMemberPathProperty.PropertyName)
+ {
+ UpdateDisplayMemberPath();
+ }
+ else if (e.PropertyName == DropdownList.SelectedItemProperty.PropertyName)
+ {
+ UpdateSelectedItem();
+ }
+ else if (e.PropertyName == DropdownList.ItemsSourceProperty.PropertyName)
+ {
+ UpdateItemSource();
+ }
+ base.OnElementPropertyChanged(sender, e);
+ }
+
+ void UpdateItemSource()
+ {
+ ClearItems();
+ AddItems(Element.ItemsSource);
+ }
+
+ void UpdateIsExpanded()
+ {
+ if (Element.IsExpanded)
+ {
+ Control.HoverBegin();
+ }
+ else
+ {
+ Control.HoverEnd();
+ }
+ }
+
+ void UpdateSelectedItem()
+ {
+ _selectedItem = Element.SelectedItem;
+ DropdownItem item = GetItem(Element.SelectedItem);
+ if (item == null)
+ {
+ Element.SelectedItem = null;
+ Control.Text = string.Empty;
+ }
+ else
+ {
+ Control.Text = item.Text;
+ }
+ }
+
+ void OnExpandChangeRequested(object sender, DropdownList.ExpandRequestArgs e)
+ {
+ if (e.IsExpand)
+ {
+ Control.HoverBegin();
+ }
+ else
+ {
+ Control.HoverEnd();
+ }
+ }
+
+ void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
+ {
+ if (e.NewItems != null)
+ {
+ AddItems(e.NewItems);
+ }
+ if (e.OldItems != null)
+ {
+ RemoveItems(e.OldItems);
+ }
+ if (e.Action == NotifyCollectionChangedAction.Reset)
+ {
+ ClearItems();
+ }
+ }
+
+ void AddItems(IEnumerable items)
+ {
+ foreach (object item in items)
+ {
+ DropdownItem dropdownItem = new DropdownItem()
+ {
+ Data = item,
+ };
+ if (!string.IsNullOrEmpty(Element.DisplayMemberPath))
+ {
+ dropdownItem.SetBinding(DropdownItem.TextProperty, new Binding(Element.DisplayMemberPath));
+ }
+ else
+ {
+ dropdownItem.Text = item.ToString();
+ }
+ dropdownItem.BindingContext = item;
+ dropdownItem.HoverselItem = Control.AddItem(dropdownItem.Text);
+ dropdownItem.PropertyChanged += OnDropdownItemTextChanged;
+ _items[dropdownItem.HoverselItem] = dropdownItem;
+ _objectMap[item] = dropdownItem;
+ }
+ }
+
+ void OnDropdownItemTextChanged(object sender, PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == DropdownItem.TextProperty.PropertyName)
+ {
+ DropdownItem item = (DropdownItem)sender;
+ item.HoverselItem?.SetPartText("default", item.Text);
+ if (_selectedItem == item.Data)
+ {
+ Control.Text = item.Text;
+ }
+ }
+ }
+
+ void UpdateDisplayMemberPath()
+ {
+ foreach (var item in _items.Values)
+ {
+ if (!string.IsNullOrEmpty(Element.DisplayMemberPath))
+ {
+ item.SetBinding(DropdownItem.TextProperty, new Binding(Element.DisplayMemberPath));
+ }
+ else
+ {
+ item.Text = item.Data.ToString();
+ }
+ }
+ UpdateSelectedItem();
+ }
+
+ void RemoveItems(IEnumerable items)
+ {
+ foreach (object item in items)
+ {
+ var dropdownItem = GetItem(item);
+ if (Element.SelectedItem == dropdownItem.Data)
+ {
+ Element.SelectedItem = null;
+ }
+ dropdownItem.PropertyChanged -= OnDropdownItemTextChanged;
+ _items.Remove(dropdownItem.HoverselItem);
+ _objectMap.Remove(item);
+ dropdownItem.HoverselItem.Delete();
+ }
+ }
+
+ void ClearItems()
+ {
+ Control.Clear();
+ _items.Clear();
+ _objectMap.Clear();
+
+ Element.SelectedItem = null;
+ }
+
+ DropdownItem GetItem(object obj)
+ {
+ if (obj == null)
+ return null;
+ DropdownItem item = null;
+ _objectMap.TryGetValue(obj, out item);
+ return item;
+ }
+
+ DropdownItem GetItem(HoverselItem selItem)
+ {
+ if (selItem == null)
+ return null;
+ DropdownItem item = null;
+ _items.TryGetValue(selItem, out item);
+ return item;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using System.Collections.Generic;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ internal interface IContextPopup
+ {
+ event EventHandler ItemSelected;
+
+ event EventHandler Dismissed;
+
+ ContextPopupItem SelectedItem { get; set; }
+
+ ContextPopupDirectionPriorities DirectionPriorities { get; set; }
+
+ bool IsAutoHidingEnabled { get; set; }
+
+ void AddItems(IEnumerable<ContextPopupItem> items);
+
+ void RemoveItems(IEnumerable<ContextPopupItem> items);
+
+ void ClearItems();
+
+ void Show(View anchor, int xAnchorOffset, int yAnchorOffset);
+
+ void Dismiss();
+
+ bool TryGetContextPopupDirection(out ContextPopupDirection direction);
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ internal interface IDialog
+ {
+ event EventHandler Hidden;
+
+ event EventHandler OutsideClicked;
+
+ event EventHandler Shown;
+
+ event EventHandler BackButtonPressed;
+
+ View Content { get; set; }
+
+ Button Positive { get; set; }
+
+ Button Neutral { get; set; }
+
+ Button Negative { get; set; }
+
+ string Title { get; set; }
+
+ string Subtitle { get; set; }
+
+ LayoutOptions HorizontalOption { get; set; }
+
+ LayoutOptions VerticalOption { get; set; }
+
+ void Show();
+
+ void Hide();
+ }
+}
\ No newline at end of file
--- /dev/null
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// This interface is for internal use by the platform renderers.
+ /// </summary>
+ public interface IMediaViewController : IViewController
+ {
+ /// <summary>
+ /// For internal use by the platform renderers.
+ /// </summary>
+ void SendNativeViewCreated();
+
+ }
+}
--- /dev/null
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// This interface, which defines the ability to display simple text, is used internally.
+ /// </summary>
+ internal interface IToast
+ {
+ /// <summary>
+ /// Gets or sets the duration.
+ /// </summary>
+ int Duration { get; set; }
+
+ /// <summary>
+ /// Gets or sets the text.
+ /// </summary>
+ string Text { get; set; }
+
+ /// <summary>
+ /// Shows the view for the specified duration.
+ /// </summary>
+ void Show();
+
+ /// <summary>
+ /// Dismisses the specified view.
+ /// </summary>
+ void Dismiss();
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// The MediaView class provides a view of media that is being played by the player or the camera.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// MediaView mediaView = new MediaView();
+ /// Tizen.Multimedia.Camera camera = new Tizen.Multimedia.Camera(Tizen.Multimedia.CameraDevice.Rear);
+ /// camera.SetDisplay(Tizen.Multimedia.CameraDisplayType.Evas, (Tizen.Multimedia.MediaView) mediaView.NativeView);
+ /// </code>
+ /// </example>
+ public class MediaView : View, IMediaViewController
+ {
+ internal static readonly BindablePropertyKey NativeViewPropertyKey = BindableProperty.CreateReadOnly("NativeView", typeof(object), typeof(MediaView), default(object));
+
+ /// <summary>
+ /// BindableProperty. Identifies the NativeView bindable property.
+ /// </summary>
+ public static readonly BindableProperty NativeViewProperty = NativeViewPropertyKey.BindableProperty;
+
+ /// <summary>
+ /// NativeView allows application developers to display the video output on screen.
+ /// </summary>
+ public object NativeView
+ {
+ get { return GetValue(NativeViewProperty); }
+ internal set { SetValue(NativeViewPropertyKey, value); }
+ }
+
+ /// <summary>
+ /// Occurs when the NativeView is created.
+ /// </summary>
+ public event EventHandler NativeViewCreated;
+
+ void IMediaViewController.SendNativeViewCreated()
+ {
+ NativeViewCreated?.Invoke(this, EventArgs.Empty);
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System.Linq;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// Enumeration for the slide mode of a text.
+ /// </summary>
+ public enum TextSlideMode
+ {
+ /// <summary>
+ /// The text appears on the left of the view and slides to the right to show the overflow. When all of the text has been shown, the position is reset.
+ /// </summary>
+ Short = 1,
+
+ /// <summary>
+ /// The entire text appears from the right of the screen and slides until it disappears to the left of the screen(reappearing on the right again).
+ /// </summary>
+ Long,
+
+ /// <summary>
+ /// The text appears on the left of the view and slides to the right to show the overflow. When all of the text has been shown, the animation reverses, moving the text to the left.
+ /// </summary>
+ Bounce
+ }
+
+ /// <summary>
+ /// An effect that can make text sliding.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// new Label
+ /// {
+ /// Text = "Test Slide Text",
+ /// LineBreakMode =
+ /// }
+ /// </code>
+ /// </example>
+ public static class TextSlideEffect
+ {
+ /// <summary>
+ /// BindableProperty. Implements the attached property that represents the style about how the text slides.
+ /// </summary>
+ public static readonly BindableProperty ModeProperty = BindableProperty.CreateAttached("Mode", typeof(TextSlideMode), typeof(TextSlideEffect), TextSlideMode.Long);
+
+ /// <summary>
+ /// BindableProperty. Implements the attached property that represents the slide mode.
+ /// </summary>
+ public static readonly BindableProperty IsAlwaysOnProperty = BindableProperty.CreateAttached("IsAlwaysOn", typeof(bool), typeof(TextSlideEffect), false);
+
+ /// <summary>
+ /// BindableProperty. Implements the attached property that represents the slide duration.
+ /// </summary>
+ public static readonly BindableProperty DurationProperty = BindableProperty.CreateAttached("Duration", typeof(int), typeof(TextSlideEffect), 3000);
+
+ /// <summary>
+ /// BindableProperty. Implements the attached property that represents the style when the text slides.
+ /// </summary>
+ public static readonly BindableProperty IsTextSlidingProperty = BindableProperty.CreateAttached("IsTextSliding", typeof(bool), typeof(TextSlideEffect), false, propertyChanged: OnIsTextSlidingChanged);
+
+ /// <summary>
+ /// Gets the TextSlideMode of the bindable element.
+ /// </summary>
+ public static TextSlideMode GetMode(BindableObject view)
+ {
+ return (TextSlideMode)view.GetValue(ModeProperty);
+ }
+
+ /// <summary>
+ /// Sets the TextSlideMode of the bindable element.
+ /// </summary>
+ public static void SetMode(BindableObject view, TextSlideMode value)
+ {
+ view.SetValue(ModeProperty, value);
+ }
+
+ /// <summary>
+ /// Gets the IsAlwaysOn of the bindable element.
+ /// </summary>
+ public static bool GetIsAlwaysOn(BindableObject view)
+ {
+ return (bool)view.GetValue(IsAlwaysOnProperty);
+ }
+
+ /// <summary>
+ /// Sets the IsAlwaysOn of the bindable element.
+ /// </summary>
+ /// <remarks>
+ /// When the value is set to false, text will only slide when the length of the text is longer a View.
+ /// Otherwise, the text will always slide.
+ /// </remarks>
+ public static void SetIsAlwaysOn(BindableObject view, bool value)
+ {
+ view.SetValue(IsAlwaysOnProperty, value);
+ }
+
+ /// <summary>
+ /// Gets the Duration of the bindable element.
+ /// </summary>
+ public static int GetDuration(BindableObject view)
+ {
+ return (int)view.GetValue(DurationProperty);
+ }
+
+ /// <summary>
+ /// Sets the Duration(in milliseconds) of the bindable element.
+ /// </summary>
+ public static void SetDuration(BindableObject view, int value)
+ {
+ view.SetValue(DurationProperty, value);
+ }
+
+ /// <summary>
+ /// Gets the sliding status of the bindable element.
+ /// </summary>
+ public static bool GetIsTextSliding(BindableObject view)
+ {
+ return (bool)view.GetValue(IsTextSlidingProperty);
+ }
+
+ /// <summary>
+ /// Sets the sliding status of the bindable element.
+ /// </summary>
+ /// <remarks>
+ /// This method only works properly when the text is not wrapped.
+ /// For example, if the Label.LineBreakMode is set to any options other than NoWrap,
+ /// the Text will not be sliding.
+ /// </remarks>
+ /// <seealso cref="SetIsAlwaysOn(BindableObject, bool)"/>
+ public static void SetIsTextSliding(BindableObject view, bool value)
+ {
+ view.SetValue(IsTextSlidingProperty, value);
+ }
+
+ static void OnIsTextSlidingChanged(BindableObject bindable, object oldValue, object newValue)
+ {
+ var label = bindable as Label;
+ if (label == null)
+ return;
+
+ bool isEnable = (bool)newValue;
+ if (isEnable)
+ {
+ label.Effects.Add(new LabelSlideEffect());
+ }
+ else
+ {
+ var toRemove = label.Effects.FirstOrDefault(e => e is LabelSlideEffect);
+ if (toRemove != null)
+ label.Effects.Remove(toRemove);
+ }
+ }
+
+ class LabelSlideEffect : RoutingEffect
+ {
+ public LabelSlideEffect() : base("Tizen.LabelSlideEffect")
+ {
+ }
+ }
+ }
+}
--- /dev/null
+namespace Tizen.Xamarin.Forms.Extension.Renderer
+{
+ public static class TizenFormsExtension
+ {
+ public static bool IsInitialized { get; private set; }
+
+ public static void Init()
+ {
+ if (IsInitialized)
+ return;
+
+ IsInitialized = true;
+ }
+ }
+}
--- /dev/null
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// The Toast class provides properties that show simple types of messages.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// Toast.DisplayText("Hello World", 3000)
+ /// </code>
+ /// </example>
+ public sealed class Toast
+ {
+ /// <summary>
+ /// It shows the simplest form of the message.
+ /// </summary>
+ /// <param name="text">The body text of the toast.</param>
+ /// <param name="duration">How long to display the text in milliseconds.</param>
+ public static void DisplayText(string text, int duration = 3000)
+ {
+ new ToastProxy
+ {
+ Text = text,
+ Duration = duration,
+ }.Show();
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using Tizen.Xamarin.Forms.Extension.Renderer;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.Tizen;\r
+using EPopup = ElmSharp.Popup;
+using TForms = Xamarin.Forms.Platform.Tizen.Forms;
+
+[assembly: Dependency(typeof(ToastImplementation))]
+
+namespace Tizen.Xamarin.Forms.Extension.Renderer
+{
+ internal class ToastImplementation : IToast, IDisposable
+ {
+ static readonly string DefaultStyle = "toast";
+ static readonly string DefaultPart = "default";
+
+ int _duration = 3000;
+ string _text = string.Empty;
+ EPopup _control = null;
+ bool _isDisposed = false;
+
+ public int Duration
+ {
+ get
+ {
+ return _duration;
+ }
+ set
+ {
+ _duration = value;
+ UpdateDuration();
+ }
+ }
+
+ public string Text
+ {
+ get
+ {
+ return _text;
+ }
+ set
+ {
+ _text = value;
+ UpdateText();
+ }
+ }
+
+ public ToastImplementation()
+ {
+ _control = new EPopup((TForms.Context as FormsApplication).MainWindow)
+ {
+ Style = DefaultStyle,
+ AllowEvents = true,
+ };
+
+ UpdateText();
+ UpdateDuration();
+ }
+
+ ~ToastImplementation()
+ {
+ Dispose(false);
+ }
+
+ public void Show()
+ {
+ _control.Show();
+ }
+
+ public void Dismiss()
+ {
+ _control.Dismiss();
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ protected virtual void Dispose(bool isDisposing)
+ {
+ if (_isDisposed)
+ return;
+
+ if (isDisposing)
+ {
+ if (_control != null)
+ {
+ _control.Unrealize();
+ _control = null;
+ }
+ }
+
+ _isDisposed = true;
+ }
+
+ void UpdateDuration()
+ {
+ _control.Timeout = Duration / 1000.0;
+ }
+
+ void UpdateText()
+ {
+ _control.SetPartText(DefaultPart, Text);
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+using System;
+using Xamarin.Forms;
+
+namespace Tizen.Xamarin.Forms.Extension
+{
+ /// <summary>
+ /// This class is for the internal use by toast.
+ /// </summary>
+ internal class ToastProxy : IToast
+ {
+ IToast _toastProxy = null;
+
+ public ToastProxy()
+ {
+ _toastProxy = DependencyService.Get<IToast>(DependencyFetchTarget.NewInstance);
+
+ if (_toastProxy == null)
+ throw new Exception("RealObject is null, Internal instance via DependecyService was not created.");
+ }
+
+ public int Duration
+ {
+ get
+ {
+ return _toastProxy.Duration;
+ }
+
+ set
+ {
+ _toastProxy.Duration = value;
+ }
+ }
+
+ public string Text
+ {
+ get
+ {
+ return _toastProxy.Text;
+ }
+
+ set
+ {
+ _toastProxy.Text = value;
+ }
+ }
+
+ public void Dismiss()
+ {
+ _toastProxy.Dismiss();
+ }
+
+ public void Show()
+ {
+ _toastProxy.Show();
+ }
+ }
+}
\ No newline at end of file
break;
case SortOption.Genre:
- if (lastGroupItem == null || lastGroupItem.Title != mediaInformationEx.MediaContentInformation.Category)
+ if (lastGroupItem == null || lastGroupItem.Title != mediaInformationEx.MediaContentInformation.Title)
{
newGroupFlag = true;
- newTitle = mediaInformationEx.MediaContentInformation.Category;
+ newTitle = mediaInformationEx.MediaContentInformation.Title;
}
break;
-<Project>
- <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
- <!-- Setting Tizen Extension Path -->
- <PropertyGroup Label="Globals">
- <TizenProjectExtensionsPath>$(MSBuildExtensionsPath)\Tizen\VisualStudio\</TizenProjectExtensionsPath>
- <Platforms>AnyCPU;x86</Platforms>
- </PropertyGroup>
-
- <!-- Import Tizen property in Tizen.NET SDK -->
- <Import Project="$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props" Condition="Exists('$(TizenProjectExtensionsPath)Tizen.NET.ProjectType.props')" />
-
- <!-- Property Group for .NET Core Project -->
+<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
- <TargetFramework>tizen40</TargetFramework>
+ <TargetFramework>tizen60</TargetFramework>
+ <LangVersion>8.0</LangVersion>
+ <TargetFrameworkIdentifier>Tizen</TargetFrameworkIdentifier>
</PropertyGroup>
<!-- Property Group for Tizen Project -->
- <PropertyGroup>
- <TizenCreateTpkOnBuild>true</TizenCreateTpkOnBuild>
- <PackageTargetFallback>$(PackageTargetFallback);portable-net45+wp80+win81+wpa81</PackageTargetFallback>
- </PropertyGroup>
-
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>portable</DebugType>
</PropertyGroup>
-
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
- <DebugType>portable</DebugType>
- </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>None</DebugType>
</PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
- <DebugType>None</DebugType>
- </PropertyGroup>
<PropertyGroup>
<NoWarn>$(NoWarn);NU1605</NoWarn>
<!-- Include Nuget Package for Tizen Project building -->
<ItemGroup>
- <PackageReference Include="Tizen.NET" Version="4.0.0-preview1-00224" />
- <PackageReference Include="Tizen.NET.Sdk" Version="1.0.0-pre2" />
- <PackageReference Include="Tizen.Xamarin.Forms.Extension" Version="2.4.0-v00013" />
- <PackageReference Include="Xamarin.Forms" Version="2.4.0-r266-006" />
- <PackageReference Include="Xamarin.Forms.Platform.Tizen" Version="2.4.0-r269-002" />
+ <PackageReference Include="Tizen.NET" Version="5.0.0.14392" />
+ <!--<PackageReference Include="Tizen.Xamarin.Forms.Extension" Version="2.4.0-v00013" />-->
+ <PackageReference Include="Xamarin.Forms" Version="3.1.0.583944" />
+ <PackageReference Include="Tizen.NET.Sdk" Version="1.1.2" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
*/
using System;
-using Tizen.Xamarin.Forms.Extension;
using TVMediaHub.Tizen.Utils;
using TVMediaHub.Tizen.ViewModels;
using Xamarin.Forms;
--- /dev/null
+{\r
+ "runtimeTarget": {\r
+ "name": "Tizen,Version=v6.0/",\r
+ "signature": ""\r
+ },\r
+ "compilationOptions": {},\r
+ "targets": {\r
+ "Tizen,Version=v6.0": {},\r
+ "Tizen,Version=v6.0/": {\r
+ "TVMediaHub.Tizen/1.0.0": {\r
+ "dependencies": {\r
+ "Tizen.NET": "5.0.0.14418",\r
+ "Tizen.NET.Sdk": "1.1.2",\r
+ "Xamarin.Forms": "3.1.0.583944"\r
+ },\r
+ "runtime": {\r
+ "TVMediaHub.Tizen.dll": {}\r
+ }\r
+ },\r
+ "Microsoft.NETCore.Platforms/2.0.0": {},\r
+ "Tizen.NET/5.0.0.14418": {\r
+ "dependencies": {\r
+ "Microsoft.NETCore.Platforms": "2.0.0",\r
+ "Tizen.NET.API5": "5.0.0.14418"\r
+ }\r
+ },\r
+ "Tizen.NET.API5/5.0.0.14418": {},\r
+ "Tizen.NET.Sdk/1.1.2": {},\r
+ "Xamarin.Forms/3.1.0.583944": {\r
+ "dependencies": {\r
+ "Tizen.NET": "5.0.0.14418"\r
+ },\r
+ "runtime": {\r
+ "lib/tizen40/Xamarin.Forms.Core.dll": {\r
+ "assemblyVersion": "2.0.0.0",\r
+ "fileVersion": "2.0.0.0"\r
+ },\r
+ "lib/tizen40/Xamarin.Forms.Platform.Tizen.dll": {\r
+ "assemblyVersion": "2.0.0.0",\r
+ "fileVersion": "2.0.0.0"\r
+ },\r
+ "lib/tizen40/Xamarin.Forms.Platform.dll": {\r
+ "assemblyVersion": "1.0.0.0",\r
+ "fileVersion": "1.0.0.0"\r
+ },\r
+ "lib/tizen40/Xamarin.Forms.Xaml.dll": {\r
+ "assemblyVersion": "2.0.0.0",\r
+ "fileVersion": "2.0.0.0"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "libraries": {\r
+ "TVMediaHub.Tizen/1.0.0": {\r
+ "type": "project",\r
+ "serviceable": false,\r
+ "sha512": ""\r
+ },\r
+ "Microsoft.NETCore.Platforms/2.0.0": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-VdLJOCXhZaEMY7Hm2GKiULmn7IEPFE4XC5LPSfBVCUIA8YLZVh846gtfBJalsPQF2PlzdD7ecX7DZEulJ402ZQ==",\r
+ "path": "microsoft.netcore.platforms/2.0.0",\r
+ "hashPath": "microsoft.netcore.platforms.2.0.0.nupkg.sha512"\r
+ },\r
+ "Tizen.NET/5.0.0.14418": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-0fYb8J6rWY9Nksbu8YWAdy7lN6zauNvwgc+8ddlWra75jZER6T25sw2nGPBHecW/CL8HRoRCu9cQxaFZXobJsQ==",\r
+ "path": "tizen.net/5.0.0.14418",\r
+ "hashPath": "tizen.net.5.0.0.14418.nupkg.sha512"\r
+ },\r
+ "Tizen.NET.API5/5.0.0.14418": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-SGBtIKquBtlgkWLNzPYfhSvITgqaaO9pFFo7rzprnm3G7E+uRNdJbpOvk0IYRAKspjNANnIyASVSNLDtULB0HQ==",\r
+ "path": "tizen.net.api5/5.0.0.14418",\r
+ "hashPath": "tizen.net.api5.5.0.0.14418.nupkg.sha512"\r
+ },\r
+ "Tizen.NET.Sdk/1.1.2": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-XuSWtWDdTo2Id+0Tmsk9FG0Tfwfzy++iOfk04rwhy3RLW1VYVIaNuT52Xyz2//WAK88R7jHqozmr0MhiVzJTLw==",\r
+ "path": "tizen.net.sdk/1.1.2",\r
+ "hashPath": "tizen.net.sdk.1.1.2.nupkg.sha512"\r
+ },\r
+ "Xamarin.Forms/3.1.0.583944": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-m2/JGyWjhkpkGhbII4koxfC0UcLORMfxTFfj4UA7ybLzs+MUp5IAsQo7pb6dtNxcI00GVjQcejTzSnVPz9Tsng==",\r
+ "path": "xamarin.forms/3.1.0.583944",\r
+ "hashPath": "xamarin.forms.3.1.0.583944.nupkg.sha512"\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+{\r
+ "runtimeTarget": {\r
+ "name": "Tizen,Version=v6.0/",\r
+ "signature": ""\r
+ },\r
+ "compilationOptions": {},\r
+ "targets": {\r
+ "Tizen,Version=v6.0": {},\r
+ "Tizen,Version=v6.0/": {\r
+ "TVMediaHub.Tizen/1.0.0": {\r
+ "dependencies": {\r
+ "Tizen.NET": "5.0.0.14418",\r
+ "Tizen.NET.Sdk": "1.1.2",\r
+ "Xamarin.Forms": "3.1.0.583944"\r
+ },\r
+ "runtime": {\r
+ "TVMediaHub.Tizen.dll": {}\r
+ }\r
+ },\r
+ "Microsoft.NETCore.Platforms/2.0.0": {},\r
+ "Tizen.NET/5.0.0.14418": {\r
+ "dependencies": {\r
+ "Microsoft.NETCore.Platforms": "2.0.0",\r
+ "Tizen.NET.API5": "5.0.0.14418"\r
+ }\r
+ },\r
+ "Tizen.NET.API5/5.0.0.14418": {},\r
+ "Tizen.NET.Sdk/1.1.2": {},\r
+ "Xamarin.Forms/3.1.0.583944": {\r
+ "dependencies": {\r
+ "Tizen.NET": "5.0.0.14418"\r
+ },\r
+ "runtime": {\r
+ "lib/tizen40/Xamarin.Forms.Core.dll": {\r
+ "assemblyVersion": "2.0.0.0",\r
+ "fileVersion": "2.0.0.0"\r
+ },\r
+ "lib/tizen40/Xamarin.Forms.Platform.Tizen.dll": {\r
+ "assemblyVersion": "2.0.0.0",\r
+ "fileVersion": "2.0.0.0"\r
+ },\r
+ "lib/tizen40/Xamarin.Forms.Platform.dll": {\r
+ "assemblyVersion": "1.0.0.0",\r
+ "fileVersion": "1.0.0.0"\r
+ },\r
+ "lib/tizen40/Xamarin.Forms.Xaml.dll": {\r
+ "assemblyVersion": "2.0.0.0",\r
+ "fileVersion": "2.0.0.0"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ },\r
+ "libraries": {\r
+ "TVMediaHub.Tizen/1.0.0": {\r
+ "type": "project",\r
+ "serviceable": false,\r
+ "sha512": ""\r
+ },\r
+ "Microsoft.NETCore.Platforms/2.0.0": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-VdLJOCXhZaEMY7Hm2GKiULmn7IEPFE4XC5LPSfBVCUIA8YLZVh846gtfBJalsPQF2PlzdD7ecX7DZEulJ402ZQ==",\r
+ "path": "microsoft.netcore.platforms/2.0.0",\r
+ "hashPath": "microsoft.netcore.platforms.2.0.0.nupkg.sha512"\r
+ },\r
+ "Tizen.NET/5.0.0.14418": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-0fYb8J6rWY9Nksbu8YWAdy7lN6zauNvwgc+8ddlWra75jZER6T25sw2nGPBHecW/CL8HRoRCu9cQxaFZXobJsQ==",\r
+ "path": "tizen.net/5.0.0.14418",\r
+ "hashPath": "tizen.net.5.0.0.14418.nupkg.sha512"\r
+ },\r
+ "Tizen.NET.API5/5.0.0.14418": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-SGBtIKquBtlgkWLNzPYfhSvITgqaaO9pFFo7rzprnm3G7E+uRNdJbpOvk0IYRAKspjNANnIyASVSNLDtULB0HQ==",\r
+ "path": "tizen.net.api5/5.0.0.14418",\r
+ "hashPath": "tizen.net.api5.5.0.0.14418.nupkg.sha512"\r
+ },\r
+ "Tizen.NET.Sdk/1.1.2": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-XuSWtWDdTo2Id+0Tmsk9FG0Tfwfzy++iOfk04rwhy3RLW1VYVIaNuT52Xyz2//WAK88R7jHqozmr0MhiVzJTLw==",\r
+ "path": "tizen.net.sdk/1.1.2",\r
+ "hashPath": "tizen.net.sdk.1.1.2.nupkg.sha512"\r
+ },\r
+ "Xamarin.Forms/3.1.0.583944": {\r
+ "type": "package",\r
+ "serviceable": true,\r
+ "sha512": "sha512-m2/JGyWjhkpkGhbII4koxfC0UcLORMfxTFfj4UA7ybLzs+MUp5IAsQo7pb6dtNxcI00GVjQcejTzSnVPz9Tsng==",\r
+ "path": "xamarin.forms/3.1.0.583944",\r
+ "hashPath": "xamarin.forms.3.1.0.583944.nupkg.sha512"\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+<Signature Id="AuthorSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <SignedInfo>
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+ <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512" />
+ <Reference URI="TVMediaHub.Tizen.deps.json">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>U0MEU5PUjq0KxrTzsATqAX7fhJ3XZ2kUA7DfRtoXfbUQRF/XWCIekX6VUFZ+s8kTklEAY92iCluPz8OvT9zT/w==</DigestValue>
+ </Reference>
+ <Reference URI="tizen-manifest.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>uC/YUIaQYAtGROnQbkxExW0Z5nouavxJvAnmd+FuQpHhRuTMCrnyE5zpq1C1+3sSrI7+wsIcWXZqP6AYfOsWsQ==</DigestValue>
+ </Reference>
+ <Reference URI="shared%2Fres%2Fxamediahub.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>kxx5WtbHnhUiryYud3HU8WZn5e0LuLrdJgxZDa11shnpw4xJmEnKZkkoggwFsSmWzrPoABHsI2u7rKEOMETbNw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2FThumbnail1.jpg">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>S4TUCZ15PdxMZ67S9DIeL26VxjSPzFjd6h/aIlHLzSbOaeXMlEtphhldywjyMJv/DiIgyTjzWJmBj5V2s9wFKg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_shadow.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>hZnxKaqta1cQKC+24bFbd8WzCYw0CkPyv6MA4JmKU6qMnrJ2q2NgiIZ7n23QwrDO5GKiiNqbRKRUN/9Do9AZPQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_mask.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>FJ2N0RHSW45M+/2Z1yA2zbyBUlQuIj3HK80tT4pMonaAM54GP+kPC9U+5NUxWHIuGTzjbpj/Za46PbijkdR0Qw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_line.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>//FDMLX27ym2TDaBYH0eM8B8cWYKuvld8lTmZH9gAx5wAtkCtmwTCZs2Nvav/X0W+JhFahTqLCUL12V5pZoGkw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_dimmed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>FV429vzVQtV+od5f6QuSXeKuzVJYyrtQsad0pdaOm9F8vfcgSaQkd2pe10PPP73qTTie9vUyiwYKE3SMI3Uw5w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_black_area.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>xHyreLkfh0ou9SbkYTUJ8f41ZEwpR72O8IfBObL5mOgr9Y3sBz0macjgS2lnO62mKRGJkfS/DDAkCZTgCuHHqg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_viewer_progress.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>lGBEpskEmAMRtTPj+Equkqaj8o4Wc2+IUyD0o2BcxRsUFvzLlqgFVI/gduSkgt1ctPYZx8MMaXHxI3jq27XGGg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_thumbnail_gradient_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>/ycFfin860AKXP6QghrvIgG0zjdKcrO8DU2Vrc4hpyniJkOUBtkN+6X4acblIiHg87LOAEASc4UZbF+T7UO2SA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_thumbnail_focused_shadow.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>5rO+Cthk+nniUo9/2fOjbVSk54zHIRYWhFy5JrPyvbSmhr9cyAijP55A7l0zvs25Rl8wqEElqL7sR9BB0fa8mg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_stroke2.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>QsQfYB8yScICm9Unwl4VOJk12yDnwdvwB23zHxH5ElPFjvVPn3XgKEAYbKEWLeGyiPmUsNwU+pDSPS/bl42pkA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_stroke.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>AcXdHE4ArG3QJy0Fu1bXmriKCi8hWMOYXAUgZ5O8ypcApACO8OcKpaG6Z40s+Blq0HtysXSAiy8sOyc98FoJoQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_photozoom_gradient.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>rjuT/jWQLtPD5fiKnWx0qvYubqLvHy6teEGRLE1AmIjUUEphIf3m9zLp+FcxCnPlWqPtbw9qahGvRRG899dPsA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_nocover_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>+Ffb9F5erZTSMdg8wjq1YwGWBcd5OwdgWBjqe3/5DG1VyG1ETXONd4uctkvAVhHZOMcNxNEnsIBkdiLM32aq6w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_nocover.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>7ecadiou10HWw8uEn7MD43+c1njq0P+4Wjvr1zZ9LDGxfJbnEF3tfCmdktLkszfcnn+7W3s7ap+/HSznihSN5A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_list_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>rTkjpEhnhxJxPY2Hui2hku27ksDes06Xmxigz619H6hHLCYeboI5Qt4DEpDUR0tBmPGkuOgGE7KznuTbfvUnuw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_list_focused_shadow.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>xmKt52d0QjOtzZuV5G2R3kt/HYjAsDxuXsXmcg914OXtqO5NkY6N0RLcO7S/IjPGh6dl+BEp/mz37aCOUnlI2A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_list_focused.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>g7Ow+6LCScxGAlcYaAK9ftC9S62s0sqPXumb44OcurndFomedpis6dy9vvnmpStuUjDpN+Cn1fI/yWXzojtH3A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_movie_unavailable.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>qihoYkK6iDGkmrfixcaHxA5+mssr/0ScLgVgBQjaijQgokiZBRqaBruk5phegBrZZF8N/nBMB0wh5IzGp7APIA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_media_no_contents.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>BpYFiZ/N3AC1liBqPABLiFSOHfgRHcMkPXESI+wlgYt/sPRbCu0IRMY9tPEaQFCLuA5gbXib+laBPfWSJlrq2w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_gradient_topbottom.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>7QHjVywJ34G0KldJYcB+kePcyA7LUaB3nN7FlEUH4T0tbEBr9g+B4w187hv5+ThEKBfX0/fFZ/nRUCQtu8kfig==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_gallery_unavailable_video.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>WMdOH9Gw/FR3r0D9dRUZJcK8yTyJPMh3+DIu+4x/lK+k2Oo8Jl3ys5/g83bnvafs97MHyzajKdp0Y2l1zErLhw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_gallery_unavailable_photo.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>o4C56Aas4Z/0hS+99SLI7wAOCEt8ZKwvaWYlQXDA2ffP7kTaM2iFGvAjs+b83lInTjJDqUARxvToNfAypT3U5Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_dimmed_opacity85.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>yJ+6REFOYK+lPC+cBH5PlTaOlgEvfvD4NmUR/eDkh3Xx1/fFIuNcm1S0ASjrIPSQszxGfIOuruJudAEktC3X2A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_dimmed_opacity75.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>GgLb0oauwnrwpufXq8XwNKbeVKqyjCOjdueTMLHwPhb746xhGepTxjjNVacoIfa5M8R2PaYieG7GIxKoOH2OSg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_dimmed.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>chVVlxeakhgJNKvecsiF/nyyGT/oh9VcGY288FB17ArRq2b80A8bcPh0r/LQlqUPqHMUVX4U2UjV0MfjD3yCew==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_black_area.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>LxTpvdtz8TJ33FUMwCbdcgABFBFFsu9sTx3cCDCDivzh76AJKqdItYidAyFtYLm7HhEe9ckuhaooptxmYMs9ag==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_bg_dimmed_95.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>DU3VwYusuthCHIKyOQGwv5gt0EcCLdpm5hQzYP49AgVZRRJ2NJAVBbz/DHeKyjDIzzqB1UmC3h2MbGg71Aqdew==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_up_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>1JlHgVpGkeMy+7/57xLbxGeJ+pF8wXqglarc0hrccyKSTnpSJ2m5k/fmvXOMtVsoMq8G2HONlGCXBl5gWRz6gQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_up_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>S6UVsATiCOuZmFakZeVOpDq+DuuEq460dRAU2trfOIBIHhmmnlv7f2Y0pilacYdtBgUPvnXFhziu4bY7d9AAxw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_right_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>fJshCtTSyPjfV7vvCOqI7fIyAdHGqmOOnfJI1VFCRMEy4gL9mFPNxsCwSAQsSjouW8nkZKiVLZldxm7kgTtVmQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_right_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>AcrkFohuepOalJydSsXymk/1VMy+64MbBNgBjhIp7PNnTrF3qW3w3BI50NiTg1FL76Ge2Mfk2c3RjTKIi7W+NQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_left_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>S5Do1AocPEroSiHt0QpxEKerZQHS2i9fHIMwlPahHIlzuLaZWW4KE0YGdj8YuUgFINyqyxKSdx555q2jeJwKnw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_left_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>wh2BYinQahMNGVUQMarIWb7MJ6T9qmgbN6Ohw/JZ1AghE6CGIg2LOaarWUZbSsL5gdPHu5+OXuzqfgRwRAC8HA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_down_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>RNhvY9eAimsnA73WPY3C2q+TkCbhnWZ0Do73k8vMGdeOcRp5JCnfmcdS148sp7oJfByopUmlSdcIg6VqkKJyxw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_down_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>QilKUZRHfo3noXuhMdCoIlqjHDXlbD/OtEII1w/wwxdEaB2SP6Mjvkv4TwMgcULu8G9sj060ma73zQw+mJ0HSA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_play_speed_info.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>MwOZXZ5DSVJnSg3voE588k7GSpVa8u6J43P/d+M940w5SBv42i3HXbNqEzP+bzZCrrNVB6Pf2rDXgNJ0iD4j1w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_additional_back.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>afb2xDymRLXXDUfEym9Osavm7Q2IPyicMikIJYjDUjEaBoIAL9Liym8E/b74co8mQCbYDgnZlg78Xhe5J6Z2yw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_zoom_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>FauJnDtq239AcJx2LfciNlmCIaWFWn2VEeIxUHWVf1UVQS1VnysUANKV1eg6GzSgIXldF8OO1GLh4Dq2leO+NA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_zoom_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>qlhAO0luYiuMspG5FMZ/NU7ACOYF82ME0+19o9bEEjnguJPNARx20d0EE2OV5SAl2Gz3W4m57ITwkktcEDA2aQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_video_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>baYF/bkqAOqoi443N2K9MaOcfiXj3swZNlIz4eNFETsmj/C89Mnz+m9LynOpSZ5ZTfBxPLX81sEtFZFyjmeejw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_video_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>JPqsGCIzy0jxAmjULW14ROuUxnwn2ncswteaXHWk3mzzrRv/XaMm44r5i+r0f/K235NzHvQQH5Z12PCmMhnDeQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_rotate_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>ZqMmPQ9gEusoQ/ZQ0UIOrD1/36/xARdKwnNl6S5D0Y5IU5jSKEQg8ZQGli6vE/O9iVAkdjwfjSyslWFh6R5+PQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_rotate_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>IxcSs8nWfoXm/p/QQ5oDrFeX8n8mN3FDxH6MqwL3rEZBXNCr6iI6PswRcA+/txLSMhQCkgB1wwkjV1S0r6ylsA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_right_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>mesw1USM7myj2mDIyrgj0LbTAqWTosih8EVhWPH+Syeq6Uk8WcNRcNnEpeqDSg1ScuRT5nsRzm+JvZZWp0hjTQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_right_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>QKki0dhMx0MB16/Watx2MDCk1ajcuT8GqIedO+tqwpccPM8qppXdMmqzew2VvUS8EZvqqGxzFEnppvpYgmTOGg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_rewind_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>6XSF7EzY1HFUmDOmDQ0kXdpoPXekZSTtEoomO8nORpMnqvqUmUDmtCf7elkWpiEsSYaiqQ1eEjrAIzis2kOqKQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_rewind_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>aguwXNnkbRoRSkqFqHeCAbDiShs/X7X1rxxINtlT3Cm95fqaGq3K4tUci/RK1V0QAKXZUMiNosisKUHdogTWFw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_previous_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>c0TtoY44L2uSpFgqE1O6XvVH2Szzb+ctDQY6A6w2Xdso4JhhotzrHv9HTATVKJzI6v8s5dcW9XRwoeLui5hx0Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_previous_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>7OlDnW097Jr+y1L68eKk1mZUZgSMbXbbA8LAz8y6grfgWqkqoQgNHkk0Jio4hFkh5EhkLcLqV9WBcAALfuXG2w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_play_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>MoiwqytE5pdqdN1OBGdcEoVGIKHa70SMxLekU6gyQDa72Dqbxz+tQfdWQbIREHKLzhYqXZ830QsBXRgixNUbbQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_play_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>AHw/K8RsyMRPnZtmlecGZb4uj3oyx/bCEM8CPlU9Uhc89H8JimMf7u4+P2BAQWX4vnvbAvLqrXbRrKwHAAJqMw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_pause_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>aWGghhAy91nDbadzCUfaVvN6ZClYjhnY4gtitaKFaYCPpqanDc4P9Uu8YdVnI0Fq8xKWzyB1fXlxj55url5mzw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_pause_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>pa2WlbWyI1IfhNpSx5t1ALsrl2t1lREq0IQZuyjWlUmEoSMwQzAt9iuh0+fMo2kSxrcyK3adXAGCs2oqpp/gow==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_option_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>RvX08rWgIfij+CJWyeoWFdoWhE8CSADt/BkEO+YCSdPXO/NO0YOeKbiTf4NXqPZeC1hDwzhTmkOR6R+klbg5NA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_option_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>tJ2YidE/YhuTRr9xBJDfFtuuRF29nSgH+drAQu/ta9FTCs/EhKnEyvQSE4VGfY/WW3SrJ+9kaPehRQC4gZXHcg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_next_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>Wnmek8bvT8A3ktNgWHfDHez6NHIzc4kDr3T6S0MEB4ZNQrrHA/chuinT8o3JDs/2NQ/LmjoZ0MSxg5xBLNKsTA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_next_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>SzrKBQ8DcReQ48eqCs1kYsC69zmvMipmzkrIvp5/9y4hAlbB8hKdq5jibPbrVdR+ufO7xhlJqLbqnj0HA6174Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_left_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>CQHEcqdzkLy3ysc/nfPp1uinjotqlpr8z5ycNv8SbSiWTd2UoDfa/+F6nBVIAC1dWjmSAic+TYjqGCgai92jnw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_left_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>pvuei2GUGfA0KRBtX+UBIGKQHsIobotuBbJy7DINBcnE7vWlklBg+Jk0uqrSG8yA2x0D1ZMAkBzGVRpUVAUqjQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_forward_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>orSmEyhbvB30xePHWpGj7u34tIPmsdg0Y9rvZNAofJTPeC9biOrefZyg2JMhJI4006ph1t2AXKqvE89YzLeT2Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_forward_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>l6MxOZh9ddHc4oR5YGDumOR9mPd8Xii1JOWZlO3e78B9tx9AnoZshRuZbrjgvzSDNUZIKKXX8T422krTR1t5tg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>Kx0MhLza7cMOKlEsQOsHrqVyJ/vIBeyX/RGBAnXFaCNZxqCxrmGondVF6EoXe3YIMTrRRybftwBPjf/5lVCd8A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_music_info_play.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>d5yNzcoU3gDfXkQ/Aq5tKfrjmo5jsf8iiA64QHw5UhFBfwqp9GhamZXIwus6K1skDVrLBNY4vM59QxzKMeYM8A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_music_info_pause.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>cutZf66TWjTZtbst0VGaIk2XdJqcGWBn2ZiYZ6gthTynWxVdt5q1jojFDGE207of1UlEGZ3OmpcGAXak/6/6SQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_unselect_check_wh.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>zmMtatJJ4NyK9XIm8F/Lr+Y0D5rdGrcDMcx6irLx5sqirKWKU6gGqi6yFVpNTamT/rbkBd5W7rO9FIy+Z488zQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_unselect_check_bk.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>/8G0xghcNPzidiV4L90t0X/lc28ijfZv64UgaxoZaD9YQBv12aQ3EQwEEsbOVEmE10GDON/4lS+4rf6kqUtCdg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_pre.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>eXeT3ecvdUhM1/hXteindMFcEsbsCitMFmeZFT9SO9C/zcTxhizMGpMXR6cc5fMsz5L0/2lDxkCJZdpt/RGG+g==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_nor.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>M2JUit4O4PHsEsdkBlhDV2Zp2JFi4NXVBPbQ/fPCUxTh+6EJojY8hRBPGKd/a/scnLFAH/ffCJDh+mSgzK+CLA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_for.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>bxVZHHskQ45XFtc9QfVj9YEojbEWo7AXUrlpOz+7ceEulIy/jgtxkM2BVoTLAcw/szO9+asMOVx1cTVuyJLO7g==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_check_wh.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>C9ZJbrpkanzTtxmqTCP7bLW3VO+rKbtjeja5K0CxzCGEEuZz9/Y8NJQ+p6WGsiWq8GUbWEDkQEUuSlKyZzDnqw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_check_bk.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>7IdXJqmey8uGoGfHVfYJ9XPpQAfnSeblDZ64xEj+1s4Wd0ETXMyVeiavVlP707RIRT6qpSMlq3dJdrWnAALu3A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_menu_pre.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>HHkN/GvaCxJrc5hN1//pFrwmkao4v3iVdPVLhKNpPTUcvn3fMfqPgpRk3t6wosh7Y15Mmm29Kqf1TMijJdacOg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_menu_nor.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>ZQrI5VpeJADx7FrPECYWet8IVqbjlrJguVYKaKB0FfTgJqplQR5zLfObe1fMTBx3JS1+WPKEIRmOI4RU9d6Qpg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_menu_foc.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>vGwcTV58GY30PZhBzbcIVXNhKPEc4QqWQCu+txOGPfcuFnuEucl5ZdFTRucxKJEJVuSonAUpFmWb3w7ijTvHdw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_menu_dis.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>NDV28JzE9px6shEJtMpcAQltSBUUytLMQR5ewKQytEwfinFyRvnc5JSAOkwt3xUzVI77Is3YyvUj0wwkFble7A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_list_check_pre.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>5jsl5WLf2G9RTSNYZQVyl1To4AdcF0uge4E2g2mIEAHQELWk83fgr4H7P/AGS3WdVf+BNyL/ppAAx+hn+Y5L6Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_list_check_nor.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>m29Cev7uJzYAt6+pdiKyvByW99fGw9HMToQZ2T8fqfhMN+2Ws4R7IX4Tst6Va3Hf53snlEZRhHvyCsRge+9vPw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_list_check_foc.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>UuGjPJ4LzHbpoJzn+A0yK68xIgA6YbPAJoljMWEHpt76K7LZOsD+VK1XHlViTuHj/usT+ka5B4tFRUHFoOX9Bg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_list_check_dis.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>Xg0htOiKtc27YMRoa6g+nJ0F5ME7spC3O0RwrMUwDYPZMeugofcTbIx0ca/QeXYxF2laDlxlbjzoeHzCW3GFRg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_list_thumbnail_play.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>wkyLxi1xnmiCosEFBXriJlzOF1anmlngryTWPMVKE+Zj3Ri4d4PfN/nUczQYTOmkZsuRaOBUVzJcolgD5Eb4XA==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Xaml.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>cpqKDnVZS3KsRf1EYbtHBopE7GNRba0zS+pBl9IPI/aXWNexT+Opqjps5L0zHYzxPYeQ//8ZTQUCS4FRFWHPSA==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>Mkuk6OE4d2Ixb514iFGMGHdZATikDuKQLmFpaDad2N9UP0z2TyQZHHyetsCezgw/2DudjA3m/gARf/iG8+a+Xg==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>LaeAT+53GPo09F10YfI1Yn5Xe+1cYwDCOVS+YPWIsyJ0/AZC8+liT+5AwnTxlCMx5Yb/oD+UAa2R2pDcULVgSQ==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Core.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>jsED0lu7awNCBzeeTZpxCFvmTu1ywtzaBkVLxbuN0HahI9NaEPkfCn0O99NXCPIsWtEESlKxSWYqO/tgpspf/w==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVMediaHub.Tizen.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>YVXasL75doN/+N0lqI/0rypO6PvhPfPLdR89ZuLncF7SOhkO9HSdZlXtaQ0fszNqc+CWTam7r/1kH3BqnO6W/A==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVMediaHub.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>JeWnxQNgTHeAnssfilIIzbJS7kh2LZW9GG8Ajd4g3NXii+4C9blu8nvCwyerl9l07PloXbdha+NWbgPW/fDzMQ==</DigestValue>
+ </Reference>
+ <Reference URI="#prop">
+ <Transforms>
+ <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
+ </Transforms>
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>uZyQ+87kE4t6qxSN4VEx1Pox4WvKeg6zcxAkkLd37pva/nBlGrszr+isy/IJw4IgKnaB7eSEPU4PbccqlynCkQ==</DigestValue>
+ </Reference>
+ </SignedInfo>
+ <SignatureValue>
+gO/pwoVawkGqaLQmXkEVCc3YcGUcxDE0tvazuc9WGLlxAy56qSr8fOpYFzi2GsVsh/DfkFvqSHX+
+aJDhqJ7JNXjfNz52BQXnMyv3N1oIVFDiUsGU5nBha9dhCuwLi0WZS/eFq81MbWBKj227E8SfRgcp
+no/rhDcn0mUAjwAzb/8=
+</SignatureValue>
+ <KeyInfo>
+ <X509Data>
+ <X509Certificate>
+MIICkDCCAXigAwIBAgIGAXJfNTwhMA0GCSqGSIb3DQEBDQUAMFYxGjAYBgNVBAoMEVRpemVuIEFz
+c29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4gRGV2
+ZWxvcGVycyBDQTAeFw0yMDA1MjkwNjUzNDNaFw0yNzAxMDEwMDAwMDBaMAwxCjAIBgNVBAMMAXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAId63MPD7k7QU87KcnZyNTJWYGvoaxFMLwptdd2i
+Hwyp9NjNDV0Wi3caGLniVY1y4YfCF1FDDYFDhzMliTMUnN1QXzaX3asWv+o6tf47+dKNpNvlpqrb
+P3zUOJTxqGZ6Dt24rDj0GzccHONOYyrdrKXeCLXntdOLaP6RNMFO4Li1AgMBAAGjMjAwMAwGA1Ud
+EwEB/wQCMAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMA0GCSqGSIb3DQEBDQUA
+A4IBAQCuEMAidDUzQkKibHaT0ur0mfZGQoswWPoYw+0v24FGcFQxn9pt18H9eTzSxdkReSCjod10
+FYqDGwhoRnV7ryCJe1OgzbL3f850fGrStYNA68+a92k9EV8MZcUy9S+SopwEZBvTJENq/p4mtQce
+qqgs0K7N5ktoFuebu4X4CsAFNpGShn8nzV3ljO/MfjdCgKxlOQP+a4doLqn6egQ5L0FFLlosQTRP
+tC//Ds4rQFQHNVLkO+1Zpfwq8S4B4iI6L9C1cLG6ZBmxhVDLe/cMgAWDu2dFdxROHB5qICsvFjcF
+JPmejIOuMoG4DKOund5Qibra59dt8C8KZ1yJR2Efdd7G
+</X509Certificate>
+ <X509Certificate>
+MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMRowGAYDVQQKDBFUaXplbiBBc3NvY2lh
+dGlvbjEaMBgGA1UECwwRVGl6ZW4gQXNzb2NpYXRpb24xHjAcBgNVBAMMFVRpemVuIERldmVsb3Bl
+cnMgUm9vdDAeFw0xMjAxMDEwMDAwMDBaFw0yNzAxMDEwMDAwMDBaMFYxGjAYBgNVBAoMEVRpemVu
+IEFzc29jaWF0aW9uMRowGAYDVQQLDBFUaXplbiBBc3NvY2lhdGlvbjEcMBoGA1UEAwwTVGl6ZW4g
+RGV2ZWxvcGVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVGhRGmMIUyBA7o
+PCz8Sxut6z6HNkF4oDIuzuKaMzRYPeWodwe9O0gmqAkToQHfwg2giRhE5GoPld0fq+OYMMwSasCu
+g8dwODx1eDeSYVuOLWRxpAmbTXOsSFi6VoWeyaPEm18JBHvZBsU5YQtgZ6Kp7MqzvQg3pXOxtajj
+vyHxiatJl+xXrHgcXC1wgyG3buty7u/Fi2mvKXJ0PRJcCjjK81dqe/Vr20sRUCrbk02zbm5ggFt/
+jIEhV8wbFRQpliobc7J4dSTKhFfrqGM8rdd54LYhD7gSI1CFSe16pUXfcVR7FhJztRaiGLnCrwBE
+dyTZ248+D4L/qR/D0axb3jcCAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOC
+AQEAnOXXQ/1O/QTDHyrmQDtFziqPY3xWlJBqJtEqXiT7Y+Ljpe66e+Ee/OjQMlZe8gu21/8cKklH
+95RxjopMWCVedXDUbWdvS2+CdyvVW/quT2E0tjqIzXDekUTYwwhlPWlGxvfj3VsxqSFq3p8Brl04
+1Gx5RKAGyKVsMfTLhbbwSWwApuBUxYfcNpKwLWGPXkysu+HctY03OKv4/xKBnVWiN8ex/Sgesi0M
++OBAOMdZMPK32uJBTeKFx1xZgTLIhk45V0hPOomPjZloiv0LSS11eyd451ufjW0iHRE7WlpR6EvI
+W6TFyZgMpQq+kg4hWl2SBTf3s2VI8Ygz7gj8TMlClg==
+</X509Certificate>
+ </X509Data>
+ </KeyInfo>
+ <Object Id="prop">
+ <SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties">
+ <SignatureProperty Id="profile" Target="#AuthorSignature">
+ <dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile" />
+ </SignatureProperty>
+ <SignatureProperty Id="role" Target="#AuthorSignature">
+ <dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-author" />
+ </SignatureProperty>
+ <SignatureProperty Id="identifier" Target="#AuthorSignature">
+ <dsp:Identifier />
+ </SignatureProperty>
+ </SignatureProperties>
+ </Object>
+</Signature>
\ No newline at end of file
--- /dev/null
+<Signature Id="DistributorSignature" xmlns="http://www.w3.org/2000/09/xmldsig#">
+ <SignedInfo>
+ <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
+ <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha512" />
+ <Reference URI="TVMediaHub.Tizen.deps.json">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>U0MEU5PUjq0KxrTzsATqAX7fhJ3XZ2kUA7DfRtoXfbUQRF/XWCIekX6VUFZ+s8kTklEAY92iCluPz8OvT9zT/w==</DigestValue>
+ </Reference>
+ <Reference URI="tizen-manifest.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>uC/YUIaQYAtGROnQbkxExW0Z5nouavxJvAnmd+FuQpHhRuTMCrnyE5zpq1C1+3sSrI7+wsIcWXZqP6AYfOsWsQ==</DigestValue>
+ </Reference>
+ <Reference URI="shared%2Fres%2Fxamediahub.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>kxx5WtbHnhUiryYud3HU8WZn5e0LuLrdJgxZDa11shnpw4xJmEnKZkkoggwFsSmWzrPoABHsI2u7rKEOMETbNw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2FThumbnail1.jpg">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>S4TUCZ15PdxMZ67S9DIeL26VxjSPzFjd6h/aIlHLzSbOaeXMlEtphhldywjyMJv/DiIgyTjzWJmBj5V2s9wFKg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_shadow.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>hZnxKaqta1cQKC+24bFbd8WzCYw0CkPyv6MA4JmKU6qMnrJ2q2NgiIZ7n23QwrDO5GKiiNqbRKRUN/9Do9AZPQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_mask.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>FJ2N0RHSW45M+/2Z1yA2zbyBUlQuIj3HK80tT4pMonaAM54GP+kPC9U+5NUxWHIuGTzjbpj/Za46PbijkdR0Qw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_line.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>//FDMLX27ym2TDaBYH0eM8B8cWYKuvld8lTmZH9gAx5wAtkCtmwTCZs2Nvav/X0W+JhFahTqLCUL12V5pZoGkw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_dimmed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>FV429vzVQtV+od5f6QuSXeKuzVJYyrtQsad0pdaOm9F8vfcgSaQkd2pe10PPP73qTTie9vUyiwYKE3SMI3Uw5w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_zoom_minimap_black_area.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>xHyreLkfh0ou9SbkYTUJ8f41ZEwpR72O8IfBObL5mOgr9Y3sBz0macjgS2lnO62mKRGJkfS/DDAkCZTgCuHHqg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_viewer_progress.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>lGBEpskEmAMRtTPj+Equkqaj8o4Wc2+IUyD0o2BcxRsUFvzLlqgFVI/gduSkgt1ctPYZx8MMaXHxI3jq27XGGg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_thumbnail_gradient_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>/ycFfin860AKXP6QghrvIgG0zjdKcrO8DU2Vrc4hpyniJkOUBtkN+6X4acblIiHg87LOAEASc4UZbF+T7UO2SA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_thumbnail_focused_shadow.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>5rO+Cthk+nniUo9/2fOjbVSk54zHIRYWhFy5JrPyvbSmhr9cyAijP55A7l0zvs25Rl8wqEElqL7sR9BB0fa8mg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_stroke2.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>QsQfYB8yScICm9Unwl4VOJk12yDnwdvwB23zHxH5ElPFjvVPn3XgKEAYbKEWLeGyiPmUsNwU+pDSPS/bl42pkA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_stroke.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>AcXdHE4ArG3QJy0Fu1bXmriKCi8hWMOYXAUgZ5O8ypcApACO8OcKpaG6Z40s+Blq0HtysXSAiy8sOyc98FoJoQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_photozoom_gradient.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>rjuT/jWQLtPD5fiKnWx0qvYubqLvHy6teEGRLE1AmIjUUEphIf3m9zLp+FcxCnPlWqPtbw9qahGvRRG899dPsA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_nocover_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>+Ffb9F5erZTSMdg8wjq1YwGWBcd5OwdgWBjqe3/5DG1VyG1ETXONd4uctkvAVhHZOMcNxNEnsIBkdiLM32aq6w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_nocover.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>7ecadiou10HWw8uEn7MD43+c1njq0P+4Wjvr1zZ9LDGxfJbnEF3tfCmdktLkszfcnn+7W3s7ap+/HSznihSN5A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_list_normal.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>rTkjpEhnhxJxPY2Hui2hku27ksDes06Xmxigz619H6hHLCYeboI5Qt4DEpDUR0tBmPGkuOgGE7KznuTbfvUnuw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_list_focused_shadow.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>xmKt52d0QjOtzZuV5G2R3kt/HYjAsDxuXsXmcg914OXtqO5NkY6N0RLcO7S/IjPGh6dl+BEp/mz37aCOUnlI2A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_music_list_focused.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>g7Ow+6LCScxGAlcYaAK9ftC9S62s0sqPXumb44OcurndFomedpis6dy9vvnmpStuUjDpN+Cn1fI/yWXzojtH3A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_movie_unavailable.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>qihoYkK6iDGkmrfixcaHxA5+mssr/0ScLgVgBQjaijQgokiZBRqaBruk5phegBrZZF8N/nBMB0wh5IzGp7APIA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_media_no_contents.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>BpYFiZ/N3AC1liBqPABLiFSOHfgRHcMkPXESI+wlgYt/sPRbCu0IRMY9tPEaQFCLuA5gbXib+laBPfWSJlrq2w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_gradient_topbottom.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>7QHjVywJ34G0KldJYcB+kePcyA7LUaB3nN7FlEUH4T0tbEBr9g+B4w187hv5+ThEKBfX0/fFZ/nRUCQtu8kfig==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_gallery_unavailable_video.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>WMdOH9Gw/FR3r0D9dRUZJcK8yTyJPMh3+DIu+4x/lK+k2Oo8Jl3ys5/g83bnvafs97MHyzajKdp0Y2l1zErLhw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_gallery_unavailable_photo.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>o4C56Aas4Z/0hS+99SLI7wAOCEt8ZKwvaWYlQXDA2ffP7kTaM2iFGvAjs+b83lInTjJDqUARxvToNfAypT3U5Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_dimmed_opacity85.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>yJ+6REFOYK+lPC+cBH5PlTaOlgEvfvD4NmUR/eDkh3Xx1/fFIuNcm1S0ASjrIPSQszxGfIOuruJudAEktC3X2A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_dimmed_opacity75.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>GgLb0oauwnrwpufXq8XwNKbeVKqyjCOjdueTMLHwPhb746xhGepTxjjNVacoIfa5M8R2PaYieG7GIxKoOH2OSg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_dimmed.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>chVVlxeakhgJNKvecsiF/nyyGT/oh9VcGY288FB17ArRq2b80A8bcPh0r/LQlqUPqHMUVX4U2UjV0MfjD3yCew==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_black_area.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>LxTpvdtz8TJ33FUMwCbdcgABFBFFsu9sTx3cCDCDivzh76AJKqdItYidAyFtYLm7HhEe9ckuhaooptxmYMs9ag==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fimg_bg_dimmed_95.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>DU3VwYusuthCHIKyOQGwv5gt0EcCLdpm5hQzYP49AgVZRRJ2NJAVBbz/DHeKyjDIzzqB1UmC3h2MbGg71Aqdew==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_up_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>1JlHgVpGkeMy+7/57xLbxGeJ+pF8wXqglarc0hrccyKSTnpSJ2m5k/fmvXOMtVsoMq8G2HONlGCXBl5gWRz6gQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_up_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>S6UVsATiCOuZmFakZeVOpDq+DuuEq460dRAU2trfOIBIHhmmnlv7f2Y0pilacYdtBgUPvnXFhziu4bY7d9AAxw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_right_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>fJshCtTSyPjfV7vvCOqI7fIyAdHGqmOOnfJI1VFCRMEy4gL9mFPNxsCwSAQsSjouW8nkZKiVLZldxm7kgTtVmQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_right_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>AcrkFohuepOalJydSsXymk/1VMy+64MbBNgBjhIp7PNnTrF3qW3w3BI50NiTg1FL76Ge2Mfk2c3RjTKIi7W+NQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_left_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>S5Do1AocPEroSiHt0QpxEKerZQHS2i9fHIMwlPahHIlzuLaZWW4KE0YGdj8YuUgFINyqyxKSdx555q2jeJwKnw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_left_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>wh2BYinQahMNGVUQMarIWb7MJ6T9qmgbN6Ohw/JZ1AghE6CGIg2LOaarWUZbSsL5gdPHu5+OXuzqfgRwRAC8HA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_down_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>RNhvY9eAimsnA73WPY3C2q+TkCbhnWZ0Do73k8vMGdeOcRp5JCnfmcdS148sp7oJfByopUmlSdcIg6VqkKJyxw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_zoom_arrow_down_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>QilKUZRHfo3noXuhMdCoIlqjHDXlbD/OtEII1w/wwxdEaB2SP6Mjvkv4TwMgcULu8G9sj060ma73zQw+mJ0HSA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_play_speed_info.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>MwOZXZ5DSVJnSg3voE588k7GSpVa8u6J43P/d+M940w5SBv42i3HXbNqEzP+bzZCrrNVB6Pf2rDXgNJ0iD4j1w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fic_apps_additional_back.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>afb2xDymRLXXDUfEym9Osavm7Q2IPyicMikIJYjDUjEaBoIAL9Liym8E/b74co8mQCbYDgnZlg78Xhe5J6Z2yw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_zoom_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>FauJnDtq239AcJx2LfciNlmCIaWFWn2VEeIxUHWVf1UVQS1VnysUANKV1eg6GzSgIXldF8OO1GLh4Dq2leO+NA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_zoom_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>qlhAO0luYiuMspG5FMZ/NU7ACOYF82ME0+19o9bEEjnguJPNARx20d0EE2OV5SAl2Gz3W4m57ITwkktcEDA2aQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_video_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>baYF/bkqAOqoi443N2K9MaOcfiXj3swZNlIz4eNFETsmj/C89Mnz+m9LynOpSZ5ZTfBxPLX81sEtFZFyjmeejw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_video_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>JPqsGCIzy0jxAmjULW14ROuUxnwn2ncswteaXHWk3mzzrRv/XaMm44r5i+r0f/K235NzHvQQH5Z12PCmMhnDeQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_rotate_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>ZqMmPQ9gEusoQ/ZQ0UIOrD1/36/xARdKwnNl6S5D0Y5IU5jSKEQg8ZQGli6vE/O9iVAkdjwfjSyslWFh6R5+PQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_rotate_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>IxcSs8nWfoXm/p/QQ5oDrFeX8n8mN3FDxH6MqwL3rEZBXNCr6iI6PswRcA+/txLSMhQCkgB1wwkjV1S0r6ylsA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_right_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>mesw1USM7myj2mDIyrgj0LbTAqWTosih8EVhWPH+Syeq6Uk8WcNRcNnEpeqDSg1ScuRT5nsRzm+JvZZWp0hjTQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_right_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>QKki0dhMx0MB16/Watx2MDCk1ajcuT8GqIedO+tqwpccPM8qppXdMmqzew2VvUS8EZvqqGxzFEnppvpYgmTOGg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_rewind_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>6XSF7EzY1HFUmDOmDQ0kXdpoPXekZSTtEoomO8nORpMnqvqUmUDmtCf7elkWpiEsSYaiqQ1eEjrAIzis2kOqKQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_rewind_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>aguwXNnkbRoRSkqFqHeCAbDiShs/X7X1rxxINtlT3Cm95fqaGq3K4tUci/RK1V0QAKXZUMiNosisKUHdogTWFw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_previous_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>c0TtoY44L2uSpFgqE1O6XvVH2Szzb+ctDQY6A6w2Xdso4JhhotzrHv9HTATVKJzI6v8s5dcW9XRwoeLui5hx0Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_previous_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>7OlDnW097Jr+y1L68eKk1mZUZgSMbXbbA8LAz8y6grfgWqkqoQgNHkk0Jio4hFkh5EhkLcLqV9WBcAALfuXG2w==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_play_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>MoiwqytE5pdqdN1OBGdcEoVGIKHa70SMxLekU6gyQDa72Dqbxz+tQfdWQbIREHKLzhYqXZ830QsBXRgixNUbbQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_play_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>AHw/K8RsyMRPnZtmlecGZb4uj3oyx/bCEM8CPlU9Uhc89H8JimMf7u4+P2BAQWX4vnvbAvLqrXbRrKwHAAJqMw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_pause_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>aWGghhAy91nDbadzCUfaVvN6ZClYjhnY4gtitaKFaYCPpqanDc4P9Uu8YdVnI0Fq8xKWzyB1fXlxj55url5mzw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_pause_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>pa2WlbWyI1IfhNpSx5t1ALsrl2t1lREq0IQZuyjWlUmEoSMwQzAt9iuh0+fMo2kSxrcyK3adXAGCs2oqpp/gow==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_option_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>RvX08rWgIfij+CJWyeoWFdoWhE8CSADt/BkEO+YCSdPXO/NO0YOeKbiTf4NXqPZeC1hDwzhTmkOR6R+klbg5NA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_option_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>tJ2YidE/YhuTRr9xBJDfFtuuRF29nSgH+drAQu/ta9FTCs/EhKnEyvQSE4VGfY/WW3SrJ+9kaPehRQC4gZXHcg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_next_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>Wnmek8bvT8A3ktNgWHfDHez6NHIzc4kDr3T6S0MEB4ZNQrrHA/chuinT8o3JDs/2NQ/LmjoZ0MSxg5xBLNKsTA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_next_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>SzrKBQ8DcReQ48eqCs1kYsC69zmvMipmzkrIvp5/9y4hAlbB8hKdq5jibPbrVdR+ufO7xhlJqLbqnj0HA6174Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_left_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>CQHEcqdzkLy3ysc/nfPp1uinjotqlpr8z5ycNv8SbSiWTd2UoDfa/+F6nBVIAC1dWjmSAic+TYjqGCgai92jnw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_left_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>pvuei2GUGfA0KRBtX+UBIGKQHsIobotuBbJy7DINBcnE7vWlklBg+Jk0uqrSG8yA2x0D1ZMAkBzGVRpUVAUqjQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_forward_pressed.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>orSmEyhbvB30xePHWpGj7u34tIPmsdg0Y9rvZNAofJTPeC9biOrefZyg2JMhJI4006ph1t2AXKqvE89YzLeT2Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_forward_normal.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>l6MxOZh9ddHc4oR5YGDumOR9mPd8Xii1JOWZlO3e78B9tx9AnoZshRuZbrjgvzSDNUZIKKXX8T422krTR1t5tg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_viewer_control_focused.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>Kx0MhLza7cMOKlEsQOsHrqVyJ/vIBeyX/RGBAnXFaCNZxqCxrmGondVF6EoXe3YIMTrRRybftwBPjf/5lVCd8A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_music_info_play.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>d5yNzcoU3gDfXkQ/Aq5tKfrjmo5jsf8iiA64QHw5UhFBfwqp9GhamZXIwus6K1skDVrLBNY4vM59QxzKMeYM8A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_music_info_pause.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>cutZf66TWjTZtbst0VGaIk2XdJqcGWBn2ZiYZ6gthTynWxVdt5q1jojFDGE207of1UlEGZ3OmpcGAXak/6/6SQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_unselect_check_wh.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>zmMtatJJ4NyK9XIm8F/Lr+Y0D5rdGrcDMcx6irLx5sqirKWKU6gGqi6yFVpNTamT/rbkBd5W7rO9FIy+Z488zQ==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_unselect_check_bk.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>/8G0xghcNPzidiV4L90t0X/lc28ijfZv64UgaxoZaD9YQBv12aQ3EQwEEsbOVEmE10GDON/4lS+4rf6kqUtCdg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_pre.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>eXeT3ecvdUhM1/hXteindMFcEsbsCitMFmeZFT9SO9C/zcTxhizMGpMXR6cc5fMsz5L0/2lDxkCJZdpt/RGG+g==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_nor.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>M2JUit4O4PHsEsdkBlhDV2Zp2JFi4NXVBPbQ/fPCUxTh+6EJojY8hRBPGKd/a/scnLFAH/ffCJDh+mSgzK+CLA==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_for.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>bxVZHHskQ45XFtc9QfVj9YEojbEWo7AXUrlpOz+7ceEulIy/jgtxkM2BVoTLAcw/szO9+asMOVx1cTVuyJLO7g==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_check_wh.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>C9ZJbrpkanzTtxmqTCP7bLW3VO+rKbtjeja5K0CxzCGEEuZz9/Y8NJQ+p6WGsiWq8GUbWEDkQEUuSlKyZzDnqw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_select_check_bk.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>7IdXJqmey8uGoGfHVfYJ9XPpQAfnSeblDZ64xEj+1s4Wd0ETXMyVeiavVlP707RIRT6qpSMlq3dJdrWnAALu3A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_menu_pre.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>HHkN/GvaCxJrc5hN1//pFrwmkao4v3iVdPVLhKNpPTUcvn3fMfqPgpRk3t6wosh7Y15Mmm29Kqf1TMijJdacOg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_menu_nor.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>ZQrI5VpeJADx7FrPECYWet8IVqbjlrJguVYKaKB0FfTgJqplQR5zLfObe1fMTBx3JS1+WPKEIRmOI4RU9d6Qpg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_menu_foc.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>vGwcTV58GY30PZhBzbcIVXNhKPEc4QqWQCu+txOGPfcuFnuEucl5ZdFTRucxKJEJVuSonAUpFmWb3w7ijTvHdw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_menu_dis.9.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>NDV28JzE9px6shEJtMpcAQltSBUUytLMQR5ewKQytEwfinFyRvnc5JSAOkwt3xUzVI77Is3YyvUj0wwkFble7A==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_list_check_pre.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>5jsl5WLf2G9RTSNYZQVyl1To4AdcF0uge4E2g2mIEAHQELWk83fgr4H7P/AGS3WdVf+BNyL/ppAAx+hn+Y5L6Q==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_list_check_nor.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>m29Cev7uJzYAt6+pdiKyvByW99fGw9HMToQZ2T8fqfhMN+2Ws4R7IX4Tst6Va3Hf53snlEZRhHvyCsRge+9vPw==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_list_check_foc.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>UuGjPJ4LzHbpoJzn+A0yK68xIgA6YbPAJoljMWEHpt76K7LZOsD+VK1XHlViTuHj/usT+ka5B4tFRUHFoOX9Bg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_media_option_list_check_dis.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>Xg0htOiKtc27YMRoa6g+nJ0F5ME7spC3O0RwrMUwDYPZMeugofcTbIx0ca/QeXYxF2laDlxlbjzoeHzCW3GFRg==</DigestValue>
+ </Reference>
+ <Reference URI="res%2Fbtn_list_thumbnail_play.png">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>wkyLxi1xnmiCosEFBXriJlzOF1anmlngryTWPMVKE+Zj3Ri4d4PfN/nUczQYTOmkZsuRaOBUVzJcolgD5Eb4XA==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Xaml.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>cpqKDnVZS3KsRf1EYbtHBopE7GNRba0zS+pBl9IPI/aXWNexT+Opqjps5L0zHYzxPYeQ//8ZTQUCS4FRFWHPSA==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>Mkuk6OE4d2Ixb514iFGMGHdZATikDuKQLmFpaDad2N9UP0z2TyQZHHyetsCezgw/2DudjA3m/gARf/iG8+a+Xg==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Platform.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>LaeAT+53GPo09F10YfI1Yn5Xe+1cYwDCOVS+YPWIsyJ0/AZC8+liT+5AwnTxlCMx5Yb/oD+UAa2R2pDcULVgSQ==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FXamarin.Forms.Core.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>jsED0lu7awNCBzeeTZpxCFvmTu1ywtzaBkVLxbuN0HahI9NaEPkfCn0O99NXCPIsWtEESlKxSWYqO/tgpspf/w==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVMediaHub.Tizen.pdb">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>YVXasL75doN/+N0lqI/0rypO6PvhPfPLdR89ZuLncF7SOhkO9HSdZlXtaQ0fszNqc+CWTam7r/1kH3BqnO6W/A==</DigestValue>
+ </Reference>
+ <Reference URI="bin%2FTVMediaHub.Tizen.dll">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>JeWnxQNgTHeAnssfilIIzbJS7kh2LZW9GG8Ajd4g3NXii+4C9blu8nvCwyerl9l07PloXbdha+NWbgPW/fDzMQ==</DigestValue>
+ </Reference>
+ <Reference URI="author-signature.xml">
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>5TD7lCuxsFMMNOUYEb8nZQVXrmM3BC3ZRGgLK2q/X1eNTnBB8MVOpw6U5DIt0ceoNg35YoD90uFdYe73r+5dLQ==</DigestValue>
+ </Reference>
+ <Reference URI="#prop">
+ <Transforms>
+ <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
+ </Transforms>
+ <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha512" />
+ <DigestValue>5YPt7Bw2TSPBQKkKOFPZNFjzt+iifSVhnCWKlLr+/5f/JEGy9SqkT543A8UCz08tYLBNiokj1/ZsXG4PeC92qQ==</DigestValue>
+ </Reference>
+ </SignedInfo>
+ <SignatureValue>
+D6hGqeajIusHujxZd+2bDjYkBOnzSHAYrqQauDpKtPXs95mIL6q0/XsT9gPSRE8AbdhqqQ0pOHIY
+MnQ4/TpUnbTRCaQOikG3K73vwLEPJ0ljK+oW/+sEh6Dg1DqnjpT0rqtrG2rhoxbHDC73uvecT62d
+8ulVTvRdnf6H+laAg9k=
+</SignatureValue>
+ <KeyInfo>
+ <X509Data>
+ <X509Certificate>
+MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV
+BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE
+CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry
+aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS
+MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex
+IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp
+YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK
+90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H
+mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB
+hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez
+GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1
+vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc=
+</X509Certificate>
+ <X509Certificate>
+MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO
+MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw
+IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj
+IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL
+MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6
+ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb
+VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe
+OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp
+bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah
+2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ
+KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+
+yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0
+VhfnkHwPltmrpYVe
+</X509Certificate>
+ </X509Data>
+ </KeyInfo>
+ <Object Id="prop">
+ <SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties">
+ <SignatureProperty Id="profile" Target="#DistributorSignature">
+ <dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile" />
+ </SignatureProperty>
+ <SignatureProperty Id="role" Target="#DistributorSignature">
+ <dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-distributor" />
+ </SignatureProperty>
+ <SignatureProperty Id="identifier" Target="#DistributorSignature">
+ <dsp:Identifier />
+ </SignatureProperty>
+ </SignatureProperties>
+ </Object>
+</Signature>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest package="org.tizen.xamediahub" version="1.0.0" api-version="5.5" xmlns="http://tizen.org/ns/packages">
+ <profile name="tv" />
+ <ui-application appid="org.tizen.xamediahub" exec="TVMediaHub.Tizen.dll" multiple="false" nodisplay="false" taskmanage="true" type="dotnet" splash-screen-display="true" launch_mode="single">
+ <label>MediaHub</label>
+ <icon>xamediahub.png</icon>
+ <splash-screens />
+ </ui-application>
+ <shortcut-list />
+ <privileges>
+ <privilege>http://tizen.org/privilege/content.write</privilege>
+ <privilege>http://tizen.org/privilege/mediastorage</privilege>
+ <privilege>http://tizen.org/privilege/externalstorage</privilege>
+ </privileges>
+ <dependencies />
+ <provides-appdefined-privileges />
+</manifest>
<?xml version="1.0" encoding="utf-8"?>
-<manifest package="org.tizen.xamediahub" version="1.0.0" api-version="3.0" xmlns="http://tizen.org/ns/packages">
- <profile name="tv" />
- <ui-application appid="org.tizen.xamediahub" exec="TVMediaHub.Tizen.dll" multiple="false" nodisplay="false" taskmanage="true" splash-screen-display="true" type="dotnet" launch_mode="single">
- <label>MediaHub</label>
- <icon>xamediahub.png</icon>
- </ui-application>
- <shortcut-list />
- <privileges>
- <privilege>http://tizen.org/privilege/content.write</privilege>
- <privilege>http://tizen.org/privilege/mediastorage</privilege>
- <privilege>http://tizen.org/privilege/externalstorage</privilege>
- </privileges>
+<manifest package="org.tizen.xamediahub" version="1.0.0" api-version="5.5" xmlns="http://tizen.org/ns/packages">
+ <profile name="tv" />
+ <ui-application appid="org.tizen.xamediahub" exec="TVMediaHub.Tizen.dll" multiple="false" nodisplay="false" taskmanage="true" type="dotnet" splash-screen-display="true" launch_mode="single">
+ <label>MediaHub</label>
+ <icon>xamediahub.png</icon>
+ <splash-screens />
+ </ui-application>
+ <shortcut-list />
+ <privileges>
+ <privilege>http://tizen.org/privilege/content.write</privilege>
+ <privilege>http://tizen.org/privilege/mediastorage</privilege>
+ <privilege>http://tizen.org/privilege/externalstorage</privilege>
+ </privileges>
+ <dependencies />
+ <provides-appdefined-privileges />
</manifest>