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 /// This class contains 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 to 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 /// it or the application, which posted the active notification.
61 public bool IsAutoRemove { get; set; } = true;
64 /// Gets or sets the default button to display highlight on the active notification.
67 /// The default button for display highlight is only reflected on the Tizen TV.
68 /// If you use this property on other profile, this value has no effect.
70 public ButtonIndex DefaultButton { get; set; } = ButtonIndex.None;
73 /// Gets or sets a ReplyAction to this active notification style.
76 /// When you add a ReplyAction to the ActiveStyle, the notification UI will show a ReplyAction with button.
77 /// If you set null parameter, ReplyAction is not displayed.
82 /// ButtonAction button = new ButtonAction
84 /// Index = ButtonIndex.First,
86 /// Action = new AppControl{ ApplicationId = "org.tizen.app" };
89 /// ReplyAction reply = new ReplyAction
91 /// ParentIndex = ButtonIndex.First;
92 /// PlaceHolderText = "Please write your reply."
94 /// Button = new ButtonAction
97 /// ImagePath = "image path"
98 /// Action = new AppControl{ ApplicationId = "org.tizen.app" };
102 /// ActiveStyle active = new ActiveStyle
104 /// AutoRemove = true,
105 /// BackgroundImage = "image path",
106 /// ReplyAction = reply
109 /// active.AddButtonAction(button);
112 public ReplyAction ReplyAction { get; set; }
115 /// Gets or sets Action which is invoked when notification is hidden by user.
118 /// If you set it to null, the already set AppControl will be removed and nothing will happen when notification is hidden by user.
119 /// The property is only reflected on Tizen TV.
120 /// If you use this API on other profile, this action have no effect
122 /// <seealso cref="Tizen.Applications.AppControl"></seealso>
123 public AppControl HiddenByUserAction { get; set; }
126 /// Gets or sets Action which is invoked when there is no any response by user until hide timeout.
129 /// This action occurs when there is no response to the notification until the delete timeout set by SetRemoveTime().
130 /// If you set it to null, the already set AppControl will be removed and nothing will happen when notification is hidden by timeout.
131 /// The property is only reflected on Tizen TV.
132 /// If you use this API on other profile, this action settings have no effect
134 /// <seealso cref="Tizen.Applications.AppControl"></seealso>
135 public AppControl HiddenByTimeoutAction { get; set; }
138 /// Gets or sets Action which is invoked when the notification is hidden by external factor.
141 /// If you set it to null, the already set AppControl will be removed and nothing will happen when notification is hidden by external factor.
142 /// The property is only reflected on Tizen TV.
143 /// If you use this API on other profile, this action settings have no effect
145 /// <seealso cref="Tizen.Applications.AppControl"></seealso>
146 public AppControl HiddenByExternalAction { get; set; }
149 /// Gets the key of ActiveStyle.
151 internal override string Key
160 /// Method to set time to hide or delete notification.
163 /// The time settings for hiding and deleting are only reflected on the Tizen TV.
164 /// If you use this API on other profile, this time settings have no effect.
166 /// <param name="hideTime">The value in seconds when the notification can be hidden from the notification viewer after the notification is posted.</param>
167 /// <param name="deleteTime">The value in seconds when the notification can be deleted from the notification list in setting application after notification is posted.</param>
168 /// <exception cref="ArgumentException">Thrown when argument is invalid.</exception>
169 public void SetRemoveTime(int hideTime, int deleteTime)
171 if (hideTime < 0 || deleteTime < 0)
173 throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "invalid argument");
176 hideTimeout = hideTime;
177 deleteTimeout = deleteTime;
181 /// Method to get time set to hide or delete notification.
183 /// <param name="hideTime">The value in seconds when the notification can be hidden from the notification viewer after notification is posted.</param>
184 /// <param name="deleteTime">The value in seconds when the notification can be deleted from the notification list in setting application after notification is posted.</param>
185 public void GetRemoveTime(out int hideTime, out int deleteTime)
187 hideTime = hideTimeout;
188 deleteTime = deleteTimeout;
192 /// Method to add a button to the active notification style.
193 /// Buttons are displayed on the notification.
196 /// If you add button that has same index, the button is replaced to latest adding button.
197 /// If you don't set an index on ButtonAction, the index is set sequentially from zero.
199 /// <param name="button">A ButtonAction for appear to the notification.</param>
200 /// <exception cref="ArgumentException">Thrown when an argument is invalid.</exception>
204 /// ButtonAction button = new ButtonAction
208 /// Action = new AppControl{ ApplicationId = "org.tizen.app" };
211 /// ActiveStyle active = new ActiveStyle
213 /// IsAutoRemove = true,
214 /// BackgroundImage = "image path",
217 /// active.AddButtonAction(button);
221 public void AddButtonAction(ButtonAction button)
225 throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "invalid ButtonAction object");
228 if (button.Index == ButtonIndex.None)
230 button.Index = (ButtonIndex)buttonDictionary.Count;
231 buttonDictionary.Add(button.Index, button);
233 else if (button.Index >= ButtonIndex.First)
235 if (buttonDictionary.ContainsKey(button.Index))
237 buttonDictionary.Remove(button.Index);
240 buttonDictionary.Add(button.Index, button);
245 /// Removes the ButtonAction you already added.
247 /// <param name="index">The index to remove a button.</param>
248 /// <returns>true if the element is successfully found and removed; otherwise, false.</returns>
249 public bool RemoveButtonAction(ButtonIndex index)
251 bool ret = buttonDictionary.Remove(index);
255 Log.Debug(Notification.LogTag, "Invalid key, there is no button matched input index");
259 Log.Debug(Notification.LogTag, "The button was removed.");
266 /// Gets the ButtonAction of the active notification.
268 /// <param name="index">The index to get a button you already added.</param>
269 /// <returns>The ButtonAction object, which you already added.</returns>
270 /// <exception cref="ArgumentException">Thrown when an argument is invalid.</exception>
271 public ButtonAction GetButtonAction(ButtonIndex index)
273 ButtonAction button = null;
275 if (buttonDictionary.ContainsKey(index) == true)
277 buttonDictionary.TryGetValue(index, out button);
281 throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "The value is not existed.");
287 internal ICollection<ButtonAction> GetButtonAction()
289 return buttonDictionary.Values;
292 internal override void Make(Notification notification)
294 ActiveBinder.BindObject(notification);