Tizen 2.0 Release
[apps/osp/Phone.git] / src / PhnTabLogsItemProvider.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        PhnTabLogsItemProvider.cpp
19  * @brief       Call log item provider
20  */
21
22 #include <FGraphics.h>
23 #include <FUi.h>
24 #include <FUiControl.h>
25 #include <FBase.h>
26 #include <FMedia.h>
27 #include <FApp.h>
28 #include <FLocales.h>
29 #include <FSystem.h>
30 #include "PhnAppUtility.h"
31 #include "PhnCommonUtils.h"
32 #include "PhnSettingsConstants.h"
33 #include "PhnTabLogsItemProvider.h"
34 #include "PhnTypes.h"
35
36 using namespace Tizen::Base;
37 using namespace Tizen::Base::Collection;
38 using namespace Tizen::App;
39 using namespace Tizen::Graphics;
40 using namespace Tizen::Locales;
41 using namespace Tizen::Media;
42 using namespace Tizen::Social;
43 using namespace Tizen::System;
44
45 const int MAX_TWELVEHOUR_FORMAT = 12;
46 const int MAX_TWELVEHOUR_FORMAT_LENGTH = 8;
47 const int H_LOG_ITEM = 128;
48 const int H_LOG_ITEM_TEXT = 50;
49 const int W_LOG_ITEM_TEXT = 50;
50 const int LOG_ITEM_FONT_SIZE = 32;
51
52 const wchar_t* IDS_MSG_CONTEXT_ITEM = L"IDS_MSG_BTN_NAME";
53 const wchar_t* IDS_VIDEO_CALL_CONTEXT_ITEM = L"IDS_VIDEO_CALL_BTN_NAME";
54 const wchar_t* IDS_VOICE_CALL_CONTEXT_ITEM = L"IDS_VOICE_CALL_BTN_NAME";
55
56 CustomDataProvider::CustomDataProvider(void)
57 {
58         __isEditStyle = false;
59         __pGroupData = null;
60         __pAddressBook = new (std::nothrow) Addressbook();
61         __pAddressBook->Construct();
62         __pItemContext = new ListContextItem();
63         __pItemContext->Construct();
64         String voiceCallStr = AppUtility::GetResourceString(IDS_VOICE_CALL_CONTEXT_ITEM);
65         __pItemContext->AddElement(IDA_LIST_ELEMENT_CALL, voiceCallStr);
66         String messageStr = AppUtility::GetResourceString(IDS_MSG_CONTEXT_ITEM);
67         __pItemContext->AddElement(IDA_LIST_ELEMENT_MESSAGE, messageStr);
68         String videoCallStr = AppUtility::GetResourceString(IDS_VIDEO_CALL_CONTEXT_ITEM);
69         __pItemContext->AddElement(IDA_LIST_ELEMENT_VIDEO_CALL, videoCallStr);
70         String delStr = AppUtility::GetResourceString(IDS_DELETE_BTN_STRING);
71         __pItemContext->AddElement(IDA_LIST_ELEMENT_DELETE, delStr);
72         return;
73 }
74
75 CustomDataProvider::~CustomDataProvider(void)
76 {
77         ArrayList* pCalllogList = null;
78         GroupItemClass* pGroupInfo = null;
79
80         if(__pGroupData != null)
81         {
82                 for(int index = 0; index < __pGroupData->GetCount(); index++)
83                 {
84                         pGroupInfo = static_cast<GroupItemClass*>(__pGroupData->GetAt(index));
85
86                         if(pGroupInfo != null)
87                         {
88                                 pCalllogList = pGroupInfo->GetLogData();
89                                 if(pCalllogList != null)
90                                 {
91                                         AppLog(" data cnt = %d", pCalllogList->GetCount());
92                                         pCalllogList->RemoveAll(true);
93
94                                         delete pCalllogList;
95                                         pCalllogList = null;
96                                 }
97                                 delete pGroupInfo;
98                                 pGroupInfo = null;
99                         }
100                 }
101                 __pGroupData->RemoveAll(false);
102                 delete __pGroupData;
103         }
104
105         if(__pAddressBook != null)
106         {
107                 delete __pAddressBook;
108         }
109         if (__pItemContext != null)
110         {
111                 delete __pItemContext;
112                 __pItemContext = null;
113         }
114 }
115
116 GroupItemClass::GroupItemClass()
117 {
118         __pData = null;
119 }
120
121 GroupItemClass::~GroupItemClass()
122 {
123         /*if(__pData)
124         {
125                 delete __pData;
126         }*/
127 }
128
129 void
130 GroupItemClass::SetTitleText(String titleText)
131 {
132         __titleText = titleText;
133 }
134
135 void
136 GroupItemClass::SetLogData(ArrayList* pData)
137 {
138         __pData = pData;
139 }
140
141 String
142 GroupItemClass::GetTitleText(void)
143 {
144         return __titleText;
145 }
146
147 ArrayList*
148 GroupItemClass::GetLogData(void)
149 {
150         return __pData;
151 }
152
153
154 void
155 CustomDataProvider::GetItemAtGroupIndex(int groupIndex, int itemIndex, CallLogDetails** pCalllogDetails)
156 {
157         if(__pGroupData != null)
158         {
159                 GroupItemClass* pGroupInfo = null;
160                 ArrayList* list = null;
161                 pGroupInfo = static_cast<GroupItemClass*>(__pGroupData->GetAt(groupIndex));
162                 if(pGroupInfo != null)
163                 {
164                         list = pGroupInfo->GetLogData();
165                         *pCalllogDetails = static_cast<CallLogDetails*>(list->GetAt(itemIndex));
166                 }
167         }
168 }
169
170 void
171 CustomDataProvider::DeleteItemAtGroupIndex(int groupIndex, int itemIndex)
172 {
173         if(__pGroupData != null)
174         {
175                 GroupItemClass* pGroupInfo = null;
176                 ArrayList* list = null;
177                 pGroupInfo = static_cast<GroupItemClass*>(__pGroupData->GetAt(groupIndex));
178                 if(pGroupInfo != null)
179                 {
180                         list = pGroupInfo->GetLogData();
181                         list->RemoveAt(itemIndex,true);
182                 }
183         }
184 }
185
186 void
187 CustomDataProvider::DeleteAllItems(void)
188 {
189         ArrayList* pCalllogList = null;
190         GroupItemClass* pGroupInfo = null;
191         if(__pGroupData != null)
192                 {
193                         for(int index = 0; index < __pGroupData->GetCount(); index++)
194                         {
195                                 pGroupInfo = static_cast<GroupItemClass*>(__pGroupData->GetAt(index));
196
197                                 if(pGroupInfo != null)
198                                 {
199                                         pCalllogList = pGroupInfo->GetLogData();
200                                         if(pCalllogList != null)
201                                         {
202                                                 AppLog(" data cnt = %d", pCalllogList->GetCount());
203                                                 pCalllogList->RemoveAll(true);
204
205                                                 delete pCalllogList;
206                                                 pCalllogList = null;
207                                         }
208                                         delete pGroupInfo;
209                                         pGroupInfo = null;
210                                 }
211                         }
212                         __pGroupData->RemoveAll(false);
213                         delete __pGroupData;
214                         __pGroupData = null;
215                 }
216 }
217
218 bool
219 CustomDataProvider::GetCurrentDateTime(DateTime& dt)
220 {
221         DateTime dtNow;
222         LocaleManager localManager;
223         result r = E_FAILURE;
224         TimeZone tz;
225
226         r = SystemTime::GetCurrentTime(UTC_TIME, dtNow);
227         if (IsFailed(r))
228         {
229                 return false;
230         }
231         localManager.Construct();
232         tz = localManager.GetSystemTimeZone();
233         dt = tz.UtcTimeToWallTime(dtNow);
234
235         return true;
236 }
237
238 bool
239 CustomDataProvider::IsGroupPresent(GroupItemClass* group)
240 {
241         if(group == null)
242         {
243                 return false;
244         }
245         GroupItemClass* pGroupInfo = null;
246         for(int index = 0; index < __pGroupData->GetCount(); index++)
247         {
248                 pGroupInfo = static_cast<GroupItemClass*>(__pGroupData->GetAt(index));
249                 if(pGroupInfo == null)
250                 {
251                         return false;
252                 }
253                 String title1;
254                 String title2;
255                 title1 = group->GetTitleText();
256                 title2 = pGroupInfo->GetTitleText();
257                 if( title1.CompareTo(title2) == 0)
258                 {
259                         return true;
260                 }
261         }
262         return false;
263 }
264
265 GroupItemClass*
266 CustomDataProvider::GetGroupWithTitle(String title)
267 {
268         GroupItemClass* pGroupInfo = null;
269         for(int index = 0; index < __pGroupData->GetCount(); index++)
270         {
271                 pGroupInfo = static_cast<GroupItemClass*>(__pGroupData->GetAt(index));
272                 if(pGroupInfo == null)
273                 {
274                         return null;
275                 }
276                 String title1 = pGroupInfo->GetTitleText();
277                 if( title.CompareTo(title1) == 0)
278                 {
279                         return pGroupInfo;
280                 }
281         }
282         return null;
283 }
284
285 int
286 CustomDataProvider::GetDaysDifferenceBetweenDates(DateTime date1, DateTime date2)
287 {
288         if(date1.GetYear() == date2.GetYear())
289         {
290                 if(date1.GetMonth() == date2.GetMonth())
291                 {
292                         int days = date2.GetDay() - date1.GetDay();
293                 /*      if(days < 0)
294                         {
295                                 days = days * -1;
296                         }*/
297                         return days;
298                 }
299                 else
300                 {
301                         int mIndex = 1;
302                         int days1 = 0;
303                         int days2 = 0;
304                         int daysInMonth = 0;
305                         int daysDifference = 0;
306                         for(;mIndex < date1.GetMonth(); mIndex++)
307                         {
308                                 DateTime::GetDaysInMonth(date1.GetYear(), mIndex, daysInMonth);
309                                 days1 += daysInMonth;
310                         }
311                         days1 += date1.GetDay();
312                         mIndex = 1;
313                         daysInMonth = 0;
314                         for(;mIndex < date2.GetMonth(); mIndex++)
315                         {
316                                 DateTime::GetDaysInMonth(date2.GetYear(), mIndex, daysInMonth);
317                                 days2 += daysInMonth;
318                         }
319                         days2 += date2.GetDay();
320                         daysDifference = days2 - days1;
321                         AppLog(" days %d %d %d", days1, days2, daysDifference);
322                         return daysDifference;
323                 }
324         }
325         TimeSpan t1 = date1.GetTimeOfDay();
326         TimeSpan t2 = date2.GetTimeOfDay();
327         return 0;
328 }
329
330 void
331 CustomDataProvider::CreateGroupItems(void)
332 {
333         result r = E_FAILURE;
334         DateTime currentTime;
335         DateTime todaysDate;
336         GroupItemClass* pGroupItemClass = null;
337         CallLogManager* pManager = CallLogManager::GetInstance();
338         CallLogDetails* pCalllogInfo = null;
339         ArrayList* data = null;
340         int key = 0;
341
342         if(__pGroupData != null)
343         {
344                 ArrayList* pCalllogList = null;
345                 GroupItemClass* pGroupInfo = null;
346                 for(int index = 0; index < __pGroupData->GetCount(); index++)
347                 {
348                         pGroupInfo = static_cast<GroupItemClass*>(__pGroupData->GetAt(index));
349
350                         if(pGroupInfo != null)
351                         {
352                                 pCalllogList = pGroupInfo->GetLogData();
353                                 if(pCalllogList != null)
354                                 {
355                                         pCalllogList->RemoveAll();
356                                         delete pCalllogList;
357                                         pCalllogList = null;
358                                 }
359                                 delete pGroupInfo;
360                                 pGroupInfo = null;
361                         }
362                 }
363                 __pGroupData->RemoveAll();
364                 delete __pGroupData;
365                 __pGroupData = null;
366         }
367         __pGroupData = new(std::nothrow) ArrayList();
368         if(__pGroupData == null)
369         {
370                 return;
371         }
372         r = __pGroupData->Construct();
373         if(IsFailed(r))
374         {
375                 delete __pGroupData;
376                 __pGroupData = null;
377                 return;
378         }
379
380
381         int logCount = pManager->GetAllCalllogCount();
382         int cmp = 0;
383         GetCurrentDateTime(todaysDate);
384         //todaysDate.SetValue(currentTime.GetYear(),currentTime.GetMonth(), currentTime.GetDay());
385         String title;
386         DateTime calllogDate = todaysDate;
387
388         for(int index = 0; index < logCount; index++)
389         {
390                 data = null;
391                 title.Clear();
392                 key = 0;
393                 cmp = 0;
394                 pCalllogInfo = new (std::nothrow) CallLogDetails();
395                 pManager->GetCallLogItemAtIndex(index ,*pCalllogInfo);
396                 pCalllogInfo->ConvertTimetoDateTime();
397                 calllogDate = pCalllogInfo->GetDateTime();
398                 AppLog(" info %d %d %d %s %d:%d:%d", key, pCalllogInfo->GetCalllogType(), pCalllogInfo->GetDuration(), pCalllogInfo->GetPhoneNumber(), calllogDate.GetYear(), calllogDate.GetMonth(), calllogDate.GetDay());
399
400                 //Create a new group
401                 pGroupItemClass = new(std::nothrow) GroupItemClass();
402                 if(pGroupItemClass == null)
403                 {
404                         return;
405                 }
406
407                 int days = GetDaysDifferenceBetweenDates(calllogDate , todaysDate);
408                 if(days == 0)
409                 {
410                         title.Append(L"Today");
411                 }
412                 else if(days == 1)
413                 {
414                         title.Append(L"Yesterday");
415                 }
416                 else
417                 {
418                         title.Format(30,L"%d/%d/%d",calllogDate.GetDay(), calllogDate.GetMonth(), calllogDate.GetYear());
419                 }
420                 pGroupItemClass->SetTitleText(title);
421
422                 //Group already present
423                 if(IsGroupPresent(pGroupItemClass) == true)
424                 {
425                         //Delete the created  temp group class. Use the already existing group class variable from __pGroupData.
426                         if(pGroupItemClass != null)
427                         {
428                                 delete pGroupItemClass;
429                                 pGroupItemClass = null;
430                         }
431                         GroupItemClass* pGroup = GetGroupWithTitle(title);
432                         data = pGroup->GetLogData();
433                         if(data == null)
434                         {
435                                 data = new ArrayList();
436                                 data->Construct();
437                         }
438                         data->Add(*pCalllogInfo);
439                         pGroup->SetLogData(data);
440                 }
441                 else
442                 {
443                         //Group not present in __pGroupData. So add this group
444                         __pGroupData->Add(*pGroupItemClass);
445                         data = pGroupItemClass->GetLogData();
446                         if(data == null)
447                         {
448                                 data = new ArrayList();
449                                 data->Construct();
450                         }
451                         data->Add(*pCalllogInfo);
452                         pGroupItemClass->SetLogData(data);
453                 }
454         }
455 }
456
457 int
458 CustomDataProvider::GetGroupCount(void)
459 {
460         CreateGroupItems();
461         if(__pGroupData != null)
462         {
463                 return __pGroupData->GetCount();
464         }
465         return 0;
466 }
467
468 int
469 CustomDataProvider::GetItemCount(int groupIndex)
470 {
471         GroupItemClass* group = null;
472         if(__pGroupData != null)
473         {
474                 group = static_cast<GroupItemClass*>(__pGroupData->GetAt(groupIndex));
475                 if(group)
476                 {
477                         return (group->GetLogData())->GetCount();
478                 }
479         }
480         return 0;
481 }
482
483 GroupItem*
484 CustomDataProvider::CreateGroupItem(int groupIndex, int itemWidth)
485 {
486         AppResource* pAppResource = App::GetInstance()->GetAppResource();
487         GroupItem* pItem = new GroupItem();
488         pItem->Construct(Dimension(itemWidth, 48));
489
490         String appPath = (Application::GetInstance())->GetAppRootPath();
491         Bitmap* pBitmap = null;
492         pBitmap = pAppResource->GetBitmapN(IDB_CALLOG_LIST_BG,BITMAP_PIXEL_FORMAT_ARGB8888);
493
494         GroupItemClass* group = null;
495         if(__pGroupData != null)
496         {
497                 group = static_cast<GroupItemClass*>(__pGroupData->GetAt(groupIndex));
498                 if(group)
499                 {
500                         pItem->SetElement(group->GetTitleText(), pBitmap);
501                 }
502                 else
503                 {
504                         return null;
505                 }
506         }
507         return pItem;
508 }
509
510 ListItemBase*
511 CustomDataProvider::CreateItem(int groupIndex, int itemIndex, int itemWidth)
512 {
513         GroupItemClass* pGroup = null;
514         ArrayList* pCalllogList = null;
515         CallLogDetails* pCalllogData = null;
516         String phoneNumber(AppUtility::GetResourceString(IDS_CALLLOG_NO_NUMBER));
517         String contactName(AppUtility::GetResourceString(IDS_CALLLOG_NO_NAME));
518         DateTime calllogDate;
519         String dateText(L"");
520         String key(L"24HourFormatSelected");
521         String amPm;
522         bool dateFormat24 = true;
523         Bitmap* pBitmap = null;
524         AppResource* pAppResource = App::GetInstance()->GetAppResource();
525
526         if(__pGroupData != null)
527         {
528                 pGroup = static_cast<GroupItemClass*>(__pGroupData->GetAt(groupIndex));
529                 if(pGroup != null)
530                 {
531                         pCalllogList = pGroup->GetLogData();
532                         if(pCalllogList != null)
533                         {
534                                 AppLog(" data cnt = %d", pCalllogList->GetCount());
535                                 pCalllogData = static_cast<CallLogDetails*>(pCalllogList->GetAt(itemIndex));
536                         }
537                 }
538         }
539
540         if(pCalllogData == null)
541         {
542                 return null;
543         }
544         else
545         {
546                 if(pCalllogData->GetPhoneNumber() != null)
547                 {
548                         phoneNumber = pCalllogData->GetPhoneNumber();
549                 }
550
551                 CallLogManager* pManager = CallLogManager::GetInstance();
552                 pManager->GetCalllogContactName(phoneNumber,contactName);
553                 pCalllogData->ConvertTimetoDateTime();
554                 calllogDate = pCalllogData->GetDateTime();
555                 int hour = calllogDate.GetHour();
556                 SettingInfo::GetValue(key, dateFormat24);
557
558                 if (dateFormat24 == false)
559                 {
560                         if (hour > MAX_TWELVEHOUR_FORMAT)
561                         {
562                                 hour -= MAX_TWELVEHOUR_FORMAT;
563                                 amPm.Append(AppUtility::GetResourceString(IDS_PM_TIME));
564                         }
565                         else if (hour < MAX_TWELVEHOUR_FORMAT)
566                         {
567                                 amPm.Append(AppUtility::GetResourceString(IDS_AM_TIME));
568                         }
569                         else if (hour == MAX_TWELVEHOUR_FORMAT)
570                         {
571                                 amPm.Append(AppUtility::GetResourceString(IDS_PM_TIME));
572                         }
573                         dateText.Format(MAX_TWELVEHOUR_FORMAT_LENGTH,L"%02d:%02d%ls", hour, calllogDate.GetMinute(), amPm.GetPointer());
574                 }
575                 else
576                 {
577                         dateText.Format(MAX_TWELVEHOUR_FORMAT_LENGTH,L"%02d:02%d", calllogDate.GetHour(), calllogDate.GetMinute());
578                 }
579
580         }
581         ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL;
582         EnrichedText* text = new (std::nothrow) EnrichedText();
583         TextElement* textElement = new (std::nothrow) TextElement();
584         Font font;
585         String appPath = (Application::GetInstance())->GetAppRootPath();
586
587         CustomItem* pItem = new (std::nothrow) CustomItem();
588
589         if (__isEditStyle == true)
590         {
591                 style = LIST_ANNEX_STYLE_MARK;
592         }
593
594         pItem->Construct(Dimension(itemWidth, H_LOG_ITEM), style);
595         pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, Color::GetColor(COLOR_ID_WHITE));
596         pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, Color::GetColor(COLOR_ID_WHITE));
597         pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, Color::GetColor(COLOR_ID_WHITE));
598
599         if (__isEditStyle == false)
600         {
601                 pItem->AddElement(Rectangle(X_TEXT_LINE1_ITEM, Y_TEXT_LINE1_ITEM, W_TEXT_LINE1_ITEM, H_TEXT_LINE1_ITEM), ID_NAME_STRING, contactName,44, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true);
602                 pItem->AddElement(Rectangle(X_TEXT_LINE2_ITEM, Y_TEXT_LINE2_ITEM, W_TEXT_LINE2_ITEM, H_TEXT_LINE2_ITEM), ID_NUMBER_STRING, phoneNumber, 32, Color::GetColor(COLOR_ID_GREY), Color::GetColor(COLOR_ID_GREY), Color::GetColor(COLOR_ID_GREY), true);
603         }
604         else
605         {
606                 pItem->AddElement(Rectangle(X_TEXT_LINE1_ITEM, Y_TEXT_LINE1_ITEM, W_TEXT_LINE1_ITEM - 76, H_TEXT_LINE1_ITEM), ID_NAME_STRING, contactName, 44, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), true);
607                 pItem->AddElement(Rectangle(X_TEXT_LINE2_ITEM, Y_TEXT_LINE2_ITEM, W_TEXT_LINE2_ITEM - 76, H_TEXT_LINE2_ITEM), ID_NUMBER_STRING, phoneNumber, 32, Color::GetColor(COLOR_ID_GREY), Color::GetColor(COLOR_ID_GREY), Color::GetColor(COLOR_ID_GREY), true);
608         }
609
610         text->Construct(Dimension(W_LOG_ITEM_TEXT, H_LOG_ITEM_TEXT));
611         text->SetHorizontalAlignment(TEXT_ALIGNMENT_RIGHT);
612         text->SetVerticalAlignment(TEXT_ALIGNMENT_BOTTOM);
613         font.Construct(FONT_STYLE_PLAIN, LOG_ITEM_FONT_SIZE);
614         textElement->Construct(dateText);
615         textElement->SetFont(font);
616         textElement->SetTextColor(Color::GetColor(COLOR_ID_GREY));
617         text->Add(*textElement);
618         if (__isEditStyle == false)
619         {
620                 pItem->AddElement(Rectangle(X_TEXT_TIME_ITEM, Y_TEXT_TIME_ITEM, W_TEXT_TIME_ITEM, H_TEXT_TIME_ITEM), ID_TIME_STRING, *text);
621         }
622         else
623         {
624                 pItem->AddElement(Rectangle(X_TEXT_TIME_ITEM - 76, Y_TEXT_TIME_ITEM, W_TEXT_TIME_ITEM, H_TEXT_TIME_ITEM), ID_TIME_STRING, *text);
625         }
626
627         if (pBitmap != null)
628         {
629                 if (__isEditStyle == false)
630                 {
631                         pItem->AddElement(Rectangle(X_CONTACT_BITMAP_ITEM, Y_CONTACT_BITMAP_ITEM, W_CONTACT_BITMAP_ITEM, H_CONTACT_BITMAP_ITEM), ID_CONTACT_BITMAP, *pBitmap);
632                 }
633                 else
634                 {
635                         pItem->AddElement(Rectangle(X_CONTACT_BITMAP_ITEM - 76, Y_CONTACT_BITMAP_ITEM, W_CONTACT_BITMAP_ITEM, H_CONTACT_BITMAP_ITEM), ID_CONTACT_BITMAP, *pBitmap);
636                 }
637                 delete pBitmap;
638                 pBitmap = null;
639         }
640
641         switch(pCalllogData->GetCalllogType())
642         {
643         case CALL_LOG_TYPE_VOICE_INCOMING:
644         {
645                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_RECEIVEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
646
647         }
648         break;
649         case CALL_LOG_TYPE_VOICE_OUTGOING:
650         {
651                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_DIALEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
652         }
653         break;
654         case CALL_LOG_TYPE_VOICE_REJECTED:
655         case CALL_LOG_TYPE_VOICE_MISSED:
656         {
657                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_MISSEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
658         }
659         break;
660         case CALL_LOG_TYPE_VOICE_BLOCKED:
661         {
662                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_BLOCKEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
663         }
664         break;
665         default:
666         {
667                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_MISSEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
668         }
669         break;
670         }
671
672         if (pBitmap != null)
673         {
674                 pItem->AddElement(Rectangle(X_CALLTYPE_BITMAP_ITEM, Y_CALLTYPE_BITMAP_ITEM, W_CALLTYPE_BITMAP_ITEM, H_CALLTYPE_BITMAP_ITEM), ID_CALLTYPE_BITMAP, *pBitmap);
675                 delete pBitmap;
676         }
677
678         if (__isEditStyle == false)
679         {
680                 pItem->SetContextItem(__pItemContext);
681         }
682         delete text;
683         return pItem;
684         return null;
685 }
686
687 bool
688 CustomDataProvider::DeleteItem(int groupIndex, int itemIndex, ListItemBase* pItem, int itemWidth)
689 {
690         delete pItem;
691         pItem = null;
692         return true;
693 }
694
695 bool
696 CustomDataProvider::DeleteGroupItem(int groupIndex, GroupItem* pItem, int itemWidth)
697 {
698         delete pItem;
699         pItem = null;
700         return true;
701 }
702
703 void
704 CustomDataProvider::SetListItemStyle(bool mode)
705 {
706         __isEditStyle = mode;
707 }
708
709