Tizen 2.0 Release
[apps/osp/Phone.git] / src / PhnDialerKeypad.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    PhnDialerKeypad.cpp
19  * @brief       Dial Contact Info class
20  */
21 #include "PhnDialerKeypad.h"
22 #include "PhnAppUtility.h"
23 #include "PhnCommonUtils.h"
24 #include "PhnPhoneApp.h"
25 #include "PhnTabDialer.h"
26 #include "PhnTypes.h"
27
28 using namespace Tizen::App;
29 using namespace Tizen::Base;
30 using namespace Tizen::Ui;
31 using namespace Tizen::Graphics;
32 using namespace Tizen::Ui::Controls;
33 using namespace Tizen::Base::Collection;
34
35 //Constants
36 const wchar_t* IDI_CANCEL_KEY_TXT = L"Cancel";
37 const wchar_t* IDC_VIDEOCALL_KEY_NAME = L"IDC_BUTTON13";
38 const wchar_t* IDC_CALL_KEY_NAME = L"IDC_BUTTON14";
39 const wchar_t* IDC_BUTTON_NAME = L"IDC_BUTTON";
40 static const wchar_t* IDC_PANEL_DISPLAY_DATA = L"IDC_PANEL_DISPLAY_DATA";
41 const int W_VOICEMAIL_ICON = 75;
42 const int H_VOICEMAIL_ICON = 75;
43 const int W_STAR_ICON = 75;
44 const int H_STAR_ICON = 75;
45 const int W_MUTE_ICON = 64;
46 const int H_MUTE_ICON = 64;
47 const int W_VIDEOCALL_ICON = 76;
48 const int H_VIDEOCALL_ICON = 76;
49 const int W_CALL_ICON = 76;
50 const int H_CALL_ICON = 76;
51 const int W_CLEAR_ICON = 76;
52 const int H_CLEAR_ICON = 44;
53 const int X_CALL_KEY = 12;
54 const int MAX_SLIDEDOWN_PIXELS = 110;
55
56 DialerKeypad::DialerKeypad(DialerState openedState) : Panel()
57 {
58         __openedState = openedState;
59         __pParentActionListener = null;
60         __pParentLongTapListener = null;
61         __pLongPressDetectors = null;
62 }
63
64 DialerKeypad::~DialerKeypad(void)
65 {
66         if(__pLongPressDetectors != null)
67         {
68                 __pLongPressDetectors->RemoveAll();
69                 delete __pLongPressDetectors;
70         }
71         //remove all child controls
72         RemoveAllControls();
73 }
74
75 bool
76 DialerKeypad::ConstructPanel(IActionEventListener* pActionListener, ITouchLongPressGestureEventListener* pLongTapListener)
77 {
78         result r = E_FAILURE;
79         TryCatch(pActionListener != null,,"pActionListener is null");
80         TryCatch(pLongTapListener != null,,"pLongTapListener is null");
81
82         //set parent panel which acts as action listener
83         __pParentActionListener = pActionListener;
84         __pParentLongTapListener = pLongTapListener;
85
86         r = Construct(IDL_DIALER_KEYPAD_PANEL);
87         TryCatch(r == E_SUCCESS, , "Panel::Construct() failed");
88
89         if(__openedState == DIALER_STATE_EMERGENCY_APPCONTROL)
90         {
91                 //no video call or cancel button is shown for Emergency Screen
92                 Button* pVideoCallButton = static_cast<Button*>(GetControl(IDC_VIDEOCALL_KEY_NAME, true));
93                 if (pVideoCallButton != null)
94                 {
95                         RemoveControl(*pVideoCallButton);
96                         pVideoCallButton = null;
97                 }
98         }
99         //Add action listener and long press gesture listeners.
100         AddListenersToButtons();
101
102         return true;
103 CATCH:
104         return false;
105 }
106
107 result
108 DialerKeypad::OnInitializing(void)
109 {
110         result r = E_SUCCESS;
111         if(__openedState == DIALER_STATE_EMERGENCY_APPCONTROL)
112         {
113                 //reset size and position for emergency dial form
114                 Rectangle rect = GetBounds();
115                 rect.y = rect.y + MAX_SLIDEDOWN_PIXELS;
116                 r = SetBounds(rect);
117                 //reset position and size for call button
118                 Button* pCallButton = static_cast<Button*>(GetControl(IDC_CALL_KEY_NAME, true));
119                 Rectangle callRect = pCallButton->GetBounds();
120                 callRect.x = X_CALL_KEY;
121                 callRect.width += pCallButton->GetBounds().width + X_CALL_KEY;
122                 r = pCallButton->SetBounds(callRect);
123         }
124
125         RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetLandscapeLayoutN());
126         Panel* pDisplayPanel = static_cast<Panel*>(GetParent()->GetControl(IDC_PANEL_DISPLAY_DATA, true));
127         if (pRelativeLayout != null)
128         {
129                 pRelativeLayout->SetHorizontalFitPolicy(*this, FIT_POLICY_PARENT);
130                 pRelativeLayout->SetRelation(*this, *pDisplayPanel, RECT_EDGE_RELATION_TOP_TO_BOTTOM);
131                 pRelativeLayout->SetRelation(*this, *GetParent(), RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
132                 delete pRelativeLayout;
133         }
134
135         pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetPortraitLayoutN());
136         if (pRelativeLayout != null)
137         {
138                 pRelativeLayout->SetHorizontalFitPolicy(*this, FIT_POLICY_PARENT);
139                 pRelativeLayout->SetRelation(*this, *pDisplayPanel, RECT_EDGE_RELATION_TOP_TO_BOTTOM);
140                 pRelativeLayout->SetRelation(*this, *GetParent(), RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
141                 delete pRelativeLayout;
142         }
143
144         //initialize buttons
145         SetBitmapToKeypadButtons();
146         Draw(true);
147         Show();
148         return r;
149 }
150
151 void
152 DialerKeypad::AddListenersToButtons(void)
153 {
154         //Construct array to store LongPress touch detectors
155         __pLongPressDetectors = new (std::nothrow) ArrayList(SingleObjectDeleter);
156         __pLongPressDetectors->Construct(14);
157         for (int i = 1; i <= 15; i++)
158         {
159                 //initialize buttons and add action listener
160                 String buttonName(IDC_BUTTON_NAME);
161                 buttonName.Append(i);
162                 Button* pButton = static_cast<Button*>(GetControl(buttonName, true));
163                 if(pButton == null)
164                 {
165                         continue;
166                 }
167                 //check if cancel button is shown instead of video call button
168                 if((i == VIDEOCALL_KEY) && (IsShowCancelButton() == true))
169                 {
170                         pButton->SetActionId(CANCEL_KEY);
171                 }
172                 else
173                 {
174                         pButton->SetActionId(i);
175                 }
176                 SetControlAlwaysOnTop(*pButton,true);
177
178                 //Add Listeners
179                 if(__pParentActionListener != null)
180                 {
181                         pButton->AddActionEventListener(*__pParentActionListener);
182                 }
183
184                 if(__pParentLongTapListener != null)
185                 {
186                         //If __openedState is Emergency Call AppControl then add LongPress detector for only 'CLEAR_KEY'.
187                         if ( (i == NUM_KEY1 && (IsShowVoiceMailIcon() == true))
188                                         || ((i >= NUM_KEY2 && i <= HASH_KEY) && (__openedState != DIALER_STATE_EMERGENCY_APPCONTROL))
189                                         || (i == CLEAR_KEY) )
190                         {
191                                 //Construct and Add gesture detector to "0-9,P,#,Clear" buttons
192                                 TouchLongPressGestureDetector* pLongPressDetector = new (std::nothrow) TouchLongPressGestureDetector();
193                                 pLongPressDetector->Construct();
194                                 pLongPressDetector->SetCancelTouchEventOnSuccessEnabled(true);
195                                 pLongPressDetector->AddLongPressGestureEventListener(*__pParentLongTapListener);
196                                 pButton->AddGestureDetector(*pLongPressDetector);
197                                 //stored in an array list
198                                 __pLongPressDetectors->Add(pLongPressDetector);
199                         }
200                 }
201         }
202 }
203
204 void
205 DialerKeypad::SetBitmapToKeypadButtons(void)
206 {
207         AppLogDebug("ENTER");
208         //Create the buttons of the keypad
209         for (int i = 1; i <= 15; i++)
210         {
211                 //initialize buttons and add action listener
212                 String buttonName(IDC_BUTTON_NAME);
213                 buttonName.Append(i);
214                 Button* pButton = static_cast<Button*>(GetControl(buttonName, true));
215                 if(pButton == null)
216                 {
217                         continue;
218                 }
219
220                 //Draw text/image and background in a canvas and add it to the button
221                 Rectangle canvasRect(0, 0, pButton->GetBounds().width, pButton->GetBounds().height);
222                 Canvas* pCanvasNormal = new (std::nothrow) Canvas();
223                 pCanvasNormal->Construct(canvasRect);
224                 Canvas* pCanvasPressed = new (std::nothrow) Canvas();
225                 pCanvasPressed->Construct(canvasRect);
226
227                 String number(DialUtil::ConvertDialedNumberToString(pButton->GetActionId()));
228                 switch (pButton->GetActionId())
229                 {
230                 case NUM_KEY1:
231                 {
232                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE_ICON);
233                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
234                         //Set canvas for pressed state of the button
235                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
236                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
237                         if(IsShowVoiceMailIcon() == true)
238                         {
239                                 DialUtil::DrawImageToCanvas(IDB_VOICEMAIL_BTN_ICON, Dimension(W_VOICEMAIL_ICON, H_VOICEMAIL_ICON), *pCanvasNormal, POSITION_RIGHT);
240                                 DialUtil::DrawImageToCanvas(IDB_VOICEMAIL_BTN_PRESS_ICON, Dimension(W_VOICEMAIL_ICON, H_VOICEMAIL_ICON), *pCanvasPressed, POSITION_RIGHT);
241                         }
242                 }
243                 break;
244
245                 case NUM_KEY2:
246                 {
247                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE_ICON);
248                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
249                         DialUtil::DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
250
251                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
252                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
253                         DialUtil::DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
254                 }
255                 break;
256
257                 case NUM_KEY3:
258                 {
259                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE_ICON);
260                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
261                         DialUtil::DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
262
263                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
264                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
265                         DialUtil::DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
266                 }
267                 break;
268
269                 case NUM_KEY4:
270                 {
271                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE2_ICON);
272                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
273                         DialUtil::DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
274
275                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
276                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
277                         DialUtil::DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
278                 }
279                 break;
280
281                 case NUM_KEY5:
282                 {
283                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE2_ICON);
284                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
285                         DialUtil::DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
286
287                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
288                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
289                         DialUtil::DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
290                 }
291                 break;
292
293                 case NUM_KEY6:
294                 {
295                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE2_ICON);
296                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
297                         DialUtil::DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
298
299                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
300                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
301                         DialUtil::DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
302                 }
303                 break;
304
305                 case NUM_KEY7:
306                 {
307                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE3_ICON);
308                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
309                         DialUtil::DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
310
311                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
312                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
313                         DialUtil::DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
314                 }
315                 break;
316
317                 case NUM_KEY8:
318                 {
319                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE3_ICON);
320                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
321                         DialUtil::DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
322
323                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
324                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
325                         DialUtil::DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
326                 }
327                 break;
328
329                 case NUM_KEY9:
330                 {
331                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE3_ICON);
332                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
333                         DialUtil::DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
334
335                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
336                         DialUtil::DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
337                         DialUtil::DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
338                 }
339                 break;
340
341                 case PAUSE_KEY:
342                 {
343                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE4_ICON);
344                         DialUtil::DrawImageToCanvas(IDB_DIALER_STAR_ICON, Dimension(W_STAR_ICON, H_STAR_ICON), *pCanvasNormal, POSITION_LEFT);
345                         DialUtil::DrawTextToCanvas(L"P", FONT_KEYPAD_P, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
346
347                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
348                         DialUtil::DrawImageToCanvas(IDB_DIALER_STAR_ICON, Dimension(W_STAR_ICON, H_STAR_ICON), *pCanvasPressed, POSITION_LEFT);
349                         DialUtil::DrawTextToCanvas(L"P", FONT_KEYPAD_P, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
350                 }
351                 break;
352
353                 case NUM_KEY0:
354                 {
355                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE4_ICON);
356                         DialUtil::DrawTextToCanvas(L"0", FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
357                         DialUtil::DrawTextToCanvas(L"+", FONT_KEYPAD_PLUS, *pCanvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
358
359                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
360                         DialUtil::DrawTextToCanvas(L"0", FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
361                         DialUtil::DrawTextToCanvas(L"+", FONT_KEYPAD_PLUS, *pCanvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
362                 }
363                 break;
364
365                 case HASH_KEY:
366                 {
367                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE4_ICON);
368                         DialUtil::DrawTextToCanvas(L"#", FONT_KEYPAD_NUMBER, *pCanvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
369                         DialUtil::DrawImageToCanvas(IDB_DIALER_MUTE_ICON, Dimension(W_MUTE_ICON, H_MUTE_ICON), *pCanvasNormal, POSITION_RIGHT);
370
371                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
372                         DialUtil::DrawTextToCanvas(L"#", FONT_KEYPAD_NUMBER, *pCanvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
373                         DialUtil::DrawImageToCanvas(IDB_DIALER_MUTE_ICON, Dimension(W_MUTE_ICON, H_MUTE_ICON), *pCanvasPressed, POSITION_RIGHT);
374                 }
375                 break;
376
377                 case VIDEOCALL_KEY:
378                 {
379                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE5_ICON);
380                         DialUtil::DrawImageToCanvas(IDB_DIALER_VIDEOCALL_ICON, Dimension(W_VIDEOCALL_ICON, H_VIDEOCALL_ICON), *pCanvasNormal, POSITION_CENTER);
381
382                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
383                         DialUtil::DrawImageToCanvas(IDB_DIALER_VIDEOCALL_ICON, Dimension(W_VIDEOCALL_ICON, H_VIDEOCALL_ICON), *pCanvasPressed, POSITION_CENTER);
384                 }
385                 break;
386
387                 case CANCEL_KEY:
388                 {
389                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE5_ICON);
390                         DialUtil::DrawTextToCanvas(IDI_CANCEL_KEY_TXT, FONT_KEYPAD_CANCEL, *pCanvasNormal, POSITION_CENTER, BUTTON_STATUS_NORMAL);
391
392                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
393                         DialUtil::DrawTextToCanvas(IDI_CANCEL_KEY_TXT, FONT_KEYPAD_CANCEL, *pCanvasPressed, POSITION_CENTER, BUTTON_STATUS_NORMAL);
394                 }
395                 break;
396
397                 case CALL_KEY:
398                 {
399                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_CALL_BG_ICON);
400                         DialUtil::DrawImageToCanvas(IDB_DIALER_CALL_ICON, Dimension(W_CALL_ICON, H_CALL_ICON), *pCanvasNormal, POSITION_CENTER);
401
402                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
403                         DialUtil::DrawImageToCanvas(IDB_DIALER_CALL_ICON, Dimension(W_CALL_ICON, H_CALL_ICON), *pCanvasPressed, POSITION_CENTER);
404                 }
405                 break;
406
407                 case CLEAR_KEY:
408                 {
409                         DialUtil::Draw9PatchToCanvas(*pCanvasNormal, IDB_DIALER_BTN_LINE5_ICON);
410                         DialUtil::DrawImageToCanvas(IDB_DIALER_CLEAR_ICON, Dimension(W_CLEAR_ICON, H_CLEAR_ICON), *pCanvasNormal, POSITION_CENTER);
411
412                         DialUtil::Draw9PatchToCanvas(*pCanvasPressed, IDB_DIALER_BTN_PRESS_ICON);
413                         DialUtil::DrawImageToCanvas(IDB_DIALER_CLEAR_ICON, Dimension(W_CLEAR_ICON, H_CLEAR_ICON), *pCanvasPressed, POSITION_CENTER);
414                 }
415                 break;
416                 }
417
418                 //Set the final Bitmap to Button
419                 DialUtil::DrawCanvasToButton(pCanvasNormal, pCanvasPressed, pButton);
420                 delete pCanvasNormal;
421                 pCanvasNormal = null;
422                 delete pCanvasPressed;
423                 pCanvasPressed = null;
424         }
425         AppLogDebug("EXIT");
426         return;
427 }
428
429 bool
430 DialerKeypad::IsShowCancelButton(void)
431 {
432         //'Cancel' is shown instead of 'Video Call' when opened in 'DIALER_STATE_ADD_CALL'.
433         bool isShowCancel = false;
434         if (__openedState == DIALER_STATE_ADD_CALL)
435         {
436                 isShowCancel = true;
437         }
438         return isShowCancel;
439 }
440
441 bool
442 DialerKeypad::IsShowVoiceMailIcon(void)
443 {
444         //voice mail icon is not shown when opened from any APPCONTROL or from DIALER_STATE_ADD_CALL.
445         bool isShowVoiceMail = false;
446         if (__openedState == DIALER_STATE_FIRST_SCENE)
447         {
448                 isShowVoiceMail = true;
449         }
450         return isShowVoiceMail;
451 }
452
453 bool
454 DialerKeypad::IsShowVideoCallButton(void)
455 {
456         //video call button is shown in 'DIALER_STATE_FIRST_SCENE' , 'DIALER_STATE_NORMAL_APPCONTROL'.
457         bool isShowVideoCall = true;
458         if ((__openedState == DIALER_STATE_EMERGENCY_APPCONTROL) || (__openedState == DIALER_STATE_ADD_CALL))
459         {
460                 isShowVideoCall = false;
461         }
462         return isShowVideoCall;
463 }
464
465 result
466 DialerKeypad::OnTerminating(void)
467 {
468         for (int index = 0; index < __pLongPressDetectors->GetCount(); index++)
469         {
470                 TouchLongPressGestureDetector* pLongPressDetector = static_cast<TouchLongPressGestureDetector*>(__pLongPressDetectors->GetAt(index));
471                 Button* pButton = static_cast<Button*>(pLongPressDetector->GetControl());
472                 pButton->RemoveGestureDetector(*pLongPressDetector);
473         }
474         return E_SUCCESS;
475 }