Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Applications.Notification / Tizen.Applications.Notifications / NotificationActiveStyle.cs
1 /*
2  * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 namespace Tizen.Applications.Notifications
18 {
19     using System.Collections.Generic;
20
21     /// <summary>
22     /// Class containing common properties and methods of Notifications
23     /// </summary>
24     /// <remarks>
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.
28     /// </remarks>
29     public sealed partial class Notification
30     {
31         /// <summary>
32         ///  Class for generating Active style notification
33         /// </summary>
34         public sealed class ActiveStyle : StyleBase
35         {
36             private IDictionary<ButtonIndex, ButtonAction> buttonDictionary;
37             private int hideTimeout = 0;
38             private int deleteTimeout = 0;
39
40             /// <summary>
41             /// Initializes a new instance of the <see cref="ActiveStyle"/> class.
42             /// </summary>
43             public ActiveStyle()
44             {
45                 buttonDictionary = new Dictionary<ButtonIndex, ButtonAction>();
46             }
47
48             /// <summary>
49             /// Gets or sets an absolute path for an image file to display on the background of active notification
50             /// </summary>
51             public string BackgroundImage { get; set; }
52
53             /// <summary>
54             /// Gets or sets a value indicating whether the active notification is removed automatically. Default value is true.
55             /// </summary>
56             /// <remarks>
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.
60             /// </remarks>>
61             public bool IsAutoRemove { get; set; } = true;
62
63             /// <summary>
64             /// Gets or sets the default button to display highlight on the active notification
65             /// </summary>
66             /// <remarks>
67             /// The default button for display highlight is only reflected on Tizen TV.
68             /// If you use this Property on other profile, this value have no effect
69             /// </remarks>
70             public ButtonIndex DefaultButton { get; set; } = ButtonIndex.None;
71
72             /// <summary>
73             /// Gets or sets a ReplyAction to this active notification style.
74             /// </summary>
75             /// <remarks>
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 disappeared.
78             /// </remarks>
79             /// <example>
80             /// <code>
81             ///
82             /// ButtonAction button = new ButtonAction
83             /// {
84             ///     Index = ButtonIndex.First,
85             ///     Text = "Yes"
86             ///     Action = new AppControl{ ApplicationId = "org.tizen.app" };
87             /// };
88             ///
89             /// ReplyAction reply = new ReplyAction
90             /// {
91             ///     ParentIndex = ButtonIndex.First;
92             ///     PlaceHolderText = "Please write your reply."
93             ///     ReplyMax = 160,
94             ///     Button = new ButtonAction
95             ///     {
96             ///         Text = "Yes",
97             ///         ImagePath = "image path"
98             ///         Action = new AppControl{ ApplicationId = "org.tizen.app" };
99             ///     };
100             /// };
101             ///
102             /// ActiveStyle active = new ActiveStyle
103             /// {
104             ///     AutoRemove = true,
105             ///     BackgroundImage = "image path",
106             ///     ReplyAction = reply
107             /// };
108             ///
109             /// active.AddButtonAction(button);
110             /// </code>
111             /// </example>
112             public ReplyAction ReplyAction { get; set; }
113
114             /// <summary>
115             /// Gets the key of ActiveStyle
116             /// </summary>
117             internal override string Key
118             {
119                 get
120                 {
121                     return "Active";
122                 }
123             }
124
125             /// <summary>
126             /// Method to set times to hide or delete notification.
127             /// </summary>
128             /// <remarks>
129             /// The time settings for hiding and deleting are only reflected on Tizen TV.
130             /// If you use this API on other profile, this time settings have no effect
131             /// </remarks>
132             /// <param name="hideTime">The value in second when the notification can be hidden from the notification viewer after notification is posted</param>
133             /// <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>
134             /// <exception cref="ArgumentException">Thrown when argument is invalid</exception>
135             public void SetRemoveTime(int hideTime, int deleteTime)
136             {
137                 if (hideTime < 0 || deleteTime < 0)
138                 {
139                     throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "invalid argument");
140                 }
141
142                 hideTimeout = hideTime;
143                 deleteTimeout = deleteTime;
144             }
145
146             /// <summary>
147             /// Method to get times to hide or delete notification.
148             /// </summary>
149             /// <param name="hideTime">The value in second when the notification can be hidden from the notification viewer after notification is posted</param>
150             /// <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>
151             public void GetRemoveTime(out int hideTime, out int deleteTime)
152             {
153                 hideTime = hideTimeout;
154                 deleteTime = deleteTimeout;
155             }
156
157             /// <summary>
158             /// Method to add a button to the active notification style.
159             /// Buttons are displayed on the notification.
160             /// </summary>
161             /// <remarks>
162             /// If you add button that has same index, the button is replaced to latest adding button.
163             /// If you don't set an index on ButtonAction, the index is set sequentially from zero.
164             /// </remarks>
165             /// <param name="button">An ButtonAction for appear to the notification</param>
166             /// <exception cref="ArgumentException">Thrown when argument is invalid</exception>
167             /// <example>
168             /// <code>
169             ///
170             /// ButtonAction button = new ButtonAction
171             /// {
172             ///     Index = 0,
173             ///     Text = "Yes"
174             ///     Action = new AppControl{ ApplicationId = "org.tizen.app" };
175             /// };
176             ///
177             /// ActiveStyle active = new ActiveStyle
178             /// {
179             ///     IsAutoRemove = true,
180             ///     BackgroundImage = "image path",
181             /// };
182             ///
183             /// active.AddButtonAction(button);
184             ///
185             /// </code>
186             /// </example>
187             public void AddButtonAction(ButtonAction button)
188             {
189                 if (button == null)
190                 {
191                     throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "invalid ButtonAction object");
192                 }
193
194                 if (button.Index == ButtonIndex.None)
195                 {
196                     button.Index = (ButtonIndex)buttonDictionary.Count;
197                     buttonDictionary.Add(button.Index, button);
198                 }
199                 else if (button.Index >= ButtonIndex.First)
200                 {
201                     if (buttonDictionary.ContainsKey(button.Index))
202                     {
203                         buttonDictionary.Remove(button.Index);
204                     }
205
206                     buttonDictionary.Add(button.Index, button);
207                 }
208             }
209
210             /// <summary>
211             /// Remove the ButtonAction you already add.
212             /// </summary>
213             /// <param name="index">The index to remove a button</param>
214             /// <returns>true if the element is successfully found and removed; otherwise, false</returns>
215             public bool RemoveButtonAction(ButtonIndex index)
216             {
217                 bool ret = buttonDictionary.Remove(index);
218
219                 if (ret == false)
220                 {
221                     Log.Debug(Notification.LogTag, "Invalid key, there is no button matched input index");
222                 }
223                 else
224                 {
225                     Log.Debug(Notification.LogTag, "The button was removed.");
226                 }
227
228                 return ret;
229             }
230
231             /// <summary>
232             /// Gets the ButtonAction of the active notification.
233             /// </summary>
234             /// <param name="index">The index to get a button you already add</param>
235             /// <returns>The ButtonAction object which is you already add</returns>
236             /// <exception cref="ArgumentException">Thrown when argument is invalid</exception>
237             public ButtonAction GetButtonAction(ButtonIndex index)
238             {
239                 ButtonAction button = null;
240
241                 if (buttonDictionary.ContainsKey(index) == true)
242                 {
243                     buttonDictionary.TryGetValue(index, out button);
244                 }
245                 else
246                 {
247                     throw NotificationErrorFactory.GetException(NotificationError.InvalidParameter, "The value is not existed.");
248                 }
249
250                 return button;
251             }
252
253             internal ICollection<ButtonAction> GetButtonAction()
254             {
255                 return buttonDictionary.Values;
256             }
257
258             internal override void Make(Notification notification)
259             {
260                 ActiveBinder.BindObject(notification);
261             }
262         }
263     }
264 }