1. Dark and Light Theme Implementation.
2. Detailed Notifications Option.
Change-Id: Iff6b4059ea8eb5359bed027c01e181aa26558daa
Signed-off-by: Shivam Varshney/Core S/W Group /SRI-Delhi/Engineer/Samsung Electronics <shivam.v2@samsung.com>
.vscode/*
**/[Bb]in/
**/[Oo]bj/
+**/*.csproj.user
[Bb]uild/
[Dd]ebug/
.gn
public const string LightPlatformThemeId = "org.tizen.default-light-theme";
public const string DarkPlatformThemeId = "org.tizen.default-dark-theme";
+ public static Color LightBorderColor = new Color(0.9804f, 0.9804f, 0.9804f, 0.35f);
+ public static Color DarkBorderColor = new Color(0.0863f, 0.0745f, 0.0980f, 0.50f);
+
public static Size2D DefaultWindowSize = new Size2D(960, 540);
- public static Size2D IconSize = new Size2D(48, 48);
- public static Size2D SmallIconSize = new Size2D(32, 32);
- public static Size2D TextButtonSize = new Size2D(150, 48);
public static Position2D DefaultWindowPosition = new Position2D(480, 170);
public const int BorderHeight = 52;
public const int HeaderHeight = 64;
- public const int TitlePixelSize = 24;
+ public const int NotificationItemHeight = 80;
+ public static Vector4 BorderCornerRadius = new Vector4(24, 24, 24, 24);
public static Vector4 BaseViewCornerRadius = new Vector4(24, 24, 24, 24);
public static Extents BaseViewPadding = new Extents(0, 0, 20, 20);
public static Extents HeaderPadding = new Extents(16, 16, 8, 8);
+ public static Extents DetailContentMargin = new Extents(64, 64, 8, 8);
}
}
{
class CustomBorder : DefaultBorder
{
+ private ImageView minimizeIcon;
private ImageView maximalizeIcon;
private ImageView closeIcon;
private ImageView leftCornerIcon;
public CustomBorder() : base()
{
+ ThemeManager.ThemeChanged += OnThemeChanged;
+ }
+
+ private void OnThemeChanged(object sender, ThemeChangedEventArgs e)
+ {
+ if (e.IsPlatformThemeChanged)
+ {
+ if (borderView != null)
+ {
+ borderView.BackgroundColor = ThemeManager.PlatformThemeId == AppConstants.LightPlatformThemeId ? AppConstants.LightBorderColor : AppConstants.DarkBorderColor;
+ }
+ }
}
public override void CreateBorderView(View borderView)
{
this.borderView = borderView;
- borderView.CornerRadius = new Vector4(24, 24, 24, 24);
+ borderView.CornerRadius = AppConstants.BorderCornerRadius;
borderView.CornerRadiusPolicy = VisualTransformPolicyType.Relative;
- borderView.BackgroundColor = new Color(1, 1, 1, 0.3f);
+ borderView.BackgroundColor = ThemeManager.PlatformThemeId == AppConstants.LightPlatformThemeId ? AppConstants.LightBorderColor : AppConstants.DarkBorderColor;
}
public override bool CreateBottomBorderView(View bottomView)
return false;
}
bottomView.Layout = new RelativeLayout();
+
+ minimizeIcon = new ImageView()
+ {
+ Focusable = true,
+ ResourceUrl = Resources.GetImagePath() + "/minimize.png",
+ AccessibilityHighlightable = true,
+ };
+
maximalizeIcon = new ImageView()
{
Focusable = true,
AccessibilityHighlightable = true,
};
+ RelativeLayout.SetRightTarget(minimizeIcon, maximalizeIcon);
+ RelativeLayout.SetRightRelativeOffset(minimizeIcon, 0.0f);
+ RelativeLayout.SetHorizontalAlignment(minimizeIcon, RelativeLayout.Alignment.End);
+
RelativeLayout.SetRightTarget(maximalizeIcon, closeIcon);
RelativeLayout.SetRightRelativeOffset(maximalizeIcon, 0.0f);
RelativeLayout.SetHorizontalAlignment(maximalizeIcon, RelativeLayout.Alignment.End);
RelativeLayout.SetHorizontalAlignment(rightCornerIcon, RelativeLayout.Alignment.End);
bottomView.Add(leftCornerIcon);
+ bottomView.Add(minimizeIcon);
bottomView.Add(maximalizeIcon);
bottomView.Add(closeIcon);
bottomView.Add(rightCornerIcon);
+ minimizeIcon.TouchEvent += OnMinimizeIconTouched;
maximalizeIcon.TouchEvent += OnMaximizeIconTouched;
closeIcon.TouchEvent += OnCloseIconTouched;
leftCornerIcon.TouchEvent += OnLeftBottomCornerIconTouched;
rightCornerIcon.TouchEvent += OnRightBottomCornerIconTouched;
+
+ minimizeIcon.AccessibilityActivated += (s, e) =>
+ {
+ MinimizeBorderWindow();
+ };
+
maximalizeIcon.AccessibilityActivated += (s, e) =>
{
MaximizeBorderWindow();
CloseBorderWindow();
};
+ minimizeIcon.AccessibilityNameRequested += (s, e) =>
+ {
+ e.Name = "Minimize";
+ };
+
maximalizeIcon.AccessibilityNameRequested += (s, e) =>
{
e.Name = "Maximize";
e.Name = "Resize";
};
+ minimizeIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
maximalizeIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
closeIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
leftCornerIcon.SetAccessibilityReadingInfoTypes(Tizen.NUI.BaseComponents.AccessibilityReadingInfoTypes.Name);
{
public event PropertyChangedEventHandler PropertyChanged;
- private readonly string appId;
- private readonly int uniqueNumber;
-
public NotificationsModel(string appId, int uniqueNumber, string title, string content)
{
- this.appId = appId;
- this.uniqueNumber = uniqueNumber;
+ AppId = appId;
+ UniqueNumber = uniqueNumber;
this.title = title ?? string.Empty;
subTitle = content ?? string.Empty;
ClearNotificationCommand = new Command(OnNotificationCleared);
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
+ public string AppId { get; internal set; }
+ public int UniqueNumber { get; internal set; }
+
private string title;
public string Title
{
{
try
{
- NotificationListenerManager.Delete(appId, uniqueNumber);
+ NotificationListenerManager.Delete(AppId, UniqueNumber);
}
catch (Exception ex)
{
using System.Collections.Generic;
+using Tizen.Applications;
using Tizen.NUI;
using Notifications.Common;
-using Notifications.Views;
-using Tizen.Applications;
namespace Notifications
{
{
private Window window;
private ViewManager viewManager;
+
public Program() : base(AppConstants.DefaultWindowSize, AppConstants.DefaultWindowPosition, ThemeOptions.PlatformThemeEnabled, new CustomBorder())
{
}
+
protected override void OnCreate()
{
base.OnCreate();
UpdateWindowSize();
UpdateWindowPosition();
window.BackgroundColor = Color.Transparent;
- window.KeyEvent += OnKeyEvent;
- window.Resized += OnWindowResized;
window.OrientationChanged += OnWindowOrientationChanged;
viewManager = new ViewManager();
- Tizen.Log.Info(AppConstants.LogTag, "Show Window");
}
private void UpdateWindowSize()
Tizen.Log.Info(AppConstants.LogTag, "position Y is: " + window.WindowPosition.Y);
}
- private void OnWindowResized(object sender, Window.ResizedEventArgs e)
- {
- Tizen.Log.Debug(AppConstants.LogTag, "Resized Event");
- viewManager.UpdateViewOnResize();
- }
-
private void OnWindowOrientationChanged(object sender, WindowOrientationChangedEventArgs e)
{
Tizen.Log.Debug(AppConstants.LogTag, "orientation changed" + e.WindowOrientation);
DeviceInfo.UpdateDeviceInfo();
UpdateWindowSize();
UpdateWindowPosition();
- viewManager.UpdateViewOnResize();
- }
-
- public void OnKeyEvent(object sender, Window.KeyEventArgs e)
- {
- if (e.Key.State == Key.StateType.Down && (e.Key.KeyPressedName == "XF86Back" || e.Key.KeyPressedName == "Escape"))
- {
- Exit();
- }
}
protected override void OnAppControlReceived(AppControlReceivedEventArgs e)
app.Run(args);
}
}
-}
+}
\ No newline at end of file
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>tizen11.0</TargetFramework>
+ <AssemblyName>Notifications</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>None</DebugType>
</PropertyGroup>
-
+
<ItemGroup>
- <Folder Include="lib\" />
- <Folder Include="res\images\" />
+ <None Update="res\themes\dark.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ </None>
+ <None Update="res\themes\light.xaml">
+ <Generator>MSBuild:Compile</Generator>
+ </None>
</ItemGroup>
</Project>
--- /dev/null
+using System;
+using System.IO;
+using Tizen.Applications.NotificationEventListener;
+using Tizen.NUI;
+using Tizen.NUI.Xaml;
+using Notifications.Common;
+using Notifications.ViewModels;
+using Notifications.Views;
+
+namespace Notifications
+{
+ class ViewManager
+ {
+ private NotificationsViewModel notificationsViewModel;
+ private NotificationsDetailViewModel notificationsDetailViewModel;
+ private BaseView baseView;
+ public ViewManager()
+ {
+ notificationsViewModel = new NotificationsViewModel();
+ notificationsViewModel.NotificationSelected += OnNotificationSelected;
+ UpdateTheme(ThemeManager.PlatformThemeId);
+ baseView = new BaseView();
+ baseView.BindingContext = notificationsViewModel;
+ baseView.BackKeyPressed += OnBackKeyPressed;
+ Window.Instance.Add(baseView);
+
+ ThemeManager.ThemeChanged += OnThemeChanged;
+ }
+
+ private void OnThemeChanged(object sender, ThemeChangedEventArgs e)
+ {
+ if (e.IsPlatformThemeChanged)
+ {
+ Tizen.Log.Info(AppConstants.LogTag, "Theme Changed: " + e.ThemeId);
+ UpdateTheme(e.PlatformThemeId);
+ }
+ }
+
+ private void OnBackKeyPressed(object sender, EventArgs e)
+ {
+ if(baseView.BackKeyEventEmitted() == true)
+ {
+ Tizen.Applications.Application.Current.Exit();
+ }
+ }
+
+ private void OnNotificationSelected(object sender, NotificationEventArgs e)
+ {
+ notificationsDetailViewModel = new NotificationsDetailViewModel(e.AppID, e.Content);
+ notificationsDetailViewModel.DetailContentRemoved += OnDetailContentRemoved;
+ baseView.BindingContext = notificationsDetailViewModel;
+ baseView.AddDetailContentView();
+ }
+
+ private void OnDetailContentRemoved()
+ {
+ notificationsDetailViewModel.DetailContentRemoved -= OnDetailContentRemoved;
+ baseView.BindingContext = notificationsViewModel;
+ baseView.UpdateContent();
+ }
+
+ private void SetTheme(string path)
+ {
+ try
+ {
+ Theme theme = new Theme(path);
+ ThemeManager.ApplyTheme(theme);
+ }
+ catch (ArgumentNullException e)
+ {
+ Tizen.Log.Error(AppConstants.LogTag, "ArgumentNullException: " + e.ParamName);
+ }
+ catch (IOException e)
+ {
+ Tizen.Log.Error(AppConstants.LogTag, "IOException: " + e.Message);
+ }
+ catch (XamlParseException e)
+ {
+ Tizen.Log.Error(AppConstants.LogTag, "XamlParseException: " + e.Message);
+ if (e.XmlInfo != null)
+ {
+ Tizen.Log.Error(AppConstants.LogTag, "XamlParseException, LineNo." + e.XmlInfo.LineNumber + " Pos: " + e.XmlInfo.LinePosition + " HasInfo: " + e.XmlInfo.HasLineInfo().ToString());
+ }
+ }
+ }
+ private void UpdateTheme(string platformThemeId)
+ {
+ if (platformThemeId == null)
+ {
+ Tizen.Log.Error(AppConstants.LogTag, "Platform theme id is null");
+ return;
+ }
+ if (platformThemeId.Equals(AppConstants.LightPlatformThemeId))
+ {
+ SetTheme(Resources.GetThemePath() + "light.xaml");
+ }
+ else if (platformThemeId.Equals(AppConstants.DarkPlatformThemeId))
+ {
+ SetTheme(Resources.GetThemePath() + "dark.xaml");
+ }
+ }
+ }
+}
--- /dev/null
+using System;
+using System.ComponentModel;
+using Tizen.Applications;
+using Tizen.NUI.Binding;
+using Notifications.Common;
+
+namespace Notifications.ViewModels
+{
+ class NotificationsDetailViewModel : INotifyPropertyChanged
+ {
+ public event PropertyChangedEventHandler PropertyChanged;
+ public event Action DetailContentRemoved;
+
+ public NotificationsDetailViewModel(string appId, string text)
+ {
+ AppId = appId;
+ DetailContent = text ?? "Detail Content Absent";
+ BackCommand = new Command(OnBackPressed);
+ AppLaunchCommand = new Command(OnAppLaunched);
+ }
+
+ public string AppId { get; internal set; }
+
+ private void OnPropertyChanged(string propertyName)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+
+ private string detailContent;
+ public string DetailContent
+ {
+ get => detailContent;
+ set
+ {
+ detailContent = value;
+ OnPropertyChanged("DetailContent");
+ }
+ }
+
+ private Command backCommand;
+ public Command BackCommand
+ {
+ get => backCommand;
+ set
+ {
+ backCommand = value;
+ OnPropertyChanged("BackCommand");
+ }
+ }
+
+ private void OnBackPressed()
+ {
+ DetailContentRemoved.Invoke();
+ }
+
+ private Command appLaunchCommand;
+ public Command AppLaunchCommand
+ {
+ get => appLaunchCommand;
+ set
+ {
+ appLaunchCommand = value;
+ OnPropertyChanged("AppLaunchCommand");
+ }
+ }
+
+ private void OnAppLaunched()
+ {
+ AppControl appControl = new AppControl()
+ {
+ ApplicationId = AppId,
+ Operation = AppControlOperations.Default,
+ };
+ try
+ {
+ AppControl.SendLaunchRequest(appControl);
+ }
+ catch (Exception ex)
+ {
+ Tizen.Log.Error(AppConstants.LogTag, "exception: " + ex.Message);
+ }
+ }
+ }
+}
using Tizen.Applications.NotificationEventListener;
using Tizen.NUI;
using Tizen.NUI.Binding;
+using Tizen.NUI.Components;
+using Notifications.Models;
namespace Notifications.ViewModels
{
class NotificationsViewModel : IDisposable, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
+ public event EventHandler<NotificationEventArgs> NotificationSelected;
public NotificationsViewModel()
{
BackCommand = new Command(OnBackPressed);
ClearAllNotificationsCommand = new Command(OnAllNotificationsCleared);
+ SelectionChangedCommand = new Command(OnSelectionChanged);
NotificationListenerManager.Added += OnNotificationAdded;
NotificationListenerManager.Deleted += OnNotificationDeleted;
{
NotificationListenerManager.DeleteAll();
}
+
+ private Command selectionChangedCommand;
+ public Command SelectionChangedCommand
+ {
+ get => selectionChangedCommand;
+ set
+ {
+ selectionChangedCommand = value;
+ OnPropertyChanged("SelectionChangedCommand");
+ }
+ }
+
+ private void OnSelectionChanged(object selectionChangedParameter)
+ {
+ if (selectionChangedParameter is SelectionChangedEventArgs e)
+ {
+ if (e.CurrentSelection.Count != 0 && e.CurrentSelection[0] is NotificationsModel notificationsModel)
+ {
+ var notificationsList = NotificationListenerManager.GetList();
+ foreach (NotificationEventArgs notificationArgs in notificationsList)
+ {
+ if (notificationArgs.UniqueNumber == notificationsModel.UniqueNumber)
+ {
+ NotificationSelected?.Invoke(this, notificationArgs);
+ }
+ }
+ }
+ }
+ }
}
}
private View topView;
private Button backButton;
private TextLabel titleText;
- private CollectionView notificationsView;
- private View bottomView;
private Button clearAllButton;
+ private CollectionView notificationsView;
private TextLabel noNotificationsText;
+ private Button detailContentView;
public BaseView() : base()
{
- Size2D = new Size2D(Window.Instance.WindowSize.Width, Window.Instance.WindowSize.Height);
- BackgroundColor = new Color("#FAFAFA");
+ StyleName = "BaseView";
+ WidthResizePolicy = ResizePolicyType.FillToParent;
+ HeightResizePolicy = ResizePolicyType.FillToParent;
CornerRadius = AppConstants.BaseViewCornerRadius;
Layout = new LinearLayout()
{
this.SetBinding(IsContentAvailableProperty, "IsNotificationsPresent");
}
+ public void UpdateContent()
+ {
+ RemoveContent();
+
+ if (IsContentAvailable == true)
+ {
+ AddNotificationsView();
+ AddClearAllButton();
+ }
+ else
+ {
+ AddNoNotificationsText();
+ }
+ }
+
+ public void AddDetailContentView()
+ {
+
+ RemoveContent();
+ if (detailContentView == null)
+ {
+ detailContentView = new Button()
+ {
+ StyleName = "DetailContentView",
+ WidthSpecification = LayoutParamPolicies.MatchParent,
+ HeightSpecification = LayoutParamPolicies.WrapContent,
+ Margin = AppConstants.DetailContentMargin.SpToPx(),
+ };
+ detailContentView.SetBinding(Button.TextProperty, "DetailContent");
+ detailContentView.SetBinding(Control.CommandProperty, "AppLaunchCommand");
+ }
+ Add(detailContentView);
+ }
+
+ public bool BackKeyEventEmitted()
+ {
+ if (detailContentView != null && detailContentView.GetParent() == this)
+ {
+ backButton.Command.Execute(null);
+ return false;
+ }
+ return true;
+ }
+
private void AddTopView()
{
topView = new View()
private void AddTopViewElements()
{
- backButton = new Button()
- {
- Size2D = AppConstants.IconSize.SpToPx(),
- IconURL = Resources.GetImagePath() + "/light/back.png",
- BackgroundColor = Color.Transparent,
- };
- backButton.Icon.Size2D = AppConstants.IconSize.SpToPx();
+ backButton = new Button("BackButton");
RelativeLayout.SetVerticalAlignment(backButton, RelativeLayout.Alignment.Center);
RelativeLayout.SetHorizontalAlignment(backButton, RelativeLayout.Alignment.Start);
backButton.SetBinding(Control.CommandProperty, "BackCommand");
titleText = new TextLabel()
{
+ StyleName = "TitleText",
Text = "Notifications",
HeightSpecification = LayoutParamPolicies.MatchParent,
VerticalAlignment = VerticalAlignment.Center,
- FontFamily = "BreezeSans",
- PixelSize = AppConstants.TitlePixelSize.SpToPx(),
- TextColor = new Color("#090E21"),
};
RelativeLayout.SetLeftTarget(titleText, backButton);
RelativeLayout.SetLeftRelativeOffset(titleText, 1.0f);
topView.Add(titleText);
}
- private void UpdateContent()
- {
- RemoveContent();
-
- if (IsContentAvailable == true)
- {
- AddNotificationsView();
- AddBottomView();
- }
- else
- {
- AddNoNotificationsText();
- }
- }
-
private void RemoveContent()
{
Remove(noNotificationsText);
Remove(notificationsView);
- Remove(bottomView);
+ Remove(detailContentView);
+ topView?.Remove(clearAllButton);
}
private void AddNotificationsView()
{
DefaultLinearItem item = new DefaultLinearItem();
item.WidthSpecification = LayoutParamPolicies.MatchParent;
+ item.HeightSpecification = AppConstants.NotificationItemHeight.SpToPx();
+ item.Label.StyleName = "TitleText";
item.Label.SetBinding(TextLabel.TextProperty, "Title");
item.Label.HorizontalAlignment = HorizontalAlignment.Begin;
- item.Label.FontFamily = "BreezeSans";
+ item.Label.VerticalAlignment = VerticalAlignment.Bottom;
+ item.SubLabel.StyleName = "TitleText";
item.SubLabel.SetBinding(TextLabel.TextProperty, "SubTitle");
item.SubLabel.HorizontalAlignment = HorizontalAlignment.Begin;
- item.SubLabel.FontFamily = "BreezeSans";
- item.Extra = new Button()
- {
- Size2D = AppConstants.SmallIconSize.SpToPx().SpToPx(),
- IconURL = Resources.GetImagePath() + "/light/clear.png",
- BackgroundColor = Color.Transparent,
- };
- (item.Extra as Button).Icon.Size2D = AppConstants.SmallIconSize.SpToPx().SpToPx();
+ item.SubLabel.VerticalAlignment = VerticalAlignment.Top;
+ item.Extra = new Button("ClearButton");
item.Extra.SetBinding(Control.CommandProperty, "ClearNotificationCommand");
return item;
}),
SelectionMode = ItemSelectionMode.Single,
};
notificationsView.SetBinding(RecyclerView.ItemsSourceProperty, "NotificationsListSource");
+ notificationsView.SetBinding(CollectionView.SelectionChangedCommandProperty, "SelectionChangedCommand");
}
+ notificationsView.SelectedItem = null;
Add(notificationsView);
}
- private void AddBottomView()
+ private void AddClearAllButton()
{
- if (bottomView == null)
- {
- bottomView = new View()
- {
- WidthSpecification = LayoutParamPolicies.MatchParent,
- HeightSpecification = AppConstants.HeaderHeight.SpToPx(),
- Layout = new RelativeLayout()
- {
- Padding = AppConstants.HeaderPadding.SpToPx(),
- },
- };
- }
if (clearAllButton == null)
{
- clearAllButton = new Button()
- {
- Size2D = AppConstants.TextButtonSize.SpToPx(),
- Text = "Clear All",
- TextColor = new Color("#FF6200"),
- FontFamily = "BreezeSans",
- BackgroundColor = Color.Transparent,
- TextAlignment = HorizontalAlignment.Center,
- };
+ clearAllButton = new Button("ClearAllButton");
RelativeLayout.SetVerticalAlignment(clearAllButton, RelativeLayout.Alignment.Center);
RelativeLayout.SetHorizontalAlignment(clearAllButton, RelativeLayout.Alignment.End);
clearAllButton.SetBinding(Control.CommandProperty, "ClearAllNotificationsCommand");
- bottomView.Add(clearAllButton);
}
- Add(bottomView);
+ topView?.Add(clearAllButton);
}
private void AddNoNotificationsText()
{
noNotificationsText = new TextLabel()
{
+ StyleName = "TitleText",
Text = "You don't have notifications",
- HorizontalAlignment = HorizontalAlignment.Center,
- VerticalAlignment = VerticalAlignment.Center,
- FontFamily = "BreezeSans",
- PixelSize = AppConstants.TitlePixelSize.SpToPx(),
- TextColor = new Color("#090E21"),
WidthSpecification = LayoutParamPolicies.MatchParent,
HeightSpecification = LayoutParamPolicies.MatchParent,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
};
}
Add(noNotificationsText);
+++ /dev/null
-using Tizen.NUI;
-using Notifications.ViewModels;
-
-namespace Notifications.Views
-{
- class ViewManager
- {
- public NotificationsViewModel notificationsViewModel;
- private BaseView baseView;
- public ViewManager()
- {
- notificationsViewModel = new NotificationsViewModel();
- baseView = new BaseView();
- baseView.BindingContext = notificationsViewModel;
- Window.Instance.Add(baseView);
- }
-
- public void UpdateViewOnResize()
- {
- if (baseView != null)
- {
- baseView.Size2D = new Size2D(Window.Instance.WindowSize.Width, Window.Instance.WindowSize.Height);
- }
- }
- }
-}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Theme
+xmlns="http://tizen.org/Tizen.NUI/2018/XAML"
+xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
+xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
+Id="DarkTheme">
+
+ <ViewStyle x:Key="BaseView" ThemeChangeSensitive="true" BackgroundColor="#16131A" />
+
+ <TextLabelStyle x:Key="TitleText" ThemeChangeSensitive="true" FontFamily="BreezeSans" TextColor="#FDFDFD" PixelSize="24sp" />
+
+ <c:ButtonStyle x:Key="BackButton" ThemeChangeSensitive="true" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Icon>
+ <ImageViewStyle Size="48sp, 48sp">
+ <ImageViewStyle.ResourceUrl>
+ <Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/back.png" />
+ </ImageViewStyle.ResourceUrl>
+ </ImageViewStyle>
+ </c:ButtonStyle.Icon>
+ </c:ButtonStyle>
+
+ <c:ButtonStyle x:Key="ClearButton" ThemeChangeSensitive="true" Size="32sp, 32sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Icon>
+ <ImageViewStyle Size="32sp, 32sp">
+ <ImageViewStyle.ResourceUrl>
+ <Selector x:TypeArguments="x:String" Normal="*Resource*/images/dark/clear.png" />
+ </ImageViewStyle.ResourceUrl>
+ </ImageViewStyle>
+ </c:ButtonStyle.Icon>
+ </c:ButtonStyle>
+
+ <c:ButtonStyle x:Key="ClearAllButton" ThemeChangeSensitive="true" Size="150sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Text>
+ <TextLabelStyle FontFamily="BreezeSans" TextColor="#FF8A00" Text="Clear All" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+ </c:ButtonStyle.Text>
+ </c:ButtonStyle>
+
+ <c:ButtonStyle x:Key="DetailContentView" ThemeChangeSensitive="true" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Text>
+ <TextLabelStyle FontFamily="BreezeSans" TextColor="#FDFDFD" HorizontalAlignment="Begin" MultiLine="true" />
+ </c:ButtonStyle.Text>
+ </c:ButtonStyle>
+
+</Theme>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<Theme
+xmlns="http://tizen.org/Tizen.NUI/2018/XAML"
+xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
+xmlns:c="clr-namespace:Tizen.NUI.Components;assembly=Tizen.NUI.Components"
+Id="LightTheme">
+
+ <ViewStyle x:Key="BaseView" ThemeChangeSensitive="true" BackgroundColor="#FAFAFA" />
+
+ <TextLabelStyle x:Key="TitleText" ThemeChangeSensitive="true" FontFamily="BreezeSans" TextColor="#090E21" PixelSize="24sp" />
+
+ <c:ButtonStyle x:Key="BackButton" ThemeChangeSensitive="true" Size="48sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Icon>
+ <ImageViewStyle Size="48sp, 48sp">
+ <ImageViewStyle.ResourceUrl>
+ <Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/back.png" />
+ </ImageViewStyle.ResourceUrl>
+ </ImageViewStyle>
+ </c:ButtonStyle.Icon>
+ </c:ButtonStyle>
+
+ <c:ButtonStyle x:Key="ClearButton" ThemeChangeSensitive="true" Size="32sp, 32sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Icon>
+ <ImageViewStyle Size="32sp, 32sp">
+ <ImageViewStyle.ResourceUrl>
+ <Selector x:TypeArguments="x:String" Normal="*Resource*/images/light/clear.png" />
+ </ImageViewStyle.ResourceUrl>
+ </ImageViewStyle>
+ </c:ButtonStyle.Icon>
+ </c:ButtonStyle>
+
+ <c:ButtonStyle x:Key="ClearAllButton" ThemeChangeSensitive="true" Size="150sp, 48sp" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Text>
+ <TextLabelStyle FontFamily="BreezeSans" TextColor="#FF6200" Text="Clear All" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+ </c:ButtonStyle.Text>
+ </c:ButtonStyle>
+
+ <c:ButtonStyle x:Key="DetailContentView" ThemeChangeSensitive="true" IsSelectable="false" IsEnabled="true" BackgroundColor="Transparent" >
+ <c:ButtonStyle.Text>
+ <TextLabelStyle FontFamily="BreezeSans" TextColor="#090E21" HorizontalAlignment="Begin" MultiLine="true" />
+ </c:ButtonStyle.Text>
+ </c:ButtonStyle>
+
+</Theme>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns="http://tizen.org/ns/packages" api-version="7.0" package="org.tizen.Notifications" version="1.0.0">
+<manifest xmlns="http://tizen.org/ns/packages" api-version="7.0" package="org.tizen.notifications" version="1.0.0">
<profile name="common" />
- <ui-application appid="org.tizen.Notifications" exec="Notifications.dll" type="dotnet" multiple="false" taskmanage="true" nodisplay="false" launch_mode="single" api-version="11">
+ <ui-application appid="org.tizen.notifications" exec="Notifications.dll" type="dotnet" multiple="false" taskmanage="true" nodisplay="true" launch_mode="single" api-version="11">
<label>Notifications</label>
<icon>Notifications.png</icon>
<metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" />
</ui-application>
<privileges>
<privilege>http://tizen.org/privilege/notification</privilege>
+ <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+ <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
</privileges>
</manifest>