Fixed N_SE-38563, N_SE-38552
[apps/osp/Settings.git] / src / StDateTimeForm.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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 /**
18  * @file                StDateTimeForm.cpp
19  * @brief               This is the implementation file for DateTimeForm class.
20  */
21
22 #include "StDateTimeForm.h"
23 #include "StResourceManager.h"
24 #include "StSettingScenesList.h"
25 #include "StTypes.h"
26
27
28 using namespace Tizen::Base;
29 using namespace Tizen::Graphics;
30 using namespace Tizen::Locales;
31 using namespace Tizen::System;
32 using namespace Tizen::Ui;
33 using namespace Tizen::Ui::Controls;
34 using namespace Tizen::Ui::Scenes;
35
36 static const int ID_GROUP_DATE_AND_TIME_MAIN = 0;
37 static const int ID_GROUP_DATE_AND_TIME_MAIN_ITEM_COUNT = 1;
38 static const int ID_ITEM_DATE_AND_TIME_MAIN_AUTOMATIC_UPDATE = 0;
39
40 static const int ID_GROUP_DATE_AND_TIME_LOCAL_TIME = 1;
41 static const int ID_GROUP_DATE_AND_TIME_LOCAL_TIME_ITEM_COUNT = 2;
42 static const int ID_ITEM_DATE_AND_TIME_TIME_ZONE = 0;
43 static const int ID_ITEM_DATE_AND_TIME_DATE_AND_TIME = 1;
44
45 static const int ID_GROUP_DATE_AND_TIME_FORMAT = 2;
46 static const int ID_GROUP_DATE_AND_TIME_FORMAT_ITEM_COUNT = 1;
47
48 static const int ID_GROUP_DATE_AND_TIME_FORMAT_LIST = 3;
49 static const int ID_GROUP_DATE_AND_TIME_FORMAT_LIST_ITEM_COUNT = 2;
50 static const int ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS = 0;
51 static const int ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS = 1;
52
53 static const int ID_GROUP_DATE_AND_TIME_FIRST_DAY = 4;
54 static const int ID_GROUP_DATE_AND_TIME_FIRST_DAY_ITEM_COUNT = 1;
55
56 static const int ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST = 5;
57 static const int ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST_ITEM_COUNT = 2;
58 static const int ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY = 0;
59 static const int ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_SUNDAY = 1;
60
61 static const int ID_GROUP_COUNT = 4;
62
63 static const int SIXTY_MINUTES_TO_HOUR = 60;
64 static const int H_GROUP_ITEM_EDITFIELD_DEFAULT = 120;
65
66 static const int NEXT_INDEX = 1;
67 static const int W_RESIZE_LABEL_GAP = 170;
68 static const int H_TIME_FIELD = 150;
69
70 static const int SECOND_CONTROL_ITEM = 1;
71 static const int SECOND_TEXT_ITEM = 2;
72 static const int MIN_YEAR = 1980;
73 static const int MAX_YEAR = 2035;
74 static const float RESIZE_RATE = 5.5;
75 static const int DIVIDE_BY_TEN = 10;
76
77 DateTimeForm::DateTimeForm(void)
78 {
79 }
80
81 DateTimeForm::~DateTimeForm(void)
82 {
83 }
84
85 void
86 DateTimeForm::CreateFooter(void)
87 {
88         Footer* pFooter = GetFooter();
89         AppAssert(pFooter);
90
91         pFooter->SetStyle(FOOTER_STYLE_BUTTON_TEXT);
92         pFooter->SetBackButton();
93         pFooter->AddActionEventListener(*this);
94
95         SetFormBackEventListener(this);
96 }
97
98 result
99 DateTimeForm::OnInitializing(void)
100 {
101         CreateHeader(ResourceManager::GetString(L"IDS_ST_BODY_DATE_AND_TIME"));
102         CreateFooter();
103         CreateTableView();
104
105         AppLogDebug("ENTER");
106
107         return E_SUCCESS;
108 }
109
110 result
111 DateTimeForm::OnTerminating(void)
112 {
113         __pTableView = null;
114
115         SetFormBackEventListener(null);
116         return E_SUCCESS;
117 }
118
119 void
120 DateTimeForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
121 {
122         bool automaticUpdate = false;
123         bool hourFormat = false;
124         __pTableView->UpdateTableView();
125         __pTableView->CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
126         __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_FORMAT, 0, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
127         __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, 1, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
128
129         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdate) == E_SUCCESS)
130         {
131                 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_MAIN, ID_ITEM_DATE_AND_TIME_MAIN_AUTOMATIC_UPDATE, automaticUpdate);
132                 __pTableView->SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_TIME_ZONE, !automaticUpdate);
133                 __pTableView->SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, !automaticUpdate);
134         }
135
136         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) == E_SUCCESS)
137         {
138                 if (hourFormat == false)
139                 {
140                         __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, true);
141                         __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, false);
142                 }
143                 else
144                 {
145                         __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, true);
146                         __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, false);
147                 }
148
149                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
150         }
151 }
152
153 void
154 DateTimeForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId)
155 {
156 }
157
158 void
159 DateTimeForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
160 {
161         SceneManager* pSceneManager = SceneManager::GetInstance();
162         AppAssert(pSceneManager);
163
164         __pTableView->CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
165         pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), null);
166 }
167
168 int
169 DateTimeForm::GetGroupCount(void)
170 {
171         AppLogDebug("ENTER");
172         return ID_GROUP_COUNT;
173 }
174
175 int
176 DateTimeForm::GetItemCount(int groupIndex)
177 {
178         int itemCount = 0;
179
180         switch (groupIndex)
181         {
182         case ID_GROUP_DATE_AND_TIME_MAIN:
183                 {
184                         itemCount = ID_GROUP_DATE_AND_TIME_MAIN_ITEM_COUNT;
185                 }
186                 break;
187
188         case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
189                 {
190                         itemCount = ID_GROUP_DATE_AND_TIME_LOCAL_TIME_ITEM_COUNT;
191                 }
192                 break;
193
194         case ID_GROUP_DATE_AND_TIME_FORMAT:
195                 {
196                         itemCount = ID_GROUP_DATE_AND_TIME_FORMAT_ITEM_COUNT;
197                 }
198                 break;
199
200         case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
201                 {
202                         itemCount = ID_GROUP_DATE_AND_TIME_FORMAT_LIST_ITEM_COUNT;
203                 }
204                 break;
205
206         case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
207                 {
208                         itemCount = ID_GROUP_DATE_AND_TIME_FIRST_DAY_ITEM_COUNT;
209                 }
210                 break;
211
212         case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
213                 {
214                         itemCount = ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST_ITEM_COUNT;
215                 }
216                 break;
217
218         default:
219                 break;
220         }
221         AppLogDebug("GetItemCount %d", itemCount);
222
223         return itemCount;
224 }
225
226 TableViewGroupItem*
227 DateTimeForm::CreateGroupItem(int groupIndex, int itemWidth)
228 {
229         AppLogDebug("ENTER");
230
231         int itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
232         int yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
233         LabelTextStyle style = LABEL_TEXT_STYLE_BOLD;
234         Rectangle itemMainRectangle;
235         String groupText;
236         Label* pLabel = null;
237
238         TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();
239
240         switch (groupIndex)
241         {
242         case ID_GROUP_DATE_AND_TIME_MAIN:
243                 // fall through
244         case ID_GROUP_DATE_AND_TIME_FORMAT:
245                 {
246                         yItemOffset = Y_GROUP_INDEX_DEFAULT;
247                         itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
248                 }
249                 break;
250
251         case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
252                 {
253                         style = LABEL_TEXT_STYLE_NORMAL;
254                         yItemOffset = H_GROUP_INDEX_HELP_TEXT_TOP_GAP;
255                         itemHeight = H_GROUP_INDEX_DEFAULT;
256                         groupText = ResourceManager::GetString(L"IDS_ST_BODY_USE_TIME_PROVIDED_BY_NETWORK");
257                 }
258                 break;
259
260         case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
261                 {
262                         itemHeight = 0;
263                 }
264                 break;
265
266         case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
267                 // fall through
268         case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
269                 {
270                         itemHeight = 0;
271                 }
272                 break;
273
274         default:
275                 {
276                         yItemOffset = Y_GROUP_INDEX_DEFAULT;
277                         itemHeight = H_GROUP_INDEX_NO_TITLE_DEFAULT;
278                 }
279                 break;
280         }
281
282         itemMainRectangle.x = X_GROUP_INDEX_DEFAULT_LABEL;
283         itemMainRectangle.y = yItemOffset;
284         itemMainRectangle.width = itemWidth;
285         itemMainRectangle.height = itemHeight;
286
287         RelativeLayout relativeLayout;
288         relativeLayout.Construct();
289
290         pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight));
291
292         pLabel = new (std::nothrow) Label();
293         pLabel->Construct(itemMainRectangle, groupText);
294         pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
295         pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
296         pLabel->SetTextConfig(FONT_SIZE_GROUP_TITLE_TEXT, style);
297         pLabel->SetTextColor(COLOR_GROUP_TITLE_TEXT);
298
299         pItem->AddControl(pLabel);
300         relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
301         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
302         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
303         pItem->SetBackgroundColor(COLOR_BG_GROUP_INDEX_DEFAULT);
304         pItem->SetEnabled(false);
305
306         return pItem;
307 }
308
309 TableViewItem*
310 DateTimeForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
311 {
312         AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
313
314         bool isSecondLine = false;
315         Rectangle itemMainRectangle;
316         Rectangle itemSubRectangle;
317         TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;
318         String itemMainText;
319         String itemSubText;
320         String key;
321         String Value;
322         Label* pLabel = null;
323         int itemHeight = H_GROUP_ITEM_DEFAULT;
324         int fontSize = GetFontSize();
325
326         ItemTypeOneLine(itemMainRectangle);
327         TableViewItem* pItem = new (std::nothrow) TableViewItem();
328
329         switch (groupIndex)
330         {
331         case ID_GROUP_DATE_AND_TIME_MAIN:
332                 {
333                         bool automaticUpdate = false;
334                         style = TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING;
335                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_AUTOMATIC_UPDATE");
336                         itemMainRectangle.width -= W_RESIZE_LABEL_GAP;
337
338                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdate) == E_SUCCESS)
339                         {
340                                 __pTableView->SetItemChecked(groupIndex, itemIndex, automaticUpdate);
341                         }
342                 }
343                 break;
344
345         case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
346                 {
347                         int slashIndex = 0;
348                         isSecondLine = true;
349                         LocaleManager localeManager;
350                         localeManager.Construct();
351                         TimeZone timeZone = localeManager.GetSystemTimeZone();
352                         int rawOffset = timeZone.GetRawOffset();
353
354                         switch (itemIndex)
355                         {
356                         case ID_ITEM_DATE_AND_TIME_TIME_ZONE:
357                                 {
358                                         itemSubText = timeZone.GetId();
359                                         itemSubText.IndexOf(L"/", 0, slashIndex);
360                                         itemSubText.Remove(0, slashIndex + NEXT_INDEX);
361                                         if (rawOffset > 0)
362                                         {
363                                                 itemSubText.Insert(L", GMT +", itemSubText.GetLength());
364                                         }
365                                         else
366                                         {
367                                                 itemSubText.Insert(L", GMT ", itemSubText.GetLength());
368                                         }
369                                         itemSubText.Insert((rawOffset / SIXTY_MINUTES_TO_HOUR), (itemSubText.GetLength()));
370                                         int minutes = rawOffset % SIXTY_MINUTES_TO_HOUR;
371                                         if (minutes != 0)
372                                         {
373                                                 int minusMinutes = 0;
374                                                 if (minutes < 0)
375                                                 {
376                                                         minusMinutes -= (minusMinutes + minutes);
377                                                         itemSubText.Insert(L":", itemSubText.GetLength());
378                                                         itemSubText.Insert((minusMinutes), (itemSubText.GetLength()));
379                                                 }
380                                                 else
381                                                 {
382                                                         itemSubText.Insert(L":", itemSubText.GetLength());
383                                                         itemSubText.Insert((minutes), (itemSubText.GetLength()));
384                                                 }
385                                         }
386                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_TIME_ZONE");
387                                 }
388                                 break;
389
390                         case ID_ITEM_DATE_AND_TIME_DATE_AND_TIME:
391                                 {
392                                         ItemTypeOneLine(itemMainRectangle);
393                                         itemHeight = H_GROUP_ITEM_EDITFIELD_DEFAULT;
394                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_DATE_AND_TIME");
395                                 }
396                                 break;
397
398                         default:
399                                 break;
400                         }
401                 }
402                 break;
403
404         case ID_GROUP_DATE_AND_TIME_FORMAT:
405                 {
406                         bool hourFormat = false;
407                         isSecondLine = true;
408
409                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
410                         {
411                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
412                         }
413
414                         if (hourFormat == 0)
415                         {
416                                 itemSubText = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
417                         }
418                         else
419                         {
420                                 itemSubText = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
421                         }
422
423                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_TIME_FORMAT");
424                 }
425                 break;
426         
427         case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
428                 {
429                         bool hourFormat = false;
430                         style = TABLE_VIEW_ANNEX_STYLE_RADIO;
431                         isSecondLine = false;
432
433                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
434                         {
435                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
436                         }
437
438                         switch (itemIndex)
439                         {
440                         case ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS:
441                                 {
442                                         itemMainText = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
443
444                                         if (hourFormat == false)
445                                         {
446                                                 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
447                                         }
448                                 }
449                                 break;
450
451                         case ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS:
452                                 {
453                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
454
455                                         if (hourFormat == true)
456                                         {
457                                                 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
458                                         }
459                                 }
460                                 break;
461
462                         default:
463                                 break;
464                         }
465                 }
466                 break;
467
468         case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
469                 {
470                         String firstDayOfWeek;
471                         isSecondLine = true;
472
473                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDayOfWeek) != E_SUCCESS)
474                         {
475                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
476                         }
477                         itemSubText = firstDayOfWeek;
478                 }
479                 break;
480
481         case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
482                 {
483                         String firstDayOfWeek;
484                         style = TABLE_VIEW_ANNEX_STYLE_RADIO;
485                         isSecondLine = false;
486
487                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDayOfWeek) != E_SUCCESS)
488                         {
489                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
490                         }
491
492                         switch (itemIndex)
493                         {
494                         case ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY:
495                                 {
496                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_MONDAY");
497
498                                         if (firstDayOfWeek.Equals(L"Sunday", false) == false)
499                                         {
500                                                 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
501                                         }
502                                 }
503                                 break;
504
505                         case ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_SUNDAY:
506                                 {
507                                         itemMainText = ResourceManager::GetString(L"IDS_ST_BODY_SUNDAY");
508                                         if (firstDayOfWeek.Equals(L"Sunday", false))
509                                         {
510                                                 __pTableView->SetItemChecked(groupIndex, itemIndex, true);
511                                         }
512                                 }
513                                 break;
514
515                         default:
516                                 break;
517                         }
518                 }
519                 break;
520
521         default:
522                 break;
523         }
524
525         if ((groupIndex == ID_GROUP_DATE_AND_TIME_LOCAL_TIME) && (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME))
526         {
527                 pItem->Construct( Dimension(itemWidth, H_TIME_FIELD), style);
528                 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
529
530                 bool hourFormat = false;
531
532                 EditDate* pEditDate = new (std::nothrow) EditDate();
533                 pEditDate->Construct(Point(0, 0), itemMainText);
534                 pEditDate->SetCurrentDate();
535
536                 int minYear = MIN_YEAR;
537                 int maxYear = MAX_YEAR;
538
539                 if (pEditDate->GetYear() < MIN_YEAR)
540                 {
541                         minYear = pEditDate->GetYear();
542                 }
543
544                 if (pEditDate->GetYear() > MAX_YEAR)
545                 {
546                         maxYear = pEditDate->GetYear();
547                 }
548
549                 pEditDate->SetYearRange(minYear, maxYear);
550                 pEditDate->AddDateChangeEventListener(*this);
551                 pEditDate->SetName(L"EditDate");
552
553                 pItem->AddControl(pEditDate);
554
555                 EditTime* pEditTime = new (std::nothrow) EditTime();
556                 pEditTime->Construct(Point(pEditDate->GetWidth(), 0), L" ");
557                 pEditTime->SetCurrentTime();
558
559                 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) == E_SUCCESS)
560                 {
561                         pEditTime->Set24HourNotationEnabled(hourFormat);
562                 }
563
564                 pEditTime->AddTimeChangeEventListener(*this);
565                 pEditTime->SetName(L"EditTime");
566
567                 pItem->AddControl(pEditTime);
568                 pItem->SetIndividualSelectionEnabled(pEditDate, true);
569                 pItem->SetIndividualSelectionEnabled(pEditTime, true);
570         }
571         else if (isSecondLine == true)
572         {
573                 ItemTypeTwoLine(itemMainRectangle, itemSubRectangle, fontSize);
574                 itemHeight = (itemMainRectangle.height + itemSubRectangle.height);
575
576                 RelativeLayout relativeLayout;
577                 relativeLayout.Construct();
578
579                 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
580                 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
581
582                 pLabel = new (std::nothrow) Label();
583                 pLabel->Construct(itemMainRectangle, itemMainText);
584                 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
585                 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
586                 pLabel->SetTextColor(COLOR_MAIN_TEXT);
587
588                 pItem->AddControl(pLabel);
589                 if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
590                 {
591                         relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_DETAIL_BUTTON, 0, 0);
592                 }
593                 else
594                 {
595                         relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
596                 }
597                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
598                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
599
600                 if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
601                 {
602                         Rectangle detailArrow;
603                         Bitmap* pBitmap = null;
604                         if (__pTableView->IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST))
605                         {
606                                 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_OPENED);
607                         }
608                         else
609                         {
610                                 pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_CLOSED);
611                         }
612
613                         detailArrow = itemMainRectangle;
614                         detailArrow.y = itemMainRectangle.y + ((itemHeight - W_DETAIL_ARROW_BUTTON) / DIVIDE_BY_TWO);
615                         detailArrow.height = W_DETAIL_ARROW_BUTTON;
616                         detailArrow.width = W_DETAIL_ARROW_BUTTON;
617
618                         pLabel = new (std::nothrow) Label();
619                         pLabel->Construct(detailArrow, L"");
620
621                         pLabel->SetBackgroundBitmap(*pBitmap);
622
623                         pItem->AddControl(pLabel);
624                         relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_DETAIL_ARROW_BUTTON, 0, 0);
625                         relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
626                 }
627
628                 pLabel = new (std::nothrow) Label();
629                 pLabel->Construct(itemSubRectangle, itemSubText);
630                 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
631                 pLabel->SetTextVerticalAlignment(ALIGNMENT_TOP);
632                 pLabel->SetTextConfig(FONT_SIZE_SUB_TEXT, LABEL_TEXT_STYLE_NORMAL);
633                 pLabel->SetTextColor(COLOR_SUB_TEXT);
634
635                 pItem->AddControl(pLabel);
636                 relativeLayout.SetMargin(*pLabel, itemSubRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
637                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
638                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
639         }
640         else
641         {
642                 RelativeLayout relativeLayout;
643                 relativeLayout.Construct();
644
645                 pItem->Construct(relativeLayout, Dimension(itemWidth, itemHeight), style);
646                 pItem->SetBackgroundColor(COLOR_BG_GROUP_ITEM_DEFAULT);
647
648                 pLabel = new (std::nothrow) Label();
649                 pLabel->Construct(itemMainRectangle, itemMainText);
650                 pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
651                 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
652                 pLabel->SetTextColor(COLOR_MAIN_TEXT);
653
654                 pItem->AddControl(pLabel);
655
656                 switch (style)
657                 {
658                 case TABLE_VIEW_ANNEX_STYLE_RADIO:
659                         {
660                                 relativeLayout.SetMargin(*pLabel, RELATIVE_LAYOUT_LEFT_MARGIN, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
661                         }
662                         break;
663
664                 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
665                         {
666                                 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN_ONOFF_SLIDING, 0, 0);
667                         }
668                         break;
669
670                 default:
671                         {
672                                 relativeLayout.SetMargin(*pLabel, itemMainRectangle.x, RELATIVE_LAYOUT_RIGHT_MARGIN, 0, 0);
673                         }
674                         break;
675                 }
676
677                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_LEFT_TO_LEFT);
678                 relativeLayout.SetRelation(*pLabel, pItem, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
679         }
680
681         return pItem;
682 }
683
684 bool
685 DateTimeForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
686 {
687         AppLogDebug("ENTER");
688
689         delete pItem;
690         pItem = null;
691
692         return true;
693 }
694
695 bool
696 DateTimeForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
697 {
698         AppLogDebug("ENTER");
699
700         delete pItem;
701         pItem = null;   
702
703         return true;
704 }
705
706 void
707 DateTimeForm::OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
708 {
709         SceneManager* pSceneManager = SceneManager::GetInstance();
710         AppAssert(pSceneManager);
711
712         AppLogDebug("group[%d] index[%d]", groupIndex, itemIndex);
713
714         switch (groupIndex)
715         {
716         case ID_GROUP_DATE_AND_TIME_MAIN:
717                 {
718                         bool automaticUpdateStatus = tableView.IsItemChecked(groupIndex, itemIndex);
719
720                         if (status == TABLE_VIEW_ITEM_STATUS_SELECTED)
721                         {
722                                 automaticUpdateStatus = (!(automaticUpdateStatus));
723                         }
724
725                         if (SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_UPDATE_AUTO, automaticUpdateStatus) == E_SUCCESS)
726                         {
727                                 tableView.SetItemChecked(groupIndex, itemIndex, automaticUpdateStatus);
728                                 tableView.SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_TIME_ZONE, !automaticUpdateStatus);
729                                 tableView.SetItemEnabled(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, !automaticUpdateStatus);
730                                 tableView.RefreshAllItems();
731                         }
732                         else
733                         {
734                                 AppLogDebug("SettingInfo::SetValue() fail(%s)", GetErrorMessage(GetLastResult()));
735                         }
736                 }
737                 break;
738
739         case ID_GROUP_DATE_AND_TIME_LOCAL_TIME:
740                 {
741                         if (itemIndex == ID_ITEM_DATE_AND_TIME_TIME_ZONE)
742                         {
743                                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_TIME_ZONE, SCENE_TRANSITION_ANIMATION_TYPE_LEFT));
744                         }
745                         else if (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME)
746                         {
747                                 //TODO: make operation time and date
748                         }
749                 }
750                 break;
751
752         case ID_GROUP_DATE_AND_TIME_FORMAT:
753                 {
754                         AppLogDebug("ID_ITEM_DATE_AND_TIME_FORMAT_TIME_FORMAT Detail");
755
756                         if (tableView.IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST) == true)
757                         {
758                                 tableView.CollapseGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
759                         }
760                         else
761                         {
762                                 tableView.ExpandGroup(ID_GROUP_DATE_AND_TIME_FORMAT_LIST);
763                         }
764                         tableView.RefreshItem(groupIndex, itemIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
765                         tableView.ScrollToItem(groupIndex, itemIndex);
766                 }
767                 break;
768
769         case ID_GROUP_DATE_AND_TIME_FIRST_DAY:
770                 {
771                         if (tableView.IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST) == true)
772                         {
773                                 tableView.CollapseGroup(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST);
774                         }
775                         else
776                         {
777                                 tableView.ExpandGroup(ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST);
778                         }
779                 }
780                 break;
781
782         case ID_GROUP_DATE_AND_TIME_FIRST_DAY_LIST:
783                 {
784                         String firstDay;
785
786                         if (itemIndex == ID_ITEM_DATE_AND_TIME_FORMAT_FIRST_DAY_MONDAY)
787                         {
788                                 firstDay = L"Monday";
789                         }
790                         else
791                         {
792                                 firstDay = L"Sunday";
793                         }
794
795                         if (SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_FIRSTDAY, firstDay) != E_SUCCESS)
796                         {
797                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
798                         }
799                 }
800                 break;
801
802         case ID_GROUP_DATE_AND_TIME_FORMAT_LIST:
803                 {
804                         bool timeFormat = false;
805
806                         switch (itemIndex)
807                         {
808                         case ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS:
809                                 {
810                                         timeFormat = false;
811                                         tableView.SetItemChecked(groupIndex, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, true);
812                                         tableView.SetItemChecked(groupIndex, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, false);
813                                 }
814                                 break;
815
816                         case ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS:
817                                 {
818                                         timeFormat = true;
819                                         tableView.SetItemChecked(groupIndex, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, false);
820                                         tableView.SetItemChecked(groupIndex, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, true);
821                                 }
822                                 break;
823
824                         default:
825                                 break;
826                         }
827
828                         if (SettingInfo::SetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, timeFormat) != E_SUCCESS)
829                         {
830                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
831                         }
832
833                         tableView.RefreshAllItems();
834                 }
835                 break;
836
837         default:
838                 break;
839         }
840 }
841
842 void
843 DateTimeForm::OnDateChanged(const Tizen::Ui::Control& source, int year, int month, int day)
844 {
845         LocaleManager localeManager;
846         localeManager.Construct();
847         TimeZone timeZone = localeManager.GetSystemTimeZone();
848
849         DateTime wallTime;
850         DateTime utcTime;
851         SystemTime::GetCurrentTime(TIME_MODE_WALL, wallTime);
852
853         wallTime.SetValue(year, month, day, wallTime.GetHour(), wallTime.GetMinute(), wallTime.GetSecond());
854         utcTime =  timeZone.WallTimeToUtcTime(wallTime);
855
856         SystemTime::SetCurrentTime(utcTime);
857 }
858
859 void
860 DateTimeForm::OnDateChangeCanceled(const Tizen::Ui::Control& source)
861 {
862 }
863
864 void
865 DateTimeForm::OnTimeChanged(const Control& source, int hour, int minute)
866 {
867         LocaleManager localeManager;
868         localeManager.Construct();
869         TimeZone timeZone = localeManager.GetSystemTimeZone();
870
871         DateTime wallTime;
872         DateTime utcTime;
873         SystemTime::GetCurrentTime(TIME_MODE_WALL, wallTime);
874
875         wallTime.SetValue(wallTime.GetYear(), wallTime.GetMonth(), wallTime.GetDay(), hour, minute, 0);
876         utcTime =  timeZone.WallTimeToUtcTime(wallTime);
877
878         SystemTime::SetCurrentTime(utcTime);
879 }
880
881 void
882 DateTimeForm::OnTimeChangeCanceled(const Control& source)
883 {
884 }
885
886 int
887 DateTimeForm::GetDefaultGroupItemHeight(void)
888 {
889         return H_GROUP_INDEX_NO_TITLE_DEFAULT;
890 }
891
892 int
893 DateTimeForm::GetDefaultItemHeight(void)
894 {
895         return H_GROUP_ITEM_DEFAULT;
896 }
897
898 void
899 DateTimeForm::UpdateGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem)
900 {
901 }
902
903 void
904 DateTimeForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
905 {
906         if ((groupIndex == ID_GROUP_DATE_AND_TIME_LOCAL_TIME) && (itemIndex == ID_ITEM_DATE_AND_TIME_DATE_AND_TIME))
907         {
908                 EditTime* pEditTime = static_cast<EditTime*>(pItem->GetControl(L"EditTime"));
909                 if (pEditTime == null)
910                 {
911                         AppLogDebug("pEditTime update Fail");
912                         return;
913                 }
914                 bool hourFormat = false;
915                 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) == E_SUCCESS)
916                 {
917                         pEditTime->Set24HourNotationEnabled(hourFormat);
918                 }
919
920                 Rectangle editTimeRectangle = pEditTime->GetBounds();
921                 Rectangle itemRectangle = pItem->GetBounds();
922                 int pos = ((itemRectangle.width * RESIZE_RATE) / DIVIDE_BY_TEN);
923                 pEditTime->SetSize(pos, editTimeRectangle.height);
924                 pEditTime->SetPosition(pos, 0);
925                 pItem->Invalidate(true);
926         }
927         if (groupIndex == ID_GROUP_DATE_AND_TIME_FORMAT)
928         {
929                 String timeFormat;
930                 Label* pLabelSecondLine = static_cast<Label*>(pItem->GetControl(SECOND_TEXT_ITEM));
931                 Label* pLabelBitmap = static_cast<Label*>(pItem->GetControl(SECOND_CONTROL_ITEM));
932                 Bitmap* pBitmap = null;
933
934                 if (__pTableView->IsGroupExpanded(ID_GROUP_DATE_AND_TIME_FORMAT_LIST))
935                 {
936                         pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_OPENED);
937                 }
938                 else
939                 {
940                         pBitmap = ResourceManager::GetBitmapN(IDB_DETAIL_BUTTON_EXPAND_CLOSED);
941                 }
942
943                 bool hourFormat = false;
944
945                 if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
946                 {
947                         AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
948                 }
949
950                 if (hourFormat == 0)
951                 {
952                         timeFormat = ResourceManager::GetString(L"IDS_COM_BODY_12_HOURS");
953                 }
954                 else
955                 {
956                         timeFormat = ResourceManager::GetString(L"IDS_ST_BODY_24_HOURS");
957                 }
958
959                 pLabelSecondLine->SetText(timeFormat);
960                 pLabelSecondLine->Invalidate(false);
961
962                 pLabelBitmap->SetBackgroundBitmap(*pBitmap);
963                 pLabelBitmap->Invalidate(false);
964                 delete pBitmap;
965         }
966         pItem->Invalidate(false);
967 }
968
969 void
970 DateTimeForm::OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated)
971 {
972 }
973
974 void
975 DateTimeForm::OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::GroupedTableView& tableView, int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status)
976 {
977 }
978
979 void
980 DateTimeForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus)
981 {
982         BaseForm::OnOrientationChanged(source, orientationStatus);
983         __pTableView->RefreshItem(ID_GROUP_DATE_AND_TIME_LOCAL_TIME, ID_ITEM_DATE_AND_TIME_DATE_AND_TIME, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
984 }
985
986 void
987 DateTimeForm::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
988 {
989         if (requestId == FRFRESH_REQUEST_EVENT)
990         {
991                 if (__pTableView)
992                 {
993                         bool hourFormat = false;
994
995                         if (SettingInfo::GetValue(SETTING_INFO_KEY_LOCALE_TIME_FORMAT_24HOUR, hourFormat) != E_SUCCESS)
996                         {
997                                 AppLogDebug("SettingInfo::GetValue() fail(%s)", GetErrorMessage(GetLastResult()));
998                         }
999
1000                         if (hourFormat == false)
1001                         {
1002                                 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, true);
1003                                 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, false);
1004                         }
1005                         else
1006                         {
1007                                 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_24_HOURS, true);
1008                                 __pTableView->SetItemChecked(ID_GROUP_DATE_AND_TIME_FORMAT_LIST, ID_ITEM_DATE_AND_TIME_FORMAT_12_HOURS, false);
1009                         }
1010                         __pTableView->RefreshAllItems();
1011                 }
1012                 if (pArgs)
1013                 {
1014                         pArgs->RemoveAll(true);
1015                         delete pArgs;
1016                 }
1017         }
1018 }