Tizen 2.0 Release
[apps/osp/Phone.git] / src / PhnLogsDetailItemProvider.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    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 "PhnAppUtility.h"
28 #include "PhnLogsDetailItemProvider.h"
29 #include "PhnCalllogManager.h"
30
31 using namespace Tizen::Graphics;
32 using namespace Tizen::Base;
33 using namespace Tizen::Media;
34 using namespace Tizen::App;
35 const int DlLogsDetailItemDataProvider::ID_NAME_STRING = 100;
36 const int DlLogsDetailItemDataProvider::ID_NUMBER_STRING = 101;
37 const int DlLogsDetailItemDataProvider::ID_TIME_STRING = 102;
38 const int DlLogsDetailItemDataProvider::ID_CALLTYPE_BITMAP = 104;
39
40 const int DlLogsDetailItemDataProvider::X_TEXT_LINE1_ITEM = 16;
41 const int DlLogsDetailItemDataProvider::Y_TEXT_LINE1_ITEM = 10;
42 const int DlLogsDetailItemDataProvider::H_TEXT_LINE1_ITEM = 60;
43 const int DlLogsDetailItemDataProvider::W_TEXT_LINE1_ITEM = 560;
44
45 const int DlLogsDetailItemDataProvider::X_TEXT_LINE2_ITEM = 64;
46 const int DlLogsDetailItemDataProvider::Y_TEXT_LINE2_ITEM = 70;
47 const int DlLogsDetailItemDataProvider::H_TEXT_LINE2_ITEM = 48;
48 const int DlLogsDetailItemDataProvider::W_TEXT_LINE2_ITEM = 456;
49
50 const int DlLogsDetailItemDataProvider::X_TEXT_TIME_ITEM = 536;
51 const int DlLogsDetailItemDataProvider::Y_TEXT_TIME_ITEM = 70;
52 const int DlLogsDetailItemDataProvider::H_TEXT_TIME_ITEM = 48;
53 const int DlLogsDetailItemDataProvider::W_TEXT_TIME_ITEM = 168;
54
55
56 const int DlLogsDetailItemDataProvider::X_CALLTYPE_BITMAP_ITEM = 16;
57 const int DlLogsDetailItemDataProvider::Y_CALLTYPE_BITMAP_ITEM = 70 + 8;
58 const int DlLogsDetailItemDataProvider::H_CALLTYPE_BITMAP_ITEM = 32;
59 const int DlLogsDetailItemDataProvider::W_CALLTYPE_BITMAP_ITEM = 32;
60
61 static const int H_CALLLOGDETAIL_ITEM = 128;
62
63 DlLogsDetailItemDataProvider::DlLogsDetailItemDataProvider(void)
64 {
65         __isEditMode = false;
66         __pCalllogListByNumber = null;
67         __pCallMgr = CallLogManager::GetInstance();
68 }
69
70 DlLogsDetailItemDataProvider::~DlLogsDetailItemDataProvider(void)
71 {
72         //empty implementation
73         if(__pCalllogListByNumber != null)
74         {
75                 __pCalllogListByNumber->RemoveAll();
76                 delete __pCalllogListByNumber;
77         }
78
79 }
80
81 ListItemBase*
82 DlLogsDetailItemDataProvider::CreateItem(int index, int itemWidth)
83 {
84         CallLogDetails calllogInfo;
85         DateTime t;
86         int duration = 0;
87         time_t tm;
88         struct tm* time = null;
89         char timeText[25];
90         CallLogType type;
91         String durationText;
92         String typeText;
93         Bitmap* pBitmap = null;
94         AppResource* pAppResource = App::GetInstance()->GetAppResource();
95         int hr, min, sec;
96         hr = min = sec = 0;
97
98         if(__pCalllogListByNumber == null)
99         {
100                 __pCalllogListByNumber=__pCallMgr->GetCalllogListByNumValues();
101         }
102
103         __pCalllogListByNumber->GetAt(index,calllogInfo);
104         //AppLog(" info from Map list from Mgr %d %d %d %s %d %d", key, pCalllogInfo.GetCalllogType(), pCalllogInfo.GetDuration(), pCalllogInfo.GetPhoneNumber(), pCalllogInfo.GetDuration(), pCalllogInfo.GetStartTime());
105         duration = calllogInfo.GetDuration();
106         type = calllogInfo.GetCalllogType();
107
108
109         switch(type)
110         {
111         case CALL_LOG_TYPE_VOICE_INCOMING:
112         {
113                 typeText.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED));
114                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_RECEIVEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
115         }
116         break;
117         case CALL_LOG_TYPE_VOICE_OUTGOING:
118         {
119                 typeText.Append(AppUtility::GetResourceString(IDS_CALLLOG_OUTGOING));
120                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_DIALEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
121         }
122         break;
123         case CALL_LOG_TYPE_VOICE_REJECTED:
124         case CALL_LOG_TYPE_VOICE_MISSED:
125         {
126                 typeText.Append(AppUtility::GetResourceString(IDS_CALLLOG_MISSED));
127                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_MISSEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
128         }
129         break;
130         case CALL_LOG_TYPE_SMS_INCOMING:
131         {
132                 typeText.Append(AppUtility::GetResourceString(IDS_CALLLOG_RECEIVED_MSG));
133         }
134         break;
135         case CALL_LOG_TYPE_SMS_OUTGOING:
136         {
137                 typeText.Append(AppUtility::GetResourceString(IDS_CALLLOG_SENT_MSG));
138         }
139         break;
140         case CALL_LOG_TYPE_VOICE_BLOCKED:
141         {
142                 typeText.Append(AppUtility::GetResourceString(IDS_CALLLOG_REJECTED));
143                 pBitmap = pAppResource->GetBitmapN(IDB_LOG_BLOCKEDCALL_ICON ,BITMAP_PIXEL_FORMAT_ARGB8888);
144         }
145         break;
146         default:
147         {
148                 typeText.Append(L" ");
149         }
150         break;
151         }
152
153         tm = calllogInfo.GetStartTime();
154         time = localtime(&tm);
155         if(time != null)
156         {
157                 strftime(timeText,25,"%d %b %Y, %I:%M%p", time);
158         }
159         //AppLog(" dateTime %s", timeText);
160         ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL;
161         EnrichedText* text = new (std::nothrow) EnrichedText();
162         TextElement* textElement = new (std::nothrow) TextElement();
163         Font font;
164         String appPath = (Application::GetInstance())->GetAppRootPath();
165         CustomItem* pItem = new (std::nothrow) CustomItem();
166         if (__isEditMode == true)
167         {
168                 style = LIST_ANNEX_STYLE_MARK;
169         }
170         pItem->Construct(Dimension(itemWidth, H_CALLLOGDETAIL_ITEM), style);
171
172         /*if (__isEditMode == true && index == 0)
173         {
174                 pItem->AddElement(Rectangle(16, 0, itemWidth - 76, 128), ID_NAME_STRING, L"Select All", false);
175                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, Color(215, 225, 232));
176                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_PRESSED, Color(215, 225, 232));
177                 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, Color(215, 225, 232));
178                 return pItem;
179         }*/
180         pItem->AddElement(Rectangle(X_TEXT_LINE1_ITEM, Y_TEXT_LINE1_ITEM, W_TEXT_LINE1_ITEM, H_TEXT_LINE1_ITEM), ID_NAME_STRING, timeText, false);
181         pItem->AddElement(Rectangle(X_TEXT_LINE2_ITEM, Y_TEXT_LINE2_ITEM, 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);
182
183         if (__isEditMode == true)
184         {
185                 pItem->AddElement(Rectangle(X_TEXT_LINE1_ITEM, Y_TEXT_LINE1_ITEM, W_TEXT_LINE1_ITEM - 76, H_TEXT_LINE1_ITEM), ID_NAME_STRING, timeText, false);
186                 pItem->AddElement(Rectangle(X_TEXT_LINE2_ITEM, Y_TEXT_LINE2_ITEM, 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);
187         }
188         text->Construct(Dimension(W_TEXT_TIME_ITEM, H_TEXT_TIME_ITEM));
189         text->SetHorizontalAlignment(TEXT_ALIGNMENT_RIGHT);
190         text->SetVerticalAlignment(TEXT_ALIGNMENT_MIDDLE);
191         hr = duration/3600;
192         sec = duration%3600;
193         min = duration/60;
194         sec = sec%60;
195         //AppLog(" time %02d:%02d:%02d", hr, min, sec);
196         durationText.Format(10,L"%02d:%02d:%02d", hr, min, sec);
197         textElement->Construct(durationText);
198
199         font.Construct(FONT_STYLE_PLAIN, 32);
200         textElement->SetFont(font);
201         textElement->SetTextColor(Color::GetColor(COLOR_ID_GREY));
202         text->Add(*textElement);
203         pItem->AddElement(Rectangle(X_TEXT_TIME_ITEM - 76, Y_TEXT_TIME_ITEM, W_TEXT_TIME_ITEM, H_TEXT_TIME_ITEM), ID_TIME_STRING, *text);
204
205         Image* pImage = new (std::nothrow) Image();
206         pImage->Construct();
207         if (pBitmap != null)
208         {
209                 pItem->AddElement(Rectangle(X_CALLTYPE_BITMAP_ITEM, Y_CALLTYPE_BITMAP_ITEM, W_CALLTYPE_BITMAP_ITEM, H_CALLTYPE_BITMAP_ITEM), ID_CALLTYPE_BITMAP, *pBitmap);
210                 delete pBitmap;
211                 pBitmap = null;
212         }
213
214         //Background image for List items. Not woring in A3RC2 SDk.Henc ecommented
215         /*path.Clear();
216         path = appPath + L"res/screen-density-xhigh/00_reorder_group_list_bg.png";
217         pBitmap = pImage->DecodeN(path, BITMAP_PIXEL_FORMAT_RGB565);
218         pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_NORMAL, pBitmap);
219         pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_PRESSED, pBitmap);
220         pItem->SetBackgroundBitmap(LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED, pBitmap);*/
221         return pItem;
222 }
223
224 bool
225 DlLogsDetailItemDataProvider::DeleteItem(int index, ListItemBase* pItem, int itemWidth)
226 {
227         if (pItem != null)
228         {
229                 delete pItem;
230                 pItem = null;
231         }
232         return true;
233 }
234
235 int
236 DlLogsDetailItemDataProvider::GetItemCount(void)
237 {
238         int itemCount =  CallLogManager::GetInstance()->GetCalllogCountByNumber();
239         return itemCount;
240 }
241
242 void
243 DlLogsDetailItemDataProvider::SetViewMode(bool mode)
244 {
245         __isEditMode = mode;
246 }
247
248 void
249 DlLogsDetailItemDataProvider::ResetDetailsList(void)
250 {
251         delete __pCalllogListByNumber;
252         __pCalllogListByNumber = null;
253
254 }