Fixed N_SE-38563, N_SE-38552
[apps/osp/Settings.git] / src / StNfcPredefinedItemForm.cpp
1 //\r
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.\r
3 //\r
4 // Licensed under the Flora License, Version 1.1 (the License);\r
5 // you may not use this file except in compliance with the License.\r
6 // You may obtain a copy of the License at\r
7 //\r
8 //     http://floralicense.org/license/\r
9 //\r
10 // Unless required by applicable law or agreed to in writing, software\r
11 // distributed under the License is distributed on an AS IS BASIS,\r
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13 // See the License for the specific language governing permissions and\r
14 // limitations under the License.\r
15 //\r
16 \r
17 /**\r
18  * @file                StNfcPredefinedItemForm.cpp\r
19  * @brief               This is the implementation file for NfcPredefinedItemForm class.\r
20  */\r
21 \r
22 #include <FSystem.h>\r
23 #include "StNfcPredefinedItemForm.h"\r
24 #include "StResourceManager.h"\r
25 #include "StSettingScenesList.h"\r
26 #include "StTypes.h"\r
27 \r
28 using namespace Tizen::App;\r
29 using namespace Tizen::Base;\r
30 using namespace Tizen::Base::Collection;\r
31 using namespace Tizen::Graphics;\r
32 using namespace Tizen::System;\r
33 using namespace Tizen::Ui;\r
34 using namespace Tizen::Ui::Controls;\r
35 using namespace Tizen::Ui::Scenes;\r
36 \r
37 static const int ID_GROUP_NFC_PREDEFINED_ITEM = 0;\r
38 static const int ID_GROUP_NFC_PREDEFINED_ITEM_COUNT = 1;\r
39 static const int ID_GROUP_ITEM_NFC_PREDEFINED_ITEM = 0;\r
40 \r
41 static const int ID_GROUP_NFC_PREDEFINED_ITEM_LIST = 1;\r
42 static const int ID_GROUP_NFC_PREDEFINED_ITEM_LIST_DEFAULT_COUNT = 0;\r
43 \r
44 static const int NFC_PREDEFINED_ITEM_DEFAULT_GROUP_COUNT = 2;\r
45 static const int W_TEXT_GAP = 30;\r
46 \r
47 NfcPredefinedItemForm::NfcPredefinedItemForm(void)\r
48         : __pNfcPredefinedItemPresentationModelInstance(null)\r
49         , __pReservedPushCandidatesAppIdList(null)\r
50         , __itemCount(0)\r
51 {\r
52 }\r
53 \r
54 NfcPredefinedItemForm::~NfcPredefinedItemForm(void)\r
55 {\r
56 }\r
57 \r
58 void\r
59 NfcPredefinedItemForm::CreateFooter(void)\r
60 {\r
61         Footer* pFooter = GetFooter();\r
62         AppAssert(pFooter);\r
63 \r
64         pFooter->SetBackButton();\r
65         SetFormBackEventListener(this);\r
66 }\r
67 \r
68 result\r
69 NfcPredefinedItemForm::OnInitializing(void)\r
70 {\r
71         CreateHeader(ResourceManager::GetString(L"IDS_NFC_BODY_PREDEFINED_ITEM_ABB"));\r
72         CreateFooter();\r
73         CreateTableView();\r
74 \r
75         return E_SUCCESS;\r
76 }\r
77 \r
78 result\r
79 NfcPredefinedItemForm::OnTerminating(void)\r
80 {\r
81         SetFormBackEventListener(null);\r
82         return E_SUCCESS;\r
83 }\r
84 \r
85 void\r
86 NfcPredefinedItemForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)\r
87 {\r
88         __pNfcPredefinedItemPresentationModelInstance = NfcPredefinedItemPresentationModel::GetInstance();\r
89         __pNfcPredefinedItemPresentationModelInstance->InitReservedPushCandidatesList();\r
90         __pReservedPushCandidatesAppIdList = __pNfcPredefinedItemPresentationModelInstance->GetAllListReservedPushCandidatesAppIdList();\r
91         __itemCount = __pReservedPushCandidatesAppIdList->GetCount();\r
92 \r
93         __pTableView->UpdateTableView();\r
94 \r
95         bool NfcReservedPushActivated = __pNfcPredefinedItemPresentationModelInstance->IsNfcReservedPushActivated();\r
96         __pTableView->SetItemChecked(ID_GROUP_NFC_PREDEFINED_ITEM, ID_GROUP_ITEM_NFC_PREDEFINED_ITEM, NfcReservedPushActivated);\r
97 \r
98         int selectItemIndex = __pNfcPredefinedItemPresentationModelInstance->GetSelectNfcReservedPushCandidatesAppIdIndex();\r
99         AppLogDebug("selectItemIndex %d", selectItemIndex);\r
100         SelectItemCheckIndex(selectItemIndex);\r
101 }\r
102 \r
103 void\r
104 NfcPredefinedItemForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)\r
105 {\r
106 }\r
107 \r
108 void\r
109 NfcPredefinedItemForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)\r
110 {\r
111         SceneManager* pSceneManager = SceneManager::GetInstance();\r
112         AppAssert(pSceneManager);\r
113 \r
114         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);\r
115 }\r
116 \r
117 int\r
118 NfcPredefinedItemForm::GetGroupCount(void)\r
119 {\r
120         return NFC_PREDEFINED_ITEM_DEFAULT_GROUP_COUNT;\r
121 }\r
122 \r
123 int\r
124 NfcPredefinedItemForm::GetItemCount(int groupIndex)\r
125 {\r
126         int itemCount = 0;\r
127         if (groupIndex == ID_GROUP_NFC_PREDEFINED_ITEM)\r
128         {\r
129                 itemCount = ID_GROUP_NFC_PREDEFINED_ITEM_COUNT;\r
130         }\r
131         else\r
132         {\r
133                 itemCount = __itemCount;\r
134         }\r
135 \r
136         return itemCount;\r
137 }\r
138 \r
139 TableViewGroupItem*\r
140 NfcPredefinedItemForm::CreateGroupItem(int groupIndex, int itemWidth)\r
141 {\r
142         AppLogDebug("ENTER");\r
143         AppLogDebug("group[%d] width[%d]", groupIndex, itemWidth);\r
144 \r
145         int itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;\r
146         int yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;\r
147         LabelTextStyle style = LABEL_TEXT_STYLE_NORMAL;\r
148         Rectangle itemMainText;\r
149         int fontSize = GetFontSize();\r
150         String groupText;\r
151         Label* pLabel = null;\r
152 \r
153         TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();\r
154 \r
155         yItemOffset = H_GROUP_INDEX_NO_HELP_TEXT_GAP;\r
156         itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;\r
157 \r
158         itemMainText.x = X_GROUP_ITEM_DEFAULT_LABEL;\r
159         itemMainText.y = yItemOffset;\r
160         itemMainText.width = itemWidth;\r
161         itemMainText.height = itemHeight + H_GROUP_INDEX_HELP_TEXT_TOP_GAP;\r
162 \r
163         RelativeLayout relativeLayout;\r
164         relativeLayout.Construct();\r
165 \r
166         pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight));\r
167         pItem->SetBackgroundColor(COLOR_BG_GROUP_INDEX_DEFAULT);\r
168 \r
169         pLabel = new (std::nothrow) Label();\r
170         pLabel->Construct(itemMainText, groupText);\r
171         pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);\r
172         pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);\r
173         pLabel->SetTextConfig(fontSize, style);\r
174         pLabel->SetTextColor(COLOR_HELP_TEXT_TYPE_01);\r
175 \r
176         pItem->AddControl(pLabel);\r
177         pItem->SetEnabled(false);\r
178         relativeLayout.SetMargin(*pLabel, itemMainText.x, 0, 0, 0);\r
179         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);\r
180         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);\r
181 \r
182         return pItem;\r
183 }\r
184 \r
185 TableViewItem*\r
186 NfcPredefinedItemForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)\r
187 {\r
188         AppLogDebug("group[%d] item[%d] width[%d]", groupIndex, itemIndex, itemWidth);\r
189         int itemHeight = H_GROUP_ITEM_DEFAULT;\r
190         int fontSize = GetFontSize();\r
191         Rectangle itemMainRectangle;\r
192         Rectangle itemSubRectangle;\r
193 \r
194         String itemMainText;\r
195         String itemSubText;\r
196 \r
197         ItemTypeOneLine(itemMainRectangle);\r
198         TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;\r
199 \r
200         TableViewItem* pItem = new (std::nothrow) TableViewItem();\r
201 \r
202         switch (groupIndex)\r
203         {\r
204         case ID_GROUP_NFC_PREDEFINED_ITEM:\r
205                 {\r
206                         ItemTypeTwoLine(itemMainRectangle, itemSubRectangle, fontSize);\r
207                         itemMainText = ResourceManager::GetString(L"IDS_NFC_BODY_PREDEFINED_ITEM_ABB");\r
208                         itemSubText = *static_cast<String*>(__pReservedPushCandidatesAppIdList->GetAt(itemIndex));\r
209                         style = TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING;\r
210                 }\r
211                 break;\r
212 \r
213         case ID_GROUP_NFC_PREDEFINED_ITEM_LIST:\r
214                 {\r
215                         style = TABLE_VIEW_ANNEX_STYLE_RADIO;\r
216                         itemMainText = *static_cast<String*>(__pReservedPushCandidatesAppIdList->GetAt(itemIndex));\r
217                 }\r
218                 break;\r
219 \r
220         default:\r
221                 break;\r
222         }\r
223 \r
224         RelativeLayout relativeLayout;\r
225         relativeLayout.Construct();\r
226 \r
227         result r = pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);\r
228         if (IsFailed(r))\r
229         {\r
230                 AppLogDebug("Construct fail [%s]", GetErrorMessage(r));\r
231                 delete pItem;\r
232                 return null;\r
233         }\r
234 \r
235         pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);\r
236 \r
237         Label* pLabel = new (std::nothrow) Label();\r
238         r = pLabel->Construct(itemMainRectangle, itemMainText);\r
239         pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);\r
240         pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);\r
241         pLabel->SetTextColor(COLOR_MAIN_TEXT);\r
242 \r
243         pItem->AddControl(pLabel);\r
244         if (groupIndex == ID_GROUP_NFC_PREDEFINED_ITEM)\r
245         {\r
246                 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_ONOFF_SLIDING, 0, 0);\r
247         }\r
248         else\r
249         {\r
250                 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x + RELATIVE_LAYOUT_LEFT_MARGIN, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);\r
251         }\r
252         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);\r
253         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);\r
254 \r
255         if (groupIndex == ID_GROUP_NFC_PREDEFINED_ITEM)\r
256         {\r
257                 Label* pSecondLineLabel = new (std::nothrow) Label();\r
258                 if (pSecondLineLabel == null)\r
259                 {\r
260                         AppLogDebug("pLabel is null");\r
261                         return pItem;\r
262                 }\r
263 \r
264                 r = pSecondLineLabel->Construct(itemSubRectangle, itemSubText);\r
265                 if (IsFailed(r))\r
266                 {\r
267                         AppLogDebug("Construct fail [%s]", GetErrorMessage(r));\r
268                         delete pSecondLineLabel;\r
269                         return pItem;\r
270                 }\r
271 \r
272                 pSecondLineLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);\r
273                 pSecondLineLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);\r
274                 pSecondLineLabel->SetTextColor(COLOR_SUB_TEXT);\r
275 \r
276                 pItem->AddControl(pSecondLineLabel);\r
277                 relativeLayout.SetMargin(*pSecondLineLabel, itemSubRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);\r
278                 relativeLayout.SetRelation(*pSecondLineLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);\r
279                 relativeLayout.SetRelation(*pSecondLineLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);\r
280         }\r
281 \r
282         return pItem;\r
283 }\r
284 \r
285 bool\r
286 NfcPredefinedItemForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)\r
287 {\r
288         AppLogDebug("ENTER");\r
289 \r
290         delete pItem;\r
291         pItem = null;\r
292 \r
293         return true;\r
294 }\r
295 \r
296 bool\r
297 NfcPredefinedItemForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)\r
298 {\r
299         AppLogDebug("ENTER");\r
300 \r
301         delete pItem;\r
302         pItem = null;\r
303 \r
304         return true;\r
305 }\r
306 \r
307 void\r
308 NfcPredefinedItemForm::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)\r
309 {\r
310         switch (groupIndex)\r
311         {\r
312         case ID_GROUP_NFC_PREDEFINED_ITEM:\r
313                 {\r
314                         result r = E_FAILURE;\r
315                         if (status == TABLE_VIEW_ITEM_STATUS_CHECKED)\r
316                         {\r
317                                 r = __pNfcPredefinedItemPresentationModelInstance->NfcReservedPushActivated();\r
318                         }\r
319                         else\r
320                         {\r
321                                 r = __pNfcPredefinedItemPresentationModelInstance->NfcReservedPushDeactivated();\r
322                         }\r
323 \r
324                         if (r == E_FAILURE)\r
325                         {\r
326                                 AppLogDebug("NfcReservedPushActivated is fail [%s]", GetErrorMessage(r));\r
327                                 return;\r
328                         }\r
329                 }\r
330                 break;\r
331 \r
332         case ID_GROUP_NFC_PREDEFINED_ITEM_LIST:\r
333                 {\r
334                         __pNfcPredefinedItemPresentationModelInstance->SetSelectNfcReservedPushCandidatesAppIdIndex(itemIndex);\r
335                         SelectItemCheckIndex(itemIndex);\r
336                 }\r
337                 break;\r
338 \r
339         default:\r
340                 break;\r
341         }\r
342 }\r
343 \r
344 void\r
345 NfcPredefinedItemForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)\r
346 {\r
347 }\r
348 \r
349 int\r
350 NfcPredefinedItemForm::GetDefaultGroupItemHeight(void)\r
351 {\r
352         return H_GROUP_INDEX_NO_TITLE_DEFAULT;\r
353 }\r
354 \r
355 int\r
356 NfcPredefinedItemForm::GetDefaultItemHeight(void)\r
357 {\r
358         return H_GROUP_ITEM_DEFAULT;\r
359 }\r
360 \r
361 void\r
362 NfcPredefinedItemForm::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)\r
363 {\r
364 }\r
365 \r
366 void\r
367 NfcPredefinedItemForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)\r
368 {\r
369         switch (groupIndex)\r
370         {\r
371         case ID_GROUP_NFC_PREDEFINED_ITEM:\r
372                 {\r
373                         Label* secondLabel = static_cast<Label*>(pItem->GetControl(1));\r
374                         int selectItemIndex = __pNfcPredefinedItemPresentationModelInstance->GetSelectNfcReservedPushCandidatesAppIdIndex();\r
375                         String itemSubText = *static_cast<String*>(__pReservedPushCandidatesAppIdList->GetAt(selectItemIndex));\r
376                         secondLabel->SetText(itemSubText);\r
377                 }\r
378                 break;\r
379 \r
380         default:\r
381                 break;\r
382         }\r
383         __pTableView->RefreshItem(ID_GROUP_NFC_PREDEFINED_ITEM, ID_GROUP_ITEM_NFC_PREDEFINED_ITEM, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);\r
384 }\r
385 \r
386 void\r
387 NfcPredefinedItemForm::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)\r
388 {\r
389 }\r
390 \r
391 void\r
392 NfcPredefinedItemForm::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)\r
393 {\r
394 }\r
395 \r
396 void\r
397 NfcPredefinedItemForm::SelectItemCheckIndex(int itemIndex)\r
398 {\r
399         if (__pTableView == null)\r
400         {\r
401                 AppLogDebug("__pTableView is null");\r
402                 return;\r
403         }\r
404 \r
405         for (int i = 0; i < __itemCount; i++)\r
406         {\r
407                 if (i == itemIndex)\r
408                 {\r
409                         __pTableView->SetItemChecked(ID_GROUP_NFC_PREDEFINED_ITEM_LIST, i, true);\r
410                         continue;\r
411                 }\r
412                 __pTableView->SetItemChecked(ID_GROUP_NFC_PREDEFINED_ITEM_LIST, i, false);\r
413         }\r
414 \r
415         __pTableView->Invalidate(true);\r
416         __pTableView->RefreshItem(ID_GROUP_NFC_PREDEFINED_ITEM, ID_GROUP_ITEM_NFC_PREDEFINED_ITEM, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);\r
417 }\r