Memory leaks fixed. Fix for 44222 44125 44118
[apps/osp/Dial.git] / src / PhnLogsDetailItemProvider.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    PhnLogsDetailItemProvider.cpp
19  * @brief       Calllog detail item provider class
20  */
21 #include <FGraphics.h>
22 #include <FUi.h>
23 #include <FUiControl.h>
24 #include <FBase.h>
25 #include <FMedia.h>
26 #include <FApp.h>
27 #include <FLocales.h>
28 #include <FSystem.h>
29 #include "PhnAppUtility.h"
30 #include "PhnLogsDetailItemProvider.h"
31 #include "PhnTypes.h"
32
33 using namespace Tizen::Base;
34 using namespace Tizen::Base::Collection;
35 using namespace Tizen::App;
36 using namespace Tizen::Graphics;
37 using namespace Tizen::Locales;
38 using namespace Tizen::Media;
39 using namespace Tizen::Social;
40 using namespace Tizen::System;
41
42 const int LogsDetailItemProvider::ID_NAME_STRING = 100;
43 const int LogsDetailItemProvider::ID_NUMBER_STRING = 101;
44 const int LogsDetailItemProvider::ID_TIME_STRING = 102;
45 const int LogsDetailItemProvider::ID_CALLTYPE_BITMAP = 104;
46
47 const int LogsDetailItemProvider::X_TEXT_LINE1_ITEM = 16;
48 const int LogsDetailItemProvider::Y_TEXT_LINE1_ITEM = 10;
49 const int LogsDetailItemProvider::H_TEXT_LINE1_ITEM = 60;
50 const int LogsDetailItemProvider::W_TEXT_LINE1_ITEM = 560;
51
52 const int LogsDetailItemProvider::X_TEXT_LINE2_ITEM = 64;
53 const int LogsDetailItemProvider::Y_TEXT_LINE2_ITEM = 70;
54 const int LogsDetailItemProvider::H_TEXT_LINE2_ITEM = 48;
55 const int LogsDetailItemProvider::W_TEXT_LINE2_ITEM = 456;
56
57 const int LogsDetailItemProvider::X_TEXT_TIME_ITEM = 600;
58 const int LogsDetailItemProvider::Y_TEXT_TIME_ITEM = 70;
59 const int LogsDetailItemProvider::H_TEXT_TIME_ITEM = 48;
60 const int LogsDetailItemProvider::W_TEXT_TIME_ITEM = 168;
61
62
63 const int LogsDetailItemProvider::X_CALLTYPE_BITMAP_ITEM = 16;
64 const int LogsDetailItemProvider::Y_CALLTYPE_BITMAP_ITEM = 70 + 8;
65 const int LogsDetailItemProvider::H_CALLTYPE_BITMAP_ITEM = 32;
66 const int LogsDetailItemProvider::W_CALLTYPE_BITMAP_ITEM = 32;
67
68 static const int H_CALLLOGDETAIL_ITEM = 128;
69 static const int MAX_TWELVEHOUR_FORMAT = 12;
70 static const int MAX_TWELVEHOUR_FORMAT_LENGTH = 8;
71 static const int MAX_TWENTYFOUR_FORMAT_LENGTH = 6;
72
73 CallLogDetailGroup::CallLogDetailGroup()
74 {
75         __pGroupElements = null;
76         __groupTitleText = null;
77 }
78
79 CallLogDetailGroup::~CallLogDetailGroup()
80 {
81
82 }
83
84 ArrayList*
85 CallLogDetailGroup::GetLogData(void)
86 {
87         return __pGroupElements;
88 }
89
90 String
91 CallLogDetailGroup::GetTitleText(void)
92 {
93         return __groupTitleText;
94 }
95
96 void
97 CallLogDetailGroup::SetLogData(ArrayList* pData)
98 {
99         __pGroupElements = pData;
100 }
101
102 void
103 CallLogDetailGroup::SetTitleText(String titleText)
104 {
105         __groupTitleText = titleText;
106 }
107
108 LogsDetailItemProvider::LogsDetailItemProvider()
109 {
110         __isEditMode = false;
111         __pCalllogDetailListByNumber = null;
112         __pCallLogDetailGroups = null;
113         __pLogPresentor = CalLogPresentationModel::GetInstance();
114
115         __fontSize = 44.f;
116         __itemHeight = 112.f;
117 }
118
119 LogsDetailItemProvider::~LogsDetailItemProvider()
120 {
121         if(__pCalllogDetailListByNumber != null)
122         {
123                 __pCalllogDetailListByNumber->RemoveAll();
124                 delete __pCalllogDetailListByNumber;
125         }
126         if(__pCallLogDetailGroups != null)
127         {
128                 __pCallLogDetailGroups->RemoveAll();
129                 delete __pCallLogDetailGroups;
130                 __pCallLogDetailGroups = null;
131         }
132 }
133
134 void
135 LogsDetailItemProvider::CreateCalllogDetailGroups()
136 {
137         result r = E_FAILURE;
138         CallLogDetails* pCalllogInfo = null;
139         ArrayList* data = null;
140         DateTime todaysDate;
141         DateTime calllogDate;
142         CallLogDetailGroup* pGroup = null;
143         int detailLogCount = 0;
144         String title;
145
146         if(__pCalllogDetailListByNumber == null)
147         {
148                 __pCalllogDetailListByNumber =__pLogPresentor->GetCalllogListByNumValues();
149         }
150
151         if(__pCallLogDetailGroups != null)
152         {
153                 ArrayList* pDetailCalllogList = null;
154                 CallLogDetailGroup* pGroupInfo = null;
155                 for(int index = 0; index < __pCallLogDetailGroups->GetCount(); index++)
156                 {
157                         pGroupInfo = static_cast<CallLogDetailGroup*>(__pCallLogDetailGroups->GetAt(index));
158
159                         if(pGroupInfo != null)
160                         {
161                                 pDetailCalllogList = pGroupInfo->GetLogData();
162                                 if(pDetailCalllogList != null)
163                                 {
164                                         pDetailCalllogList->RemoveAll();
165                                         delete pDetailCalllogList;
166                                         pDetailCalllogList = null;
167                                 }
168                                 delete pGroupInfo;
169                                 pGroupInfo = null;
170                         }
171                 }
172                 __pCallLogDetailGroups->RemoveAll();
173                 delete __pCallLogDetailGroups;
174                 __pCallLogDetailGroups = null;
175         }
176
177         __pCallLogDetailGroups = new(std::nothrow) ArrayList();
178         if(__pCallLogDetailGroups == null)
179         {
180                 return;
181         }
182         r = __pCallLogDetailGroups->Construct();
183         if(IsFailed(r))
184         {
185                 delete __pCallLogDetailGroups;
186                 __pCallLogDetailGroups = null;
187                 return;
188         }
189
190         detailLogCount =__pCalllogDetailListByNumber->GetCount();
191         GetCurrentDateTime(todaysDate);
192         calllogDate = todaysDate;
193
194
195         for(int index=0; index < detailLogCount; ++index)
196         {
197                 data = null;
198                 title.Clear();
199                 pCalllogInfo = new (std::nothrow) CallLogDetails();
200                 if(pCalllogInfo == null)
201                 {
202                         continue;
203                 }
204                 __pCalllogDetailListByNumber->GetAt(index, *pCalllogInfo);
205                 pCalllogInfo->ConvertTimetoDateTime();
206                 calllogDate = pCalllogInfo->GetDateTime();
207
208                 int days = GetDaysDifferenceBetweenDates(calllogDate , todaysDate);
209                 if(days == 0)
210                 {
211                         title.Append(AppUtility::GetResourceString(IDS_LOGS_TODAY));
212                 }
213                 else if(days == 1)
214                 {
215                         title.Append(AppUtility::GetResourceString(IDS_LOGS_YESTERDAY));
216                 }
217                 else
218                 {
219                         title.Format(30,L"%d/%d/%d",calllogDate.GetDay(), calllogDate.GetMonth(), calllogDate.GetYear());
220                 }
221
222                 if(IsGroupPresent(title) == true)
223                 {
224                         //Group already present
225                         pGroup = GetGroupWithTitle(title);
226                         data = pGroup->GetLogData();
227                         if(data == null)
228                         {
229                                 data = new ArrayList();
230                                 data->Construct();
231                         }
232                         data->Add(*pCalllogInfo);
233                         pGroup->SetLogData(data);
234                 }
235                 else
236                 {
237                         //Group not present in __pCallLogDetailGroups. So create a new group
238                         pGroup = new(std::nothrow) CallLogDetailGroup();
239                         if(pGroup == null)
240                         {
241                                 return;
242                         }
243                         data = new ArrayList();
244                         data->Construct();
245                         data->Add(*pCalllogInfo);
246                         pGroup->SetTitleText(title);
247                         pGroup->SetLogData(data);
248                         __pCallLogDetailGroups->Add(*pGroup);
249                 }
250         }
251 }
252
253 void
254 LogsDetailItemProvider::GetCurrentDateTime(DateTime& dt)
255 {
256         DateTime dtNow;
257         LocaleManager localManager;
258         result r = E_FAILURE;
259         TimeZone tz;
260         r = SystemTime::GetCurrentTime(UTC_TIME, dtNow);
261         localManager.Construct();
262         tz = localManager.GetSystemTimeZone();
263         dt = tz.UtcTimeToWallTime(dtNow);
264 }
265
266 int
267 LogsDetailItemProvider::GetDaysDifferenceBetweenDates(DateTime date1, DateTime date2)
268 {
269         TimeSpan oneDay(1,0,0,0);
270         TimeSpan timeOfDay = date2.GetTimeOfDay();
271
272         DateTime yesterday = date2;
273         yesterday.Subtract(timeOfDay);
274         yesterday.Subtract(oneDay);
275
276         DateTime today = date2;
277         today.Subtract(timeOfDay);
278
279         if (yesterday <= date1 && date1 < today)
280         {
281                 return 1;
282         }
283         else if (today <= date1 && date1 <= date2)
284         {
285                 return 0;
286         }
287         else
288         {
289                 return 2;
290         }
291 }
292
293 bool
294 LogsDetailItemProvider::IsGroupPresent(String title)
295 {
296         if(title.IsEmpty())
297         {
298                 return false;
299         }
300         CallLogDetailGroup* pGroupInfo = null;
301         for(int index = 0; index < __pCallLogDetailGroups->GetCount(); index++)
302         {
303                 pGroupInfo = static_cast<CallLogDetailGroup*>(__pCallLogDetailGroups->GetAt(index));
304                 if(pGroupInfo == null)
305                 {
306                         return false;
307                 }
308                 String title1;
309                 title1 = pGroupInfo->GetTitleText();
310                 if( title.CompareTo(title1) == 0)
311                 {
312                         return true;
313                 }
314         }
315         return false;
316 }
317
318 CallLogDetailGroup*
319 LogsDetailItemProvider::GetGroupWithTitle(String title)
320 {
321         CallLogDetailGroup* pGroupInfo = null;
322         for(int index = 0; index < __pCallLogDetailGroups->GetCount(); index++)
323         {
324                 pGroupInfo = static_cast<CallLogDetailGroup*>(__pCallLogDetailGroups->GetAt(index));
325                 if(pGroupInfo == null)
326                 {
327                         return null;
328                 }
329                 String title1 = pGroupInfo->GetTitleText();
330                 if( title.CompareTo(title1) == 0)
331                 {
332                         return pGroupInfo;
333                 }
334         }
335         return null;
336 }
337
338 int
339 LogsDetailItemProvider::GetGroupCount(void)
340 {
341         AppUtility::GetGlobalFontAndItemHeight(&__fontSize, &__itemHeight);
342         CreateCalllogDetailGroups();
343         if(__pCallLogDetailGroups != null)
344         {
345                 return __pCallLogDetailGroups->GetCount();
346         }
347         return 0;
348 }
349
350 int
351 LogsDetailItemProvider::GetItemCount(int groupIndex)
352 {
353         CallLogDetailGroup* group = null;
354         if(__pCallLogDetailGroups != null)
355         {
356                 group = static_cast<CallLogDetailGroup*>(__pCallLogDetailGroups->GetAt(groupIndex));
357                 if(group)
358                 {
359                         return (group->GetLogData())->GetCount();
360                 }
361         }
362         return 0;
363 }
364
365 Tizen::Ui::Controls::GroupItem*
366 LogsDetailItemProvider::CreateGroupItem(int groupIndex, int itemWidth)
367 {
368         AppResource* pAppResource = App::GetInstance()->GetAppResource();
369         GroupItem* pItem = new GroupItem();
370         if(pItem == null)
371         {
372                 return null;
373         }
374         pItem->Construct(Dimension(itemWidth, 48));
375
376         Bitmap* pBitmap = null;
377         pBitmap = pAppResource->GetBitmapN(IDB_CALLOG_LIST_BG,BITMAP_PIXEL_FORMAT_ARGB8888);
378
379         CallLogDetailGroup* group = null;
380         if(__pCallLogDetailGroups != null)
381         {
382                 group = static_cast<CallLogDetailGroup*>(__pCallLogDetailGroups->GetAt(groupIndex));
383                 if(group)
384                 {
385                         pItem->SetElement(group->GetTitleText(), pBitmap);
386                 }
387                 else
388                 {
389                         if(pItem != null)
390                         {
391                                 delete pItem;
392                                 pItem = null;
393                         }
394                         return null;
395                 }
396         }
397         return pItem;
398 }
399
400 bool
401 LogsDetailItemProvider::DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::GroupItem* pItem, int itemWidth)
402 {
403         delete pItem;
404         pItem = null;
405         return true;
406 }
407
408 Tizen::Ui::Controls::ListItemBase*
409 LogsDetailItemProvider::CreateItem(int groupIndex, int itemIndex, int itemWidth)
410 {
411         CallLogDetailGroup* pGroup = null;
412         ArrayList* pCalllogList = null;
413         CallLogDetails* calllogInfo = null;
414         DateTime t;
415         int duration = 0;
416         String dateText(L"");
417         DateTime calllogDate;
418         CallLogType type = CALL_LOG_TYPE_MAX;
419         String durationText;
420         String typeText;
421         Bitmap* pBitmap = null;
422         int hr, min, sec;
423         hr = min = sec = 0;
424
425         if(__pCallLogDetailGroups != null)
426         {
427                 pGroup = static_cast<CallLogDetailGroup*>(__pCallLogDetailGroups->GetAt(groupIndex));
428                 if(pGroup != null)
429                 {
430                         pCalllogList = pGroup->GetLogData();
431                         if(pCalllogList != null)
432                         {
433                                 calllogInfo = static_cast<CallLogDetails*>(pCalllogList->GetAt(itemIndex));
434                         }
435                 }
436         }
437         if(calllogInfo != null)
438         {
439                 duration = calllogInfo->GetDuration();
440                 type = calllogInfo->GetCalllogType();
441                 calllogDate = calllogInfo->GetDateTime();
442                 if(type == CALL_LOG_TYPE_VOICE_MISSED_UNSEEN)
443                 {
444                         __pLogPresentor->SetMissedCallSeenStatus(calllogInfo);
445                 }
446         }
447
448         Bitmap* pTypeBitmap=null;
449         GetCallogIconBitmap(type,pBitmap,pTypeBitmap,typeText);
450
451         GetTimeText(calllogDate,dateText);
452
453         ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL;
454
455         TextElement* textElement = new (std::nothrow) TextElement();
456         Font font;
457         String appPath = (Application::GetInstance())->GetAppRootPath();
458         CustomItem* pItem = new (std::nothrow) CustomItem();
459         if (__isEditMode == true)
460         {
461                 style = LIST_ANNEX_STYLE_MARK;
462         }
463         pItem->Construct(Dimension(itemWidth, __itemHeight), style);
464
465         pItem->AddElement(Rectangle(X_TEXT_LINE1_ITEM, Y_TEXT_LINE1_ITEM, W_TEXT_LINE1_ITEM, __fontSize + 16), ID_NAME_STRING, dateText,__fontSize, Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), Color::GetColor(COLOR_ID_BLACK), false);
466         pItem->AddElement(Rectangle(X_TEXT_LINE2_ITEM, Y_TEXT_LINE1_ITEM + __fontSize + 16, W_TEXT_LINE2_ITEM, H_TEXT_LINE2_ITEM), ID_NUMBER_STRING, typeText.GetPointer(), 32, Color::GetColor(COLOR_ID_GREY), Color::GetColor(COLOR_ID_GREY), Color::GetColor(COLOR_ID_GREY), false);
467
468         if (__isEditMode == true)
469         {
470                 pItem->AddElement(Rectangle(X_TEXT_LINE1_ITEM, Y_TEXT_LINE1_ITEM, W_TEXT_LINE1_ITEM - 76,  __fontSize + 16), ID_NAME_STRING, dateText, false);
471                 pItem->AddElement(Rectangle(X_TEXT_LINE2_ITEM, Y_TEXT_LINE1_ITEM + __fontSize + 16, W_TEXT_LINE2_ITEM - 76, H_TEXT_LINE2_ITEM), ID_NUMBER_STRING, typeText.GetPointer(), 32, Color::GetColor(COLOR_ID_GREY), Color::GetColor(COLOR_ID_GREY), Color::GetColor(COLOR_ID_GREY), false);
472
473         }
474         if(IsTimeToBeDisplayed(type) == true)
475         {
476                 EnrichedText* text = new (std::nothrow) EnrichedText();
477                 text->Construct(Dimension(W_TEXT_TIME_ITEM, H_TEXT_TIME_ITEM));
478                 text->SetHorizontalAlignment(TEXT_ALIGNMENT_RIGHT);
479                 text->SetVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
480                 hr = duration/3600;
481                 sec = duration%3600;
482                 min = duration/60;
483                 sec = sec%60;
484                 durationText.Format(10,L"%02d:%02d:%02d", hr, min, sec);
485                 textElement->Construct(durationText);
486
487                 font.Construct(FONT_STYLE_PLAIN, 32);
488                 textElement->SetFont(font);
489                 textElement->SetTextColor(Color::GetColor(COLOR_ID_GREY));
490                 text->Add(*textElement);
491
492                 if (__isEditMode == false)
493                 {
494                         pItem->AddElement(Rectangle((itemWidth - (X_TEXT_TIME_ITEM_RIGHT_MARGIN-76)), Y_TEXT_LINE1_ITEM + __fontSize + 16, W_TEXT_TIME_ITEM, H_TEXT_TIME_ITEM), ID_TIME_STRING, *text);
495                 }
496                 else
497                 {
498                         pItem->AddElement(Rectangle((itemWidth - (X_TEXT_TIME_ITEM_RIGHT_MARGIN-165)) - 165, Y_TEXT_LINE1_ITEM + __fontSize + 16, W_TEXT_TIME_ITEM, H_TEXT_TIME_ITEM), ID_TIME_STRING, *text);
499                 }
500
501                 delete text;
502                 text = null;
503         }
504
505         if (pTypeBitmap != null)
506         {
507                 pItem->AddElement(Rectangle(X_CALLTYPE_BITMAP_ITEM, Y_TEXT_LINE1_ITEM + __fontSize + 20, W_CALLTYPE_BITMAP_ITEM, H_CALLTYPE_BITMAP_ITEM), ID_CALLTYPE_BITMAP, *pTypeBitmap);
508                 delete pTypeBitmap;
509                 pTypeBitmap = null;
510         }
511         if(pBitmap != null)
512         {
513                 if (__isEditMode == false)
514                 {
515                         pItem->AddElement(Rectangle((itemWidth - X_LOGCALL_BITMAP_RIGHT_MARGIN), Y_LOGCALL_BITMAP_ITEM, W_LOGCALL_BITMAP_ITEM, H_LOGCALL_BITMAP_ITEM), ID_LOGCALL_BITMAP, *pBitmap);
516                 }
517                 else
518                 {
519                         pItem->AddElement(Rectangle((itemWidth - X_LOGCALL_BITMAP_RIGHT_MARGIN) - 90, Y_LOGCALL_BITMAP_ITEM, W_LOGCALL_BITMAP_ITEM, H_LOGCALL_BITMAP_ITEM), ID_LOGCALL_BITMAP, *pBitmap);
520                 }
521                 delete pBitmap;
522                 pBitmap = null;
523         }
524
525         return pItem;
526
527 }
528
529 bool
530 LogsDetailItemProvider::IsTimeToBeDisplayed(CallLogType type)
531 {
532         switch(type)
533         {
534                 case CALL_LOG_TYPE_VOICE_REJECTED:
535                 case CALL_LOG_TYPE_VOICE_MISSED:
536                 case CALL_LOG_TYPE_VOICE_BLOCKED:
537                 case CALL_LOG_TYPE_VIDEO_REJECTED:
538                 case CALL_LOG_TYPE_VIDEO_BLOCKED:
539                 case CALL_LOG_TYPE_VIDEO_MISSED:
540                 {
541                         return false;
542                 }
543                 break;
544                 case CALL_LOG_TYPE_VOICE_INCOMING:
545                 case CALL_LOG_TYPE_VOICE_OUTGOING:
546                 case CALL_LOG_TYPE_VIDEO_INCOMING:
547                 case CALL_LOG_TYPE_VIDEO_OUTGOING:
548                 {
549                         return true;
550                 }
551                 break;
552                 case CALL_LOG_TYPE_SMS_INCOMING:
553                 case CALL_LOG_TYPE_SMS_OUTGOING:
554                 case CALL_LOG_TYPE_SMS_BLOCKED:
555                 case CALL_LOG_TYPE_MMS_INCOMING:
556                 case CALL_LOG_TYPE_MMS_OUTGOING:
557                 case CALL_LOG_TYPE_MMS_BLOCKED:
558                 case CALL_LOG_TYPE_EMAIL_INCOMING:
559                 case CALL_LOG_TYPE_EMAIL_OUTGOING:
560                 {
561                         return false;
562                 }
563                 break;
564                 default:
565                 {
566                         return false;
567                 }
568                 break;
569         }
570 }
571
572 void
573 LogsDetailItemProvider::GetCallogIconBitmap(CallLogType logType,Bitmap*& iconType, Bitmap*& iconArrow, String& text)
574 {
575         AppResource* pAppResource = App::GetInstance()->GetAppResource();
576         switch(logType)
577         {
578                 case CALL_LOG_TYPE_VOICE_INCOMING:
579                 {
580                         iconType = pAppResource->GetBitmapN(IDB_LOG_CALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
581                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_RECEIVEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
582                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED));
583
584                 }
585                 break;
586                 case CALL_LOG_TYPE_VOICE_OUTGOING:
587                 {
588                         iconType = pAppResource->GetBitmapN(IDB_LOG_CALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
589                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_DIALEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
590                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_OUTGOING));
591                 }
592                 break;
593                 case CALL_LOG_TYPE_VOICE_REJECTED:
594                 {
595                         iconType = pAppResource->GetBitmapN(IDB_LOG_CALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
596                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_BLOCKEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
597                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_REJECTED));
598                 }
599                 break;
600                 case CALL_LOG_TYPE_VOICE_MISSED:
601                 {
602                         iconType = pAppResource->GetBitmapN(IDB_LOG_CALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
603                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_MISSEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
604                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_MISSED));
605                 }
606                 break;
607                 case CALL_LOG_TYPE_VOICE_BLOCKED:
608                 {
609                         iconType = pAppResource->GetBitmapN(IDB_LOG_CALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
610                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_BLOCKEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
611                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_MISSED));
612                 }
613                 break;
614
615                 case CALL_LOG_TYPE_VIDEO_INCOMING:
616                 {
617                         iconType = pAppResource->GetBitmapN(IDB_LOG_VIDEO_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
618                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_RECEIVEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
619                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED));
620                 }
621                 break;
622                 case CALL_LOG_TYPE_VIDEO_OUTGOING:
623                 {
624                         iconType = pAppResource->GetBitmapN(IDB_LOG_VIDEO_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
625                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_DIALEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
626                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_OUTGOING));
627                 }
628                 break;
629                 case CALL_LOG_TYPE_VIDEO_MISSED:
630                 case CALL_LOG_TYPE_VIDEO_REJECTED:
631                 {
632                         iconType = pAppResource->GetBitmapN(IDB_LOG_VIDEO_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
633                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_MISSEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
634                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_MISSED));
635                 }
636                 break;
637                 case CALL_LOG_TYPE_VIDEO_BLOCKED:
638                 {
639                         iconType = pAppResource->GetBitmapN(IDB_LOG_VIDEO_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
640                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_BLOCKEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
641                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_MISSED));
642                 }
643                 break;
644
645                 case CALL_LOG_TYPE_SMS_INCOMING:
646                 {
647                         iconType = pAppResource->GetBitmapN(IDB_LOG_SMS_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
648                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_RECEIVEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
649                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED_MSG));
650                 }
651                 break;
652                 case CALL_LOG_TYPE_SMS_OUTGOING:
653                 {
654                         iconType = pAppResource->GetBitmapN(IDB_LOG_SMS_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
655                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_DIALEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
656                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_SENT_MSG));
657
658                 }
659                 break;
660                 case CALL_LOG_TYPE_SMS_BLOCKED:
661                 {
662                         iconType = pAppResource->GetBitmapN(IDB_LOG_SMS_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
663                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_BLOCKEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
664                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED_MSG));
665
666                 }
667                 break;
668                 case CALL_LOG_TYPE_MMS_INCOMING:
669                 {
670                         iconType = pAppResource->GetBitmapN(IDB_LOG_MMS_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
671                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_RECEIVEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
672                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED_MSG));
673                 }
674                 break;
675                 case CALL_LOG_TYPE_MMS_OUTGOING:
676                 {
677                         iconType = pAppResource->GetBitmapN(IDB_LOG_MMS_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
678                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_DIALEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
679                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_SENT_MSG));
680                 }
681                 break;
682                 case CALL_LOG_TYPE_MMS_BLOCKED:
683                 {
684                         iconType = pAppResource->GetBitmapN(IDB_LOG_MMS_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
685                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_BLOCKEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
686                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED_MSG));
687                 }
688                 break;
689                 case CALL_LOG_TYPE_EMAIL_INCOMING:
690                 {
691                         iconType = pAppResource->GetBitmapN(IDB_LOG_SMS_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
692                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_RECEIVEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
693                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED_MSG));
694                 }
695                 break;
696                 case CALL_LOG_TYPE_EMAIL_OUTGOING:
697                 {
698                         iconType = pAppResource->GetBitmapN(IDB_LOG_SMS_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
699                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_DIALEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
700                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_SENT_MSG));
701                 }
702                 break;
703                 default:
704                 {
705                         iconType = pAppResource->GetBitmapN(IDB_LOG_CALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
706                         iconArrow = pAppResource->GetBitmapN(IDB_LOG_MISSEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
707                         text.Append(AppUtility::GetResourceString(IDS_CALLLOG_MISSED));
708                 }
709                 break;
710         }
711 }
712
713 bool
714 LogsDetailItemProvider::DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth)
715 {
716         delete pItem;
717         pItem = null;
718         return true;
719 }
720
721 void
722 LogsDetailItemProvider::SetViewMode(bool mode)
723 {
724         __isEditMode = mode;
725 }
726
727 void
728 LogsDetailItemProvider::ResetDetailsList(void)
729 {
730         delete __pCalllogDetailListByNumber;
731         __pCalllogDetailListByNumber = null;
732         //reset __pCallLogDetailGroups also
733 }
734
735 void
736 LogsDetailItemProvider::GetItemAtGroupIndex(int groupIndex, int itemIndex, CallLogDetails** pCalllogDetails)
737 {
738         if(__pCallLogDetailGroups != null)
739         {
740                 CallLogDetailGroup* pGroup = null;
741                 ArrayList* list = null;
742                 pGroup = static_cast<CallLogDetailGroup*>(__pCallLogDetailGroups->GetAt(groupIndex));
743                 if(pGroup != null)
744                 {
745                         list = pGroup->GetLogData();
746                         *pCalllogDetails = static_cast<CallLogDetails*>(list->GetAt(itemIndex));
747                 }
748         }
749 }
750
751 void
752 LogsDetailItemProvider::GetTimeText(DateTime calllogDate,String& dateText)
753 {
754         int hour = calllogDate.GetHour();
755         String key(L"24HourFormatSelected");
756         bool dateFormat24 = true;
757         String amPm;
758
759         SettingInfo::GetValue(key, dateFormat24);
760         if (dateFormat24 == false)
761         {
762                 if (hour > MAX_TWELVEHOUR_FORMAT)
763                 {
764                         hour -= MAX_TWELVEHOUR_FORMAT;
765                         amPm.Append(AppUtility::GetResourceString(IDS_PM_TIME));
766                 }
767                 else if (hour < MAX_TWELVEHOUR_FORMAT)
768                 {
769                         amPm.Append(AppUtility::GetResourceString(IDS_AM_TIME));
770                 }
771                 else if (hour == MAX_TWELVEHOUR_FORMAT)
772                 {
773                         amPm.Append(AppUtility::GetResourceString(IDS_PM_TIME));
774                 }
775                 dateText.Format(MAX_TWELVEHOUR_FORMAT_LENGTH,L"%02d:%02d%ls", hour, calllogDate.GetMinute(), amPm.GetPointer());
776         }
777         else
778         {
779                 dateText.Format(MAX_TWENTYFOUR_FORMAT_LENGTH,L"%02d:%02d", calllogDate.GetHour(), calllogDate.GetMinute());
780         }
781 }