Tizen 2.0 Release
[apps/osp/Phone.git] / src / PhnSettingsAddNumberForm.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.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://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    PhnSettingsAddNumberForm.cpp
19  * @brief   Add Number form
20  */
21 #include <FApp.h>
22 #include "PhnAppUtility.h"
23 #include "PhnTypes.h"
24 #include "PhnSettingsAddNumberForm.h"
25 #include "PhnSettingsConstants.h"
26 #include "PhnSettingsPresentationModel.h"
27 #include "PhnSceneRegister.h"
28
29 using namespace Tizen::App;
30 using namespace Tizen::Base;
31 using namespace Tizen::Base::Collection;
32 using namespace Tizen::Graphics;
33 using namespace Tizen::Ui;
34 using namespace Tizen::Ui::Controls;
35 using namespace Tizen::Ui::Scenes;
36 using namespace Tizen::Social;
37
38 static const wchar_t* IDL_SETTINGS_ADD_NUMBER_FORM = L"IDL_SETTINGS_ADD_NUMBER_FORM";
39 static const wchar_t* IDL_SETTINGS_AUTO_AREA_CODE_FORM = L"IDL_SETTINGS_AUTO_AREA_CODE_FORM";
40 static const wchar_t* IDS_ALREADY_USED_MSG = L"IDS_ALREADY_USED_MSG";
41
42 SettingsAddNumberForm::SettingsAddNumberForm(FormType formType)
43         : __formType(formType)
44         , __selectedCriteria(CRITERIAOPTIONS_EXACT)
45         , __isCriteriaOptionsMenuExpanded(false)
46         , __activePrefixDialingNumber(L"")
47         , __isContactAppControlLaunched(false)
48 {
49 }
50
51 SettingsAddNumberForm::~SettingsAddNumberForm(void)
52 {
53 }
54
55 void
56 SettingsAddNumberForm::Initialize(void)
57 {
58         switch (__formType)
59         {
60         case FORMTYPE_NUMBER_TO_REJECT:
61         {
62                 Construct(IDL_SETTINGS_ADD_NUMBER_FORM);
63         }
64         break;
65
66         case FORMTYPE_AUTO_AREA_CODE:
67         {
68                 Construct(IDL_SETTINGS_AUTO_AREA_CODE_FORM);
69         }
70         break;
71         }
72 }
73
74 result
75 SettingsAddNumberForm::OnInitializing(void)
76 {
77         result r = E_SUCCESS;
78         //Initialize Header
79         InitializeHeader();
80         //Initialize table view
81         r = InitializeGroupedTableView();
82         TryReturn(r == E_SUCCESS,r,"GroupedTableView initialization failed");
83         //Initialize numeric edit field
84         InitializeNumberEditField();
85         return r;
86 }
87
88 void
89 SettingsAddNumberForm::InitializeHeader(void)
90 {
91         Header* pHeader = GetHeader();
92         if (pHeader != null)
93         {
94                 //'Save' item
95                 String saveItemName;
96                 saveItemName.Append(AppUtility::GetResourceString(IDS_SETTING_SAVE_HEADER_ITEM));
97                 ButtonItem saveHeaderItem;
98                 saveHeaderItem.Construct(BUTTON_ITEM_STYLE_TEXT, IDA_SAVE_HEADER_ITEMID);
99                 saveHeaderItem.SetText(saveItemName);
100                 pHeader->SetButton(BUTTON_POSITION_LEFT, saveHeaderItem);
101                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
102
103                 //'Cancel' item
104                 ButtonItem cancelHeaderItem;
105                 cancelHeaderItem.Construct(BUTTON_ITEM_STYLE_ICON, IDA_CANCEL_HEADER_ITEMID);
106                 Bitmap* pNormalBmp = AppUtility::GetBitmapFromResourcesN(IDB_BACK_HEADER_ITEM);
107                 Bitmap* pPressBmp = AppUtility::GetBitmapFromResourcesN(IDB_BACK_HEADER_ITEM_PRESSED);
108                 cancelHeaderItem.SetIcon(BUTTON_ITEM_STATUS_NORMAL, pNormalBmp);
109                 cancelHeaderItem.SetIcon(BUTTON_ITEM_STATUS_PRESSED, pPressBmp);
110                 pHeader->SetButton(BUTTON_POSITION_RIGHT, cancelHeaderItem);
111                 delete pNormalBmp;
112                 delete pPressBmp;
113
114                 pHeader->AddActionEventListener(*this);
115         }
116 }
117
118 result
119 SettingsAddNumberForm::OnTerminating(void)
120 {
121         result r = E_SUCCESS;
122         return r;
123 }
124
125 void
126 SettingsAddNumberForm::OnActionPerformed(const Control& source, int actionId)
127 {
128         switch (actionId)
129         {
130         case IDA_CANCEL_HEADER_ITEMID:
131         {
132                 GoBackToPreviousForm();
133         }
134         break;
135
136         case IDA_SAVE_HEADER_ITEMID:
137         {
138                 SettingsPresentationModel* pSettingsPresentor = SettingsPresentationModel::GetInstance();
139                 String editFieldNumber;
140                 EditField* pEditFieldNumber = static_cast<EditField*>(GetControl(IDC_NUMBER_EDITFIELD));
141                 if ((pEditFieldNumber != null) && (pEditFieldNumber->GetTextLength() != 0))
142                 {
143                         editFieldNumber.Append(pEditFieldNumber->GetText());
144                 }
145                 //handle save
146                 switch (__formType)
147                 {
148                 case FORMTYPE_NUMBER_TO_REJECT:
149                 {
150                         if(editFieldNumber.IsEmpty() == false)
151                         {
152                                 CallRejectMatchCondition matchCondition = (CallRejectMatchCondition)(__selectedCriteria + 1);
153                                 //todo: call update if in edit mode
154                                 result r = pSettingsPresentor->AddToCallRejectList(editFieldNumber, matchCondition);
155                                 if(r == E_OBJ_ALREADY_EXIST)
156                                 {
157                                         //Show error message box and go back to previous screen
158                                         String msg(L"");
159                                         msg.Append(editFieldNumber);
160                                         msg.Append(L" (");
161                                         msg.Append(FetchTextForCriteria(__selectedCriteria));
162                                         msg.Append(L") ");
163                                         msg.Append(AppUtility::GetResourceString(IDS_ALREADY_USED_MSG));
164                                         ShowDuplicateErrorMessageBox(msg);
165                                 }
166                                 GoBackToPreviousForm();
167                         }
168                 }
169                 break;
170
171                 case FORMTYPE_AUTO_AREA_CODE:
172                 {
173                         if(editFieldNumber.IsEmpty() == false)
174                         {
175                                 result r = pSettingsPresentor->SetPrefixDialNumber(0, editFieldNumber);
176                                 if (r == E_SUCCESS)
177                                 {
178                                         pSettingsPresentor->SetActivePrefixDialingValue(0);
179                                         pSettingsPresentor->SetPrefixDialingStatus(true);
180                                 }
181                         }
182                         else
183                         {
184                                 pSettingsPresentor->SetPrefixDialingStatus(false);
185                         }
186                         GoBackToPreviousForm();
187                 }
188                 break;
189                 }
190         }
191         break;
192
193         case IDA_SELECT_CONTACT:
194         {
195                 LaunchContactsAppControl();
196         }
197         break;
198
199         default:
200                 break;
201         }
202 }
203
204 void
205 SettingsAddNumberForm::ShowDuplicateErrorMessageBox(String& message)
206 {
207         // Creates an instance of MessageBox
208         MessageBox duplicateMsgBox;
209         duplicateMsgBox.Construct(L"", message, MSGBOX_STYLE_NONE, 2000);
210
211         int modalResult = 0;
212         // Calls ShowAndWait() : Draws and Shows itself and processes events
213         duplicateMsgBox.ShowAndWait(modalResult);
214 }
215
216 void
217 SettingsAddNumberForm::LaunchContactsAppControl(void)
218 {
219         if (__isContactAppControlLaunched == true)
220         {
221                 //app control already launched.
222                 return;
223         }
224         //launch app control
225         __isContactAppControlLaunched = true;
226         result r = E_SUCCESS;
227         HashMap extraData;
228         extraData.Construct();
229
230         extraData.Add(new (std::nothrow) String(SELECTION_MODE), new (std::nothrow) String(SELECTION_MODE_SINGLE));
231         extraData.Add(new (std::nothrow) String(RETURN_TYPE), new (std::nothrow) String(RETURN_TYPE_PHONE));
232
233         AppControl* pAc = AppManager::FindAppControlN(PROVIDER_ID_CONTACTS, OPERATION_ID_PICK);
234         if (pAc != null)
235         {
236                 r = pAc->Start(null, null, &extraData, this);
237                 if(r != E_SUCCESS)
238                 {
239                         //app control request failed.
240                         __isContactAppControlLaunched = false;
241                 }
242                 delete pAc;
243         }
244         extraData.RemoveAll(true);
245 }
246
247 void
248 SettingsAddNumberForm::OnAppControlCompleteResponseReceived(const AppId& appId, const String& operationId, AppCtrlResult appControlResult, const IMap* pExtraData)
249 {
250         if (appId.Equals(String(PROVIDER_ID_CONTACTS)) && operationId.Equals(String(OPERATION_ID_PICK)))
251         {
252                 //app control request completed.
253                 __isContactAppControlLaunched = false;
254                 //check if request was successful.
255                 if (appControlResult == APP_CTRL_RESULT_SUCCEEDED)
256                 {
257                         const String* rettype = static_cast<const String *>(pExtraData->GetValue( String(RETURN_TYPE)));
258                         if (rettype->Equals(String(RETURN_TYPE_PHONE),false))
259                         {
260                                 const String* pPickResult = static_cast<const String *>(pExtraData->GetValue( String(RETURN_KEY_VALUE)));
261                                 if (pPickResult != null && pPickResult->IsEmpty() == false)
262                                 {
263                                         EditField* pEditFieldNumber = static_cast<EditField*>(GetControl(IDC_NUMBER_EDITFIELD));
264                                         Header* pHeader = GetHeader();
265                                         if (pEditFieldNumber != null && pHeader != null)
266                                         {
267                                                 pEditFieldNumber->SetText(*pPickResult);
268                                                 pEditFieldNumber->Invalidate(true);
269                                                 //enable "save" button
270                                                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, true);
271                                                 pHeader->Invalidate(true);
272                                         }
273                                 }
274                         }
275                 }
276         }
277 }
278
279 void
280 SettingsAddNumberForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
281 {
282         EditField* pEditFieldNumber = static_cast<EditField*>(GetControl(IDC_NUMBER_EDITFIELD));
283         if (pEditFieldNumber != null)
284         {
285                 //clear edit field
286                 pEditFieldNumber->Clear();
287                 pEditFieldNumber->SetFocus();
288         }
289         __isContactAppControlLaunched = false;
290
291         //disable "save" button
292         Header* pHeader = GetHeader();
293         if (pHeader != null)
294         {
295                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
296         }
297
298         switch (__formType)
299         {
300         case FORMTYPE_NUMBER_TO_REJECT:
301         {
302                 __selectedCriteria = CRITERIAOPTIONS_EXACT;
303                 //set default item as checked
304                 GroupedTableView* pMainMenuTableView = static_cast<GroupedTableView*>(GetControl(IDC_GROUPEDTABLEVIEW));
305                 if (pMainMenuTableView != null)
306                 {
307                         //by default, "exact match" option is selected
308                         pMainMenuTableView->SetItemChecked(GROUP_CRITERIA_OPTIONS, __selectedCriteria, true);
309                         //un-check all other items
310                         pMainMenuTableView->SetItemChecked(GROUP_CRITERIA_OPTIONS, CRITERIAOPTIONS_STARTSWITH, false);
311                         pMainMenuTableView->SetItemChecked(GROUP_CRITERIA_OPTIONS, CRITERIAOPTIONS_ENDSWITH, false);
312                         pMainMenuTableView->SetItemChecked(GROUP_CRITERIA_OPTIONS, CRITERIAOPTIONS_INCLUDE, false);
313
314                         pMainMenuTableView->RefreshItem(GROUP_SELECT_CRITERIA, SELECTCRITERIA_MATCH_CRITERIA, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
315                         pMainMenuTableView->Invalidate(true);
316                 }
317         }
318         break;
319
320         case FORMTYPE_AUTO_AREA_CODE:
321         {
322                 __activePrefixDialingNumber.Clear();
323                 //Fetch active prefix
324                 SettingsPresentationModel* pSettingsPresentor = SettingsPresentationModel::GetInstance();
325                 if(pSettingsPresentor != null)
326                 {
327                         result r = pSettingsPresentor->GetActivePrefixDialNumber(__activePrefixDialingNumber);
328                         if(r == E_SUCCESS && __activePrefixDialingNumber.IsEmpty() == false && pEditFieldNumber != null)
329                         {
330                                 pEditFieldNumber->SetText(__activePrefixDialingNumber);
331                         }
332                 }
333         }
334         break;
335         }
336 }
337
338 void
339 SettingsAddNumberForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
340 {
341         EditField* pEditFieldNumber = static_cast<EditField*>(GetControl(IDC_NUMBER_EDITFIELD));
342         if (pEditFieldNumber != null)
343         {
344                 pEditFieldNumber->HideKeypad();
345         }
346         GroupedTableView* pMainMenuTableView = static_cast<GroupedTableView*>(GetControl(IDC_GROUPEDTABLEVIEW));
347         if (pMainMenuTableView != null && pMainMenuTableView->IsGroupExpanded(GROUP_CRITERIA_OPTIONS) == true)
348         {
349                 pMainMenuTableView->CollapseGroup(GROUP_CRITERIA_OPTIONS);
350                 __isCriteriaOptionsMenuExpanded = false;
351         }
352 }
353
354 void
355 SettingsAddNumberForm::InitializeNumberEditField(void)
356 {
357         EditField* pEditFieldNumber = static_cast<EditField*>(GetControl(IDC_NUMBER_EDITFIELD));
358         if (pEditFieldNumber != null)
359         {
360                 pEditFieldNumber->AddKeypadEventListener(*this);
361                 pEditFieldNumber->AddTextEventListener(*this);
362                 pEditFieldNumber->SetOverlayKeypadCommandButtonVisible(false);
363         }
364
365         Button* pContactBtn = static_cast<Button*>(GetControl(IDC_SELECT_CONTACT_BUTTON));
366         if (pContactBtn != null)
367         {
368                 pContactBtn->SetActionId(IDA_SELECT_CONTACT);
369                 pContactBtn->AddActionEventListener(*this);
370         }
371 }
372
373 void
374 SettingsAddNumberForm::GoBackToPreviousForm(void)
375 {
376         SceneManager* pSceneManager = SceneManager::GetInstance();
377         AppAssert(pSceneManager != null);
378
379         switch (__formType)
380         {
381         case FORMTYPE_NUMBER_TO_REJECT:
382         {
383                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CALL_REJECTLIST_MENU), null);
384         }
385         break;
386
387         case FORMTYPE_AUTO_AREA_CODE:
388         {
389                 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_MORE_OPTIONS), null);
390         }
391         break;
392
393         default:
394                 break;
395         }
396 }
397
398 result
399 SettingsAddNumberForm::InitializeGroupedTableView(void)
400 {
401         result r = E_SUCCESS;
402         GroupedTableView* pMainMenuTableView = static_cast<GroupedTableView*>(GetControl(IDC_GROUPEDTABLEVIEW));
403         if (pMainMenuTableView != null)
404         {
405                 pMainMenuTableView->SetGroupedLookEnabled(true);
406                 pMainMenuTableView->SetItemProvider(this);
407                 r = pMainMenuTableView->AddGroupedTableViewItemEventListener(*this);
408                 pMainMenuTableView->UpdateTableView();
409                 CollapseSelectiveGroups(pMainMenuTableView);
410         }
411         return r;
412 }
413
414 void
415 SettingsAddNumberForm::CollapseSelectiveGroups(GroupedTableView* pMainMenuTableView)
416 {
417         //This function should be called only from "InitializeGroupedTableView()".
418         //since collapsing individual groups while GroupTableView construction causes flicker.
419         pMainMenuTableView->CollapseAllGroup();
420         //Expand other groups
421         pMainMenuTableView->ExpandGroup(GROUP_SELECT_CRITERIA);
422         pMainMenuTableView->UpdateTableView();
423 }
424
425
426 void
427 SettingsAddNumberForm::OnGroupedTableViewItemStateChanged(GroupedTableView& tableView, int groupIndex, int itemIndex, TableViewItem* pItem, TableViewItemStatus status)
428 {
429         switch (groupIndex)
430         {
431         case GROUP_SELECT_CRITERIA:
432         {
433                 ToggleGroupExpansion(tableView, groupIndex, itemIndex);
434         }
435         break;
436
437         case GROUP_CRITERIA_OPTIONS:
438         {
439                 HandleMatchingCriteriaSelected(tableView, itemIndex, status);
440         }
441         break;
442
443         default:
444                 break;
445         }
446 }
447
448 int
449 SettingsAddNumberForm::GetGroupCount(void)
450 {
451         return GROUP_TOTALCOUNT;
452 }
453
454 int
455 SettingsAddNumberForm::GetItemCount(int groupIndex)
456 {
457         int itemCount = 0;
458         switch (groupIndex)
459         {
460         case GROUP_SELECT_CRITERIA:
461         {
462                 itemCount = SELECTCRITERIA_TOTALCOUNT;
463         }
464         break;
465
466         case GROUP_CRITERIA_OPTIONS:
467         {
468                 itemCount = CRITERIAOPTIONS_TOTALCOUNT;
469         }
470         break;
471
472         default:
473                 break;
474         }
475         return itemCount;
476 }
477
478 TableViewGroupItem*
479 SettingsAddNumberForm::CreateGroupItem(int groupIndex, int itemWidth)
480 {
481         TableViewGroupItem* pItem = new (std::nothrow) TableViewGroupItem();
482         pItem->Construct(Dimension(itemWidth, H_LIST_HIDDENGROUP_ITEM));
483         pItem->SetBackgroundColor(COLOR_GROUP_ITEM_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
484         return pItem;
485 }
486
487 bool
488 SettingsAddNumberForm::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
489 {
490         delete pItem;
491         pItem = null;
492         return true;
493 }
494
495 void
496 SettingsAddNumberForm::UpdateGroupItem(int groupIndex, TableViewGroupItem* pItem)
497 {
498         return;
499 }
500
501 TableViewItem*
502 SettingsAddNumberForm::CreateItem(int groupIndex, int itemIndex, int itemWidth)
503 {
504         TableViewItem* pItem = null;
505
506         switch (groupIndex)
507         {
508         case GROUP_SELECT_CRITERIA:
509         {
510                 pItem = CreateExpandableCriteriaItem(itemWidth);
511         }
512         break;
513
514         case GROUP_CRITERIA_OPTIONS:
515         {
516                 pItem = CreateCriteriaOptionsMenuItem(itemIndex, itemWidth);
517         }
518         break;
519
520         default:
521         break;
522         }
523         return pItem;
524 }
525
526 bool
527 SettingsAddNumberForm::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
528 {
529         delete pItem;
530         pItem = null;
531         return true;
532 }
533
534 void
535 SettingsAddNumberForm::UpdateItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem)
536 {
537         if(groupIndex == GROUP_SELECT_CRITERIA && itemIndex == SELECTCRITERIA_MATCH_CRITERIA)
538         {
539                 String subText = FetchTextForCriteria(__selectedCriteria);
540                 //sub text item
541                 Label* pSubTxtLbl = static_cast<Label*>(pItem->GetControl(IDC_SELECTEDOPTION_SUBTEXT_LABEL, true));
542                 if(pSubTxtLbl != null)
543                 {
544                         pSubTxtLbl->SetText(subText);
545                 }
546                 //set Drop-down icon to item
547                 SetExpandIconToItem(pItem, __isCriteriaOptionsMenuExpanded);
548         }
549 }
550
551 int
552 SettingsAddNumberForm::GetDefaultGroupItemHeight(void)
553 {
554         return H_LIST_HIDDENGROUP_ITEM;
555 }
556
557 int
558 SettingsAddNumberForm::GetDefaultItemHeight(void)
559 {
560         return H_LIST_NORMAL_MENU_ITEM;
561 }
562
563 TableViewItem*
564 SettingsAddNumberForm::CreateExpandableCriteriaItem(int itemWidth)
565 {
566         //main text
567         Rectangle mainItemRect(X_LIST_MENU_TEXT_ITEM, Y_LIST_MENU_TEXT_ITEM, (itemWidth - (2 * X_LIST_MENU_TEXT_ITEM) - W_EXPAND_ICON),
568                                                            H_LIST_DROPDOWN_TXT_ITEM);
569         String mainText = AppUtility::GetResourceString(IDS_SETTINGS_MATCHCRITERIA_STRING);
570         //sub text
571         Rectangle subItemRect(X_LIST_MENU_TEXT_ITEM, (Y_LIST_MENU_TEXT_ITEM + H_LIST_DROPDOWN_TXT_ITEM),
572                                                   (itemWidth - (2 * X_LIST_MENU_TEXT_ITEM) - W_EXPAND_ICON), H_LIST_DROPDOWN_TXT_ITEM);
573         String subText = FetchTextForCriteria(__selectedCriteria);
574
575         TableViewItem* pItem = new (std::nothrow) TableViewItem();
576         pItem->Construct(Dimension(itemWidth, H_LIST_DROPDOWN_MENU_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
577         //main text item
578         Label* pMainTxtLbl = new (std::nothrow) Label();
579         pMainTxtLbl->Construct(mainItemRect, mainText);
580         pMainTxtLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
581         pMainTxtLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
582         pMainTxtLbl->SetTextConfig(FONT_SIZE_MAIN_TXT, LABEL_TEXT_STYLE_NORMAL);
583         pMainTxtLbl->SetTextColor(COLOR_NORMAL_MAIN_TXT);
584         pItem->AddControl(*pMainTxtLbl);
585         //sub text item
586         Label* pSubTxtLbl = new (std::nothrow) Label();
587         pSubTxtLbl->Construct(subItemRect, subText);
588         pSubTxtLbl->SetName(IDC_SELECTEDOPTION_SUBTEXT_LABEL);
589         pSubTxtLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
590         pSubTxtLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
591         pSubTxtLbl->SetTextConfig(FONT_SIZE_SUB_TXT, LABEL_TEXT_STYLE_NORMAL);
592         pSubTxtLbl->SetTextColor(COLOR_NORMAL_SUB_TXT);
593         pItem->AddControl(*pSubTxtLbl);
594
595         pItem->SetBackgroundColor(COLOR_LIST_MENU_ITEM, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
596         //set Drop-down icon to item
597         SetExpandIconToItem(pItem, __isCriteriaOptionsMenuExpanded);
598         return pItem;
599 }
600
601 String
602 SettingsAddNumberForm::FetchTextForCriteria(int itemIndex)
603 {
604         //default text
605         String subText = AppUtility::GetResourceString(IDS_MATCHCRITERIA_EXACT);
606         switch(itemIndex)
607         {
608         case CRITERIAOPTIONS_EXACT:
609                 subText = AppUtility::GetResourceString(IDS_MATCHCRITERIA_EXACT);
610                 break;
611
612         case CRITERIAOPTIONS_STARTSWITH:
613                 subText = AppUtility::GetResourceString(IDS_MATCHCRITERIA_START);
614                 break;
615
616         case CRITERIAOPTIONS_ENDSWITH:
617                 subText = AppUtility::GetResourceString(IDS_MATCHCRITERIA_END);
618                 break;
619
620         case CRITERIAOPTIONS_INCLUDE:
621                 subText = AppUtility::GetResourceString(IDS_MATCHCRITERIA_INCLUDE);
622                 break;
623
624         default:
625                 break;
626         }
627
628         return subText;
629 }
630
631 void
632 SettingsAddNumberForm::SetExpandIconToItem(TableViewItem* pItem, bool isExpanded)
633 {
634         Bitmap* pNormalIcon = null;
635         Bitmap* pPressIcon = null;
636
637         if (!isExpanded)
638         {
639                 pNormalIcon = AppUtility::GetBitmapFromResourcesN(IDB_LIST_EXPAND, W_EXPAND_ICON, H_EXPAND_ICON);
640                 pPressIcon = AppUtility::GetBitmapFromResourcesN(IDB_LIST_EXPAND_PRESSED, W_EXPAND_ICON, H_EXPAND_ICON);
641         }
642         else
643         {
644                 pNormalIcon = AppUtility::GetBitmapFromResourcesN(IDB_LIST_OPENED, W_EXPAND_ICON, H_EXPAND_ICON);
645                 pPressIcon = AppUtility::GetBitmapFromResourcesN(IDB_LIST_OPENED_PRESSED, W_EXPAND_ICON, H_EXPAND_ICON);
646         }
647
648         int itemWidth = pItem->GetWidth();
649
650         Rectangle iconRect((itemWidth - W_EXPAND_ICON - X_LIST_MENU_TEXT_ITEM),
651                                            ((H_LIST_DROPDOWN_MENU_ITEM - H_EXPAND_ICON) / 2), W_EXPAND_ICON, H_EXPAND_ICON);
652
653         //for drawing blue bg header rectangle on left side.
654         Rectangle blueHeaderRect(0,0,W_LEFT_HEADER_EXPAND_ITEMS,pItem->GetHeight());
655         //normal canvas
656         Canvas* pBgCanvas = new (std::nothrow) Canvas();
657         pBgCanvas->Construct(Rectangle(0,0, pItem->GetBounds().width, pItem->GetBounds().height));
658         pBgCanvas->DrawBitmap(iconRect, *pNormalIcon);
659         pBgCanvas->FillRectangle(COLOR_LEFT_HEADER_EXPAND_ITEMS, blueHeaderRect);
660         Bitmap* pActualBgBmp = new (std::nothrow) Bitmap();
661         pActualBgBmp->Construct(*pBgCanvas,pBgCanvas->GetBounds());
662         pItem->SetBackgroundBitmap(pActualBgBmp, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
663         delete pBgCanvas;
664         delete pActualBgBmp;
665
666         //pressed canvas
667         pBgCanvas = new (std::nothrow) Canvas();
668         pBgCanvas->Construct(Rectangle(0,0, pItem->GetBounds().width, pItem->GetBounds().height));
669         pBgCanvas->DrawBitmap(iconRect, *pPressIcon);
670         pBgCanvas->FillRectangle(COLOR_LEFT_HEADER_EXPAND_ITEMS, blueHeaderRect);
671         pActualBgBmp = new (std::nothrow) Bitmap();
672         pActualBgBmp->Construct(*pBgCanvas,pBgCanvas->GetBounds());
673         pItem->SetBackgroundBitmap(pActualBgBmp, TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED);
674         delete pBgCanvas;
675         delete pActualBgBmp;
676
677         delete pNormalIcon;
678         pNormalIcon = null;
679         delete pPressIcon;
680         pPressIcon = null;
681 }
682
683 void
684 SettingsAddNumberForm::ToggleGroupExpansion(GroupedTableView& tableView, int groupIndex, int itemIndex)
685 {
686         switch (itemIndex)
687         {
688         case SELECTCRITERIA_MATCH_CRITERIA:
689         {
690                 if (tableView.IsGroupExpanded(GROUP_CRITERIA_OPTIONS) == true)
691                 {
692                         tableView.CollapseGroup(GROUP_CRITERIA_OPTIONS);
693                         __isCriteriaOptionsMenuExpanded = false;
694                 }
695                 else
696                 {
697                         tableView.ExpandGroup(GROUP_CRITERIA_OPTIONS);
698                         __isCriteriaOptionsMenuExpanded = true;
699                 }
700                 //Change icon
701                 tableView.RefreshItem(GROUP_SELECT_CRITERIA, SELECTCRITERIA_MATCH_CRITERIA, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
702         }
703         break;
704
705         default:
706                 break;
707         }
708
709         //close overlay keypad
710         EditField* pEditFieldNumber = static_cast<EditField*>(GetControl(IDC_NUMBER_EDITFIELD));
711         if (pEditFieldNumber != null && pEditFieldNumber->HasFocus() == true)
712         {
713                 pEditFieldNumber->HideKeypad();
714         }
715 }
716
717 TableViewItem*
718 SettingsAddNumberForm::CreateCriteriaOptionsMenuItem(int itemIndex, int itemWidth)
719 {
720         //create a new item
721         TableViewItem* pItem = new (std::nothrow) TableViewItem();
722         pItem->Construct(Dimension(itemWidth, H_LIST_NORMAL_MENU_ITEM), TABLE_VIEW_ANNEX_STYLE_RADIO);
723         pItem->SetBackgroundColor(COLOR_SECONDDEPTH_ITEM_BG, TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL);
724
725         //text item rectangle
726         Rectangle itemRect(X_LIST_MENU_TEXT_ITEM, 0, (itemWidth - X_LIST_MENU_TEXT_ITEM), H_LIST_NORMAL_MENU_ITEM);
727         //Option item name
728         String itemName(L"");
729         itemName.Append(FetchTextForCriteria(itemIndex));
730
731         Label* pItemLbl = new (std::nothrow) Label();
732         pItemLbl->Construct(itemRect, itemName);
733         pItemLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
734         pItemLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
735         pItemLbl->SetTextConfig(FONT_SIZE_MAIN_TXT, LABEL_TEXT_STYLE_NORMAL);
736         pItemLbl->SetTextColor(COLOR_NORMAL_MAIN_TXT);//COLOR_PRESS_MAIN_TXT
737         pItem->AddControl(*pItemLbl);
738
739         return pItem;
740 }
741
742 void
743 SettingsAddNumberForm::HandleMatchingCriteriaSelected(GroupedTableView& tableView, int itemIndex, TableViewItemStatus status)
744 {
745         //check if already checked item is selected
746         if (status == TABLE_VIEW_ITEM_STATUS_UNCHECKED)
747         {
748                 tableView.SetItemChecked(GROUP_CRITERIA_OPTIONS, itemIndex, true);
749                 __selectedCriteria = (GroupCriteriaOptionsItems) itemIndex;
750                 return;
751         }
752         //un-check previous selected options
753         if(__selectedCriteria != (GroupCriteriaOptionsItems(itemIndex)))
754         {
755                 tableView.SetItemChecked(GROUP_CRITERIA_OPTIONS, __selectedCriteria, false);
756                 tableView.RefreshItem(GROUP_CRITERIA_OPTIONS, __selectedCriteria, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
757         }
758         //update selected criteria to latest checked itemIndex
759         __selectedCriteria = (GroupCriteriaOptionsItems) itemIndex;
760         //change sub text for criteria options menu
761         tableView.RefreshItem(GROUP_SELECT_CRITERIA, SELECTCRITERIA_MATCH_CRITERIA, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
762         tableView.Invalidate(true);
763 }
764
765 void
766 SettingsAddNumberForm::OnKeypadWillOpen(Tizen::Ui::Control& source)
767 {
768         GroupedTableView* pMainMenuTableView = static_cast<GroupedTableView*>(GetControl(IDC_GROUPEDTABLEVIEW));
769         if (pMainMenuTableView != null && __isCriteriaOptionsMenuExpanded == true)
770         {
771                 pMainMenuTableView->CollapseGroup(GROUP_CRITERIA_OPTIONS);
772                 __isCriteriaOptionsMenuExpanded = false;
773                 //Change icon
774                 pMainMenuTableView->RefreshItem(GROUP_SELECT_CRITERIA, SELECTCRITERIA_MATCH_CRITERIA, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
775         }
776 }
777
778 void
779 SettingsAddNumberForm::OnTextValueChanged(const Control& source)
780 {
781         //enable or disable save button
782         const EditField* pEditFieldNumber = static_cast<const EditField*>(&source);
783         Header* pHeader = GetHeader();
784         if (pEditFieldNumber != null && pHeader != null)
785         {
786                 bool activateSave = false;
787                 switch (__formType)
788                 {
789                 case FORMTYPE_AUTO_AREA_CODE:
790                 {
791                         if (__activePrefixDialingNumber.Equals(pEditFieldNumber->GetText()) == false)
792                         {
793                                 activateSave = true;
794                         }
795                 }
796                         break;
797
798                 case FORMTYPE_NUMBER_TO_REJECT:
799                 {
800                         if(pEditFieldNumber->GetText().IsEmpty() == false)
801                         {
802                                 activateSave = true;
803                         }
804                 }
805                         break;
806                 }
807                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, activateSave);
808                 pHeader->Invalidate(true);
809         }
810 }
811
812 void
813 SettingsAddNumberForm::OnTextValueChangeCanceled(const Control& source)
814 {
815         //text change canceled, disable save button
816         const EditField* pEditFieldNumber = static_cast<const EditField*>(&source);
817         Header* pHeader = GetHeader();
818         if (pEditFieldNumber != null && pHeader != null)
819         {
820                 pHeader->SetButtonEnabled(BUTTON_POSITION_LEFT, false);
821                 pHeader->Invalidate(true);
822         }
823 }