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