2 * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 namespace Tizen.Applications.Notifications
19 using System.Collections.Generic;
22 /// Class containing common properties and methods of Notifications
25 /// A notification is a message that is displayed on the notification area.
26 /// It is created to notify information to the user through the application.
27 /// This class helps you to provide method and property for creating notification object.
29 public sealed partial class Notification
32 /// Class for generating Active style notification
34 public sealed class ActiveStyle : StyleBase
36 private IDictionary<ButtonIndex, ButtonAction> buttonDictionary;
37 private int hideTimeout = 0;
38 private int deleteTimeout = 0;
41 /// Initializes a new instance of the <see cref="ActiveStyle"/> class.
45 buttonDictionary = new Dictionary<ButtonIndex, ButtonAction>();
49 /// Gets or sets an absolute path for an image file to display on the background of active notification
51 public string BackgroundImage { get; set; }
54 /// Gets or sets a value indicating whether the active notification is removed automatically. Default value is true.
57 /// IsAutoRemove option lets the active notification be removed several seconds after it shows.
58 /// When 'IsAutoRemove' is set as false, the active notification will not be removed as long as the user removes
59 /// the active notification or the app which posted the active notification removes the active notification.
61 public bool IsAutoRemove { get; set; } = true;
64 /// Gets or sets a ReplyAction to this active notification style.
67 /// When you add a ReplyAction to the ActiveStyle, the notification UI will show a ReplyAction with button.
68 /// If you set null parameter, ReplyAction is disappeared.
73 /// ButtonAction button = new ButtonAction
75 /// Index = ButtonIndex.First,
77 /// Action = new AppControl{ ApplicationId = "org.tizen.app" };
80 /// ReplyAction reply = new ReplyAction
82 /// ParentIndex = ButtonIndex.First;
83 /// PlaceHolderText = "Please write your reply."
85 /// Button = new ButtonAction
88 /// ImagePath = "image path"
89 /// Action = new AppControl{ ApplicationId = "org.tizen.app" };
93 /// ActiveStyle active = new ActiveStyle
95 /// AutoRemove = true,
96 /// BackgroundImage = "image path",
97 /// ReplyAction = reply
100 /// active.AddButtonAction(button);
103 public ReplyAction ReplyAction { get; set; }
106 /// Gets the key of ActiveStyle
108 internal override string Key
117 /// Method to set times to hide or delete notification.
120 /// The time settings for hiding and deleting are only reflected on Tizen TV.
121 /// If you use this API on other profile, this time settings have no effect
123 /// <param name="hideTime">The value in second when the notification can be hidden from the notification viewer after notification is posted</param>
124 /// <param name="deleteTime">The value in second when the notification can be deleted from the notification list in setting application after notification is posted</param>
125 /// <exception cref="ArgumentException">Thrown when argument is invalid</exception>
126 public void SetRemoveTime(int hideTime, int deleteTime)
128 if (hideTime < 0 || deleteTime < 0)
130 throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "invalid argument");
133 hideTimeout = hideTime;
134 deleteTimeout = deleteTime;
138 /// Method to get times to hide or delete notification.
140 /// <param name="hideTime">The value in second when the notification can be hidden from the notification viewer after notification is posted</param>
141 /// <param name="deleteTime">The value in second when the notification can be deleted from the notification list in setting application after notification is posted</param>
142 public void GetRemoveTime(out int hideTime, out int deleteTime)
144 hideTime = hideTimeout;
145 deleteTime = deleteTimeout;
149 /// Method to add a button to the active notification style.
150 /// Buttons are displayed on the notification.
153 /// If you add button that has same index, the button is replaced to latest adding button.
154 /// If you don't set an index on ButtonAction, the index is set sequentially from zero.
156 /// <param name="button">An ButtonAction for appear to the notification</param>
157 /// <exception cref="ArgumentException">Thrown when argument is invalid</exception>
161 /// ButtonAction button = new ButtonAction
165 /// Action = new AppControl{ ApplicationId = "org.tizen.app" };
168 /// ActiveStyle active = new ActiveStyle
170 /// IsAutoRemove = true,
171 /// BackgroundImage = "image path",
174 /// active.AddButtonAction(button);
178 public void AddButtonAction(ButtonAction button)
182 throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "invalid ButtonAction object");
185 if (button.Index == ButtonIndex.None)
187 button.Index = (ButtonIndex)buttonDictionary.Count;
188 buttonDictionary.Add(button.Index, button);
190 else if (button.Index >= ButtonIndex.First)
192 if (buttonDictionary.ContainsKey(button.Index))
194 buttonDictionary.Remove(button.Index);
197 buttonDictionary.Add(button.Index, button);
202 /// Remove the ButtonAction you already add.
204 /// <param name="index">The index to remove a button</param>
205 /// <returns>true if the element is successfully found and removed; otherwise, false</returns>
206 public bool RemoveButtonAction(ButtonIndex index)
208 bool ret = buttonDictionary.Remove(index);
212 Log.Debug(Notification.LogTag, "Invalid key, there is no button matched input index");
216 Log.Debug(Notification.LogTag, "The button was removed.");
223 /// Gets the ButtonAction of the active notification.
225 /// <param name="index">The index to get a button you already add</param>
226 /// <returns>The ButtonAction object which is you already add</returns>
227 /// <exception cref="ArgumentException">Thrown when argument is invalid</exception>
228 public ButtonAction GetButtonAction(ButtonIndex index)
230 ButtonAction button = null;
232 if (buttonDictionary.ContainsKey(index) == true)
234 buttonDictionary.TryGetValue(index, out button);
238 throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "The value is not existed.");
244 internal ICollection<ButtonAction> GetButtonAction()
246 return buttonDictionary.Values;
249 internal override void Make(Notification notification)
251 ActiveBinder.BindObject(notification);