2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
8 // http://floralicense.org/license/
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.
18 * @file PhnCalllogManager.cpp
19 * @brief This class provides call log APIs
21 #include "PhnAppUtility.h"
\r
22 #include "PhnCalllogManager.h"
25 using namespace Tizen::Base;
26 using namespace Tizen::Base::Collection;
27 using namespace Tizen::Base::Utility;
28 using namespace Tizen::Graphics;
29 using namespace Tizen::System;
30 using namespace Tizen::Locales;
31 using namespace Tizen::Ui::Controls;
33 CallLogManager* CallLogManager::__pCallogManager = null;
34 CallLogType CallLogManager::__callLogViewbyID = CALL_LOG_TYPE_ALL;
\r
36 static int TOTAL_CALL_LOGS_TO_FETCH = 500;
\r
39 LogListByNumberComparer::Compare(const CallLogDetails& obj1, const CallLogDetails& obj2, int& cmp) const
41 CallLogDetails* log1 = const_cast<CallLogDetails*>((&obj1));
42 CallLogDetails* log2 = const_cast<CallLogDetails*>((&obj2));
43 if(log1 == null || log2 == null)
47 log1->ConvertTimetoDateTime();
48 DateTime date1 = log1->GetDateTime();
49 //AppLog(" %d %d %s %d:%d:%d", log1->GetCalllogDbId(), log1->GetCalllogType(), log1->GetPhoneNumber(), date1.GetDay(), date1.GetMonth(), date1.GetYear());
50 log2->ConvertTimetoDateTime();
51 DateTime date2 = log2->GetDateTime();
52 //AppLog(" %d %d %s %d:%d:%d", log2->GetCalllogDbId(), log2->GetCalllogType(), log2->GetPhoneNumber(), date2.GetDay(), date2.GetMonth(), date2.GetYear());
53 cmp = date2.CompareTo(date1);
58 LogListComparer::Compare(const Object& obj1, const Object& obj2, int& cmp) const
60 CallLogDetails* log1 = dynamic_cast<CallLogDetails*>(const_cast<Object*>(&obj1));
61 CallLogDetails* log2 = dynamic_cast<CallLogDetails*>(const_cast<Object*>(&obj2));
62 if(log1 == null || log2 == null)
66 log1->ConvertTimetoDateTime();
67 DateTime date1 = log1->GetDateTime();
68 //AppLog(" %d %d %s %d:%d:%d", log1->GetCalllogDbId(), log1->GetCalllogType(), log1->GetPhoneNumber(), date1.GetDay(), date1.GetMonth(), date1.GetYear());
69 log2->ConvertTimetoDateTime();
70 DateTime date2 = log2->GetDateTime();
71 //AppLog(" %d %d %s %d:%d:%d", log2->GetCalllogDbId(), log2->GetCalllogType(), log2->GetPhoneNumber(), date2.GetDay(), date2.GetMonth(), date2.GetYear());
72 cmp = date2.CompareTo(date1);
76 CallLogDetails::CallLogDetails(void)
78 dateTime.SetValue(0,0,0);
82 contact_image_path = null;
86 __consecutiveNoCounter = 1;
\r
90 CallLogDetails::~CallLogDetails(void)
92 //NOTE: none of the fields are owned. Free() them will lead to crash.
96 CallLogDetails::operator ==(const CallLogDetails& rhs) const
98 if(this->calllog_db_id == rhs.calllog_db_id)
106 CallLogDetails::operator !=(const CallLogDetails& rhs) const
108 if(this->calllog_db_id != rhs.calllog_db_id)
116 CallLogDetails::operator =(const CallLogDetails& rhs)
118 this->calllog_db_id = rhs.calllog_db_id;
119 this->contact_db_id = rhs.contact_db_id;
120 this->calllog_type = rhs.calllog_type;
121 this->duration_sec = rhs.duration_sec;
122 if(rhs.phone_number != null)
124 this->phone_number = strdup(rhs.phone_number);
126 this->startTime = rhs.startTime;
132 CallLogDetails::SetCalllogDbId(int id)
139 CallLogDetails::GetCalllogDbId(void)
141 return calllog_db_id;
145 CallLogDetails::SetCalllogType(contacts_phone_log_type_e type)
149 case CONTACTS_PLOG_TYPE_VOICE_INCOMMING:
150 calllog_type = CALL_LOG_TYPE_VOICE_INCOMING;
152 case CONTACTS_PLOG_TYPE_VOICE_OUTGOING:
153 calllog_type = CALL_LOG_TYPE_VOICE_OUTGOING;
155 case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN:
156 calllog_type = CALL_LOG_TYPE_VOICE_MISSED_UNSEEN;
158 case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN:
159 calllog_type = CALL_LOG_TYPE_VOICE_MISSED;
161 case CONTACTS_PLOG_TYPE_VOICE_REJECT:
162 calllog_type = CALL_LOG_TYPE_VOICE_REJECTED;
164 case CONTACTS_PLOG_TYPE_VOICE_BLOCKED:
165 calllog_type = CALL_LOG_TYPE_VOICE_BLOCKED;
169 case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING:
170 calllog_type = CALL_LOG_TYPE_VIDEO_INCOMING;
172 case CONTACTS_PLOG_TYPE_VIDEO_OUTGOING:
173 calllog_type = CALL_LOG_TYPE_VIDEO_OUTGOING;
175 case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN:
176 case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN:
177 calllog_type = CALL_LOG_TYPE_VIDEO_MISSED;
179 case CONTACTS_PLOG_TYPE_VIDEO_REJECT:
180 calllog_type = CALL_LOG_TYPE_VIDEO_REJECTED;
182 case CONTACTS_PLOG_TYPE_VIDEO_BLOCKED:
183 calllog_type = CALL_LOG_TYPE_VIDEO_BLOCKED;
186 case CONTACTS_PLOG_TYPE_MMS_INCOMMING:
187 calllog_type = CALL_LOG_TYPE_MMS_INCOMING;
189 case CONTACTS_PLOG_TYPE_MMS_OUTGOING:
190 calllog_type = CALL_LOG_TYPE_MMS_OUTGOING;
192 case CONTACTS_PLOG_TYPE_MMS_BLOCKED:
193 calllog_type = CALL_LOG_TYPE_SMS_BLOCKED;
196 case CONTACTS_PLOG_TYPE_SMS_INCOMMING:
197 calllog_type = CALL_LOG_TYPE_SMS_INCOMING;
199 case CONTACTS_PLOG_TYPE_SMS_OUTGOING:
200 calllog_type = CALL_LOG_TYPE_SMS_OUTGOING;
202 case CONTACTS_PLOG_TYPE_SMS_BLOCKED:
203 calllog_type = CALL_LOG_TYPE_SMS_BLOCKED;
206 case CONTACTS_PLOG_TYPE_EMAIL_RECEIVED:
207 calllog_type = CALL_LOG_TYPE_EMAIL_INCOMING;
209 case CONTACTS_PLOG_TYPE_EMAIL_SENT:
210 calllog_type = CALL_LOG_TYPE_EMAIL_OUTGOING;
219 CallLogDetails::GetCalllogType(void)
225 CallLogDetails::SetContactDbId(int id)
231 CallLogDetails::GetContactDbId(void)
233 return contact_db_id;
237 CallLogDetails::SetFirstName(char* name)
239 first_name = strdup(name);
243 CallLogDetails::GetFirstName(void)
249 CallLogDetails::SetLastName(char* name)
251 last_name = strdup(name);
255 CallLogDetails::GetLastName(void)
261 CallLogDetails::SetDisplayName(char* name)
263 display_name = strdup(name);
267 CallLogDetails::GetDisplayName(void)
273 CallLogDetails::SetContactImagePath(char* name)
275 contact_image_path = strdup(name);
279 CallLogDetails::GetContactImagePath(void)
281 return contact_image_path;
285 CallLogDetails::SetPhoneNumber(char* name)
287 phone_number = strdup(name);
291 CallLogDetails::GetPhoneNumber(void)
297 CallLogDetails::SetShortMessage(char* name)
299 short_message = strdup(name);
303 CallLogDetails::GetShortMessage(void)
305 return short_message;
309 CallLogDetails::ConvertTimetoDateTime(void)
312 struct tm* time = null;
313 time = gmtime(&startTime);
314 LocaleManager localManager;
318 dtNow.SetValue(time->tm_year+1900,time->tm_mon+1, time->tm_mday,time->tm_hour, time->tm_min, time->tm_sec);
321 localManager.Construct();
322 tz = localManager.GetSystemTimeZone();
323 dateTime = tz.UtcTimeToWallTime(dtNow);
329 CallLogDetails::SetStartTime(time_t time)
332 ConvertTimetoDateTime();
336 CallLogDetails::GetStartTime(void)
342 CallLogDetails::GetDateTime(void)
348 CallLogDetails::SetDuration(int duration)
350 duration_sec = duration;
354 CallLogDetails::GetDuration(void)
360 CallLogDetails::GetConsecutiveNoCounter()
\r
362 return __consecutiveNoCounter;
\r
366 CallLogDetails::SetConsecutiveNoCounter(int consecutiveNoCounter)
\r
368 __consecutiveNoCounter = consecutiveNoCounter;
\r
371 Tizen::Base::Collection::ArrayList*
\r
372 CallLogDetails::GetCallLogDbIds()
\r
378 CallLogDetails::SetCallLogDbIds(Tizen::Base::Collection::ArrayList* dbIds)
\r
384 CallLogManager::GetInstance(void)
386 if(__pCallogManager == null)
390 return __pCallogManager;
394 CallLogManager::CreateInstance(void)
396 __pCallogManager = new CallLogManager();
397 result r = __pCallogManager->Construct();
400 delete __pCallogManager;
401 __pCallogManager = null;
404 std::atexit(DestroyInstance);
407 CallLogManager::DestroyInstance(void)
409 contacts_disconnect2();
410 delete __pCallogManager;
413 CallLogManager::Construct(void)
415 int ret = contacts_connect2();
421 __callLogViewbyID = CALL_LOG_TYPE_ALL;
\r
422 __callLogsViewedCount = 0;
\r
424 __pCalllogGroupList = new (std::nothrow) ArrayList();
\r
425 __pCalllogGroupList->Construct();
\r
426 __pCalllogChangeListerners = new (std::nothrow) ArrayListT<ICalllogChangeListener*>;
427 __pCalllogChangeListerners->Construct(10);
428 __pCalllogDBIds = new (std::nothrow) HashMapT<int,int>();
429 __pCalllogDBIds->Construct(100);
431 //GetAllCallogDataFromDatabseCB();
432 contacts_db_add_changed_cb(_contacts_phone_log._uri,CallLogManager::ContactsDbchangedcb,this);
435 //calllog_add_calllog_db_changed_cb(changed_db_cb, this);
439 ///////////////////////////////////////Calllog Manager////////////////////////////////////////////////////////////////////////////////
440 CallLogManager::CallLogManager(void)
442 __pCalllogGroupList = null;
\r
443 __pCalllogListByNumber = null;
445 __pCalllogChangeListerners = null;
449 CallLogManager::~CallLogManager(void)
451 AppLogDebug("Enter");
452 DeleteAllCallLogCacheEntries();
\r
453 if(__pCalllogListByNumber != null)
455 __pCalllogListByNumber = null;
457 if(__pNumber != null)
462 if(__pCalllogDBIds != null)
464 __pCalllogDBIds->RemoveAll();
465 delete __pCalllogDBIds;
467 if(__pCalllogChangeListerners != null)
469 delete __pCalllogChangeListerners;
471 contacts_db_remove_changed_cb(_contacts_phone_log._uri,CallLogManager::ContactsDbchangedcb,null);
472 __pCallogManager = null;
476 CallLogManager::DeleteAllCallLogCacheEntries(void)
\r
478 if(__pCalllogGroupList != null)
\r
480 ArrayList* pCalllogList = null;
\r
481 GroupItemClass* pGroupInfo = null;
\r
482 for(int index = 0; index < __pCalllogGroupList->GetCount(); index++)
\r
484 pGroupInfo = static_cast<GroupItemClass*>(__pCalllogGroupList->GetAt(index));
\r
485 if(pGroupInfo != null)
\r
487 pCalllogList = pGroupInfo->GetLogData();
\r
488 if(pCalllogList != null)
\r
490 pCalllogList->RemoveAll();
\r
491 delete pCalllogList;
\r
492 pCalllogList = null;
\r
498 __pCalllogGroupList->RemoveAll();
\r
499 delete __pCalllogGroupList;
\r
500 __pCalllogGroupList = null;
\r
504 CallLogManager::GetDuration(long long start_time)
507 unsigned long call_duration_in_sec = 50;
509 call_duration_in_sec = curr_time - start_time;
510 return call_duration_in_sec;
514 CallLogManager::CopyDataToCallLogDetails(CallLogDetails* calllogInfo , contacts_record_h getrec)
517 contacts_record_get_int(getrec,_contacts_phone_log.id,&logid);
518 calllogInfo->SetCalllogDbId(logid);
520 contacts_phone_log_type_e logType=CONTACTS_PLOG_TYPE_NONE;
521 contacts_record_get_int(getrec,_contacts_phone_log.log_type,(int*)&logType);
522 calllogInfo->SetCalllogType(logType);
525 contacts_record_get_int(getrec,_contacts_phone_log.log_time,&log_time);
526 calllogInfo->SetStartTime((time_t)log_time);
528 char* address = null;
529 int ret = contacts_record_get_str(getrec,_contacts_phone_log.address,&address);
530 if(ret == 0 && address != null)
532 calllogInfo->SetPhoneNumber(address);
537 contacts_record_get_int(getrec,_contacts_phone_log.extra_data1,&duration);
538 calllogInfo->SetDuration(duration);
541 contacts_record_get_str(getrec,_contacts_phone_log.extra_data2,&shortMsg);
543 calllogInfo->SetShortMessage(shortMsg);
548 CallLogManager::GetAllCallogDataFromDatabseCB()
550 contacts_list_h list=NULL;
\r
551 unsigned int count = 0;
\r
553 __callLogsViewedCount = 0;
\r
555 if(QueryCallogDatabse(&list) == false)
\r
557 AppLogDebug("Getting records from callLog database is failed!");
\r
560 ret = contacts_list_get_count(list,&count);
\r
561 contacts_list_first(list);
\r
563 DateTime today, yesterday, tomorrow;
\r
564 TimeSpan oneDay(1,0,0,0);
\r
565 GetCurrentDateTime(today);
\r
566 today.Subtract(today.GetTimeOfDay());
\r
569 yesterday.Subtract(oneDay);
\r
571 tomorrow.Add(oneDay);
\r
574 DateTime calllogDate;
\r
576 for (unsigned int i = 0; i < count; i++)
578 CallLogDetails* pCalllogInfo = new CallLogDetails();
\r
579 contacts_record_h getrec=0;
580 ret = contacts_list_get_current_record_p(list,&getrec);
583 contacts_phone_log_type_e logType=CONTACTS_PLOG_TYPE_NONE;
584 contacts_record_get_int(getrec,_contacts_phone_log.log_type,(int*)&logType);
586 if(logType != CONTACTS_PLOG_TYPE_EMAIL_RECEIVED && logType !=CONTACTS_PLOG_TYPE_EMAIL_SENT)
588 CopyDataToCallLogDetails(pCalllogInfo, getrec);
\r
590 if(__pCalllogDBIds->Add(pCalllogInfo->GetCalllogDbId(),pCalllogInfo->GetCalllogDbId()) == E_SUCCESS)
\r
592 __callLogsViewedCount++;
\r
594 pCalllogInfo->ConvertTimetoDateTime();
\r
595 calllogDate = pCalllogInfo->GetDateTime();
\r
597 if(calllogDate >= today && calllogDate < tomorrow)
\r
599 title.Append(AppUtility::GetResourceString(IDS_LOGS_TODAY));
\r
601 else if(calllogDate >= yesterday && calllogDate < today)
\r
603 title.Append(AppUtility::GetResourceString(IDS_LOGS_YESTERDAY));
\r
607 title.Format(30,L"%d/%d/%d",calllogDate.GetDay(), calllogDate.GetMonth(), calllogDate.GetYear());
\r
609 CreateCallLogGroup(pCalllogInfo, title);
\r
613 //move to next record
614 ret = contacts_list_next(list);
619 contacts_record_destroy(getrec,true);
621 contacts_list_destroy(list,false);
626 CallLogManager::QueryCallogDatabse(contacts_list_h* list)
\r
628 contacts_filter_h filter=NULL;
\r
629 contacts_query_h query = NULL;
\r
632 if(getCallLogViewbyID() == CALL_LOG_TYPE_ALL)
\r
634 int calLogCount = 0;
\r
635 contacts_db_get_count(_contacts_phone_log._uri,&calLogCount);
\r
636 ret = contacts_db_get_all_records(_contacts_phone_log._uri,0,TOTAL_CALL_LOGS_TO_FETCH,list);
\r
644 contacts_filter_create(_contacts_phone_log._uri,&filter);
\r
645 //get Received/Dialed call logs only
\r
646 if (getCallLogViewbyID() == CALL_LOG_TYPE_VOICE_INCOMING || getCallLogViewbyID() == CALL_LOG_TYPE_VOICE_OUTGOING)
\r
648 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, GetCallLogType(getCallLogViewbyID()));
\r
652 //get Missed/Missed Unseen call logs only or rejected/blocked call logs only
\r
653 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, GetCallLogType(getCallLogViewbyID()));
\r
654 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
\r
655 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, GetCallLogType((CallLogType)(getCallLogViewbyID()+1)));
\r
657 contacts_query_create(_contacts_phone_log._uri,&query);
\r
658 contacts_query_set_filter(query,filter);
\r
659 ret = contacts_db_get_records_with_query(query,0,TOTAL_CALL_LOGS_TO_FETCH,list);
\r
662 contacts_filter_destroy(filter);
\r
663 contacts_query_destroy(query);
\r
666 contacts_filter_destroy(filter);
\r
667 contacts_query_destroy(query);
\r
673 CallLogManager::CreateCallLogGroup(CallLogDetails* pCalllogInfo, String title)
\r
675 GroupItemClass* pGroupItemClass;
\r
676 ArrayList* pData = null;
\r
677 //find if group with this title is already found
\r
678 pGroupItemClass = GetGroupWithTitle(title);
\r
679 if (pGroupItemClass != null)
\r
681 pData = pGroupItemClass->GetLogData();
\r
683 String today = AppUtility::GetResourceString(IDS_LOGS_TODAY);
\r
684 String yesterday = AppUtility::GetResourceString(IDS_LOGS_YESTERDAY);
\r
686 //In case of Today or Yesterday logs group, if logs with same number present consecutively we will show the count instead of multiple entries.
\r
687 if((today.CompareTo(pGroupItemClass->GetTitleText()) == 0) || (yesterday.CompareTo(pGroupItemClass->GetTitleText()) == 0))
\r
689 CallLogDetails* pCurrCalllogInf = static_cast<CallLogDetails*>(pData->GetAt(0));
\r
690 if(String::Compare(String(pCurrCalllogInf->GetPhoneNumber()), String(pCalllogInfo->GetPhoneNumber())) == 0)
\r
692 Tizen::Base::Collection::ArrayList* dbIds = pCurrCalllogInf->GetCallLogDbIds();
\r
695 dbIds = new ArrayList();
\r
696 dbIds->Construct();
\r
697 dbIds->Add(new Integer(pCalllogInfo->GetCalllogDbId()));
\r
698 dbIds->Add(new Integer(pCurrCalllogInf->GetCalllogDbId()));
\r
702 dbIds->InsertAt(new Integer(pCalllogInfo->GetCalllogDbId()), 0);
\r
704 pCalllogInfo->SetConsecutiveNoCounter(pCurrCalllogInf->GetConsecutiveNoCounter() + 1);
\r
705 pCalllogInfo->SetCallLogDbIds(dbIds);
\r
706 pData->RemoveAt(0, true);
\r
707 __callLogsViewedCount--;
\r
710 pData->InsertAt(pCalllogInfo,0);
\r
711 pGroupItemClass->SetLogData(pData);
\r
715 //Create a new group
\r
716 pGroupItemClass = new(std::nothrow) GroupItemClass();
\r
717 pGroupItemClass->SetTitleText(title);
\r
719 __pCalllogGroupList->InsertAt(pGroupItemClass, 0);
\r
720 pData = pGroupItemClass->GetLogData();
\r
723 pData = new ArrayList();
\r
725 pData->InsertAt(pCalllogInfo,0);
\r
726 pGroupItemClass->SetLogData(pData);
\r
731 CallLogManager::GetGroupWithTitle(String title)
\r
733 GroupItemClass* pGroupInfo = null;
\r
734 int count = __pCalllogGroupList->GetCount();
\r
735 for(int index = 0; index < count; index++)
\r
737 pGroupInfo = static_cast<GroupItemClass*>(__pCalllogGroupList->GetAt(index));
\r
738 if(pGroupInfo == null)
\r
742 String title1 = pGroupInfo->GetTitleText();
\r
743 if( title.CompareTo(title1) == 0)
\r
752 CallLogManager::DeleteItemAtGroupIndex(int groupIndex, int itemIndex)
\r
754 if(__pCalllogGroupList != null)
\r
756 GroupItemClass* pGroupInfo = null;
\r
757 ArrayList* list = null;
\r
758 pGroupInfo = static_cast<GroupItemClass*>(__pCalllogGroupList->GetAt(groupIndex));
\r
759 if(pGroupInfo != null)
\r
761 list = pGroupInfo->GetLogData();
\r
762 list->RemoveAt(itemIndex,true);
\r
768 CallLogManager::GetCurrentDateTime(DateTime& dt)
\r
771 LocaleManager localManager;
\r
772 result r = E_FAILURE;
\r
775 r = SystemTime::GetCurrentTime(UTC_TIME, dtNow);
\r
780 localManager.Construct();
\r
781 tz = localManager.GetSystemTimeZone();
\r
782 dt = tz.UtcTimeToWallTime(dtNow);
\r
788 CallLogManager::ResetAndNotifyCalllogData(void)
791 IEnumeratorT<ICalllogChangeListener*>* pListenerEnum = null;
792 result r = E_FAILURE;
793 if (__pCalllogChangeListerners != null)
795 pListenerEnum = __pCalllogChangeListerners->GetEnumeratorN();
796 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
798 ICalllogChangeListener* pListener;
799 r = pListenerEnum->GetCurrent(pListener);
800 pListener->OnCalllogChanged();
808 CallLogManager::UpdateCallLogList()
810 DeleteAllCallLogCacheEntries();
\r
811 if(__pCalllogDBIds != null)
813 __pCalllogDBIds->RemoveAll();
814 delete __pCalllogDBIds;
815 __pCalllogDBIds = null;
818 __pCalllogGroupList = new (std::nothrow) ArrayList();
\r
819 __pCalllogGroupList->Construct();
\r
820 __pCalllogDBIds = new (std::nothrow) HashMapT<int,int>;
821 __pCalllogDBIds->Construct(100);
822 GetAllCallogDataFromDatabseCB();
829 IListT<CallLogDetails>*
830 CallLogManager::GetCalllogListByNumValues(void)
832 if(__pCalllogListByNumber != null)
834 return __pCalllogListByNumber->GetItemsN(0, __pCalllogListByNumber->GetCount());
840 CallLogManager::GetCallogListByNumberFromDatabaseCB(char* number)
843 contacts_filter_h filter=NULL;
844 contacts_list_h list=NULL;
845 contacts_query_h query = NULL;
846 unsigned int count = 0;
849 contacts_filter_create(_contacts_phone_log._uri,&filter);
850 contacts_filter_add_str(filter,_contacts_phone_log.address,CONTACTS_MATCH_EXACTLY,number);
851 contacts_query_create(_contacts_phone_log._uri,&query);
852 contacts_query_set_filter(query,filter);
854 ret = contacts_db_get_records_with_query(query,0,0,&list);
857 contacts_filter_destroy(filter);
858 contacts_query_destroy(query);
861 contacts_filter_destroy(filter);
862 contacts_query_destroy(query);
865 contacts_list_get_count(list,&count);
866 contacts_list_first(list);
867 for(unsigned int i=0;i<count;i++)
869 CallLogDetails* calllogInfo = new CallLogDetails();
870 contacts_record_h getrec=0;
871 result ret = contacts_list_get_current_record_p(list,&getrec);
874 contacts_phone_log_type_e logType=CONTACTS_PLOG_TYPE_NONE;
875 contacts_record_get_int(getrec,_contacts_phone_log.log_type,(int*)&logType);
876 if(logType != CONTACTS_PLOG_TYPE_EMAIL_RECEIVED && logType !=CONTACTS_PLOG_TYPE_EMAIL_SENT)
878 CopyDataToCallLogDetails(calllogInfo, getrec);
879 __pCalllogListByNumber->InsertAt(*calllogInfo, 0);
\r
885 ret = contacts_list_next(list);
890 contacts_record_destroy(getrec,true);
896 Tizen::Base::Collection::ArrayListT<CallLogDetails>*
897 CallLogManager::GetCallogListByNumberFromDatabaseN(char* number)
899 __pCalllogListByNumber = new (std::nothrow) Tizen::Base::Collection::ArrayListT<CallLogDetails>();
900 __pCalllogListByNumber->Construct(100);
901 if(__pNumber != null)
905 int len = strlen(number) + 1;
906 __pNumber = new (std::nothrow) char[len];
907 strcpy(__pNumber,number);
909 GetCallogListByNumberFromDatabaseCB(number);
911 if (__pCalllogListByNumber->GetCount() > 0)
913 SortCalllogListByNumber();
\r
914 return __pCalllogListByNumber;
916 delete __pCalllogListByNumber;
917 __pCalllogListByNumber = null;
921 HashMapT<int, CallLogDetails>*
922 CallLogManager::GetCallogListByUnknownNumberFromDatabaseN(char* number)
924 //Used to fetch list of call from unknown numbers from logs.
925 __pCalllogUnkownListByNumber = new (std::nothrow) HashMapT<int, CallLogDetails>();
926 __pCalllogUnkownListByNumber->Construct(100);
927 if(__pNumber != null)
931 int len = strlen(number) + 1;
932 __pNumber = new (std::nothrow) char[len];
933 strcpy(__pNumber,number);
935 GetCallogListByNumberFromDatabaseCB(number);
936 if (__pCalllogUnkownListByNumber->GetCount() > 0)
938 return __pCalllogUnkownListByNumber;
940 delete __pCalllogUnkownListByNumber;
941 __pCalllogUnkownListByNumber = null;
946 CallLogManager::DeleteCalllogByDbId(int dbId)
948 contacts_db_delete_record(_contacts_phone_log._uri,dbId);
952 CallLogManager::DeleteAllCalllog(void)
954 if(__pCalllogGroupList != null)
\r
956 ArrayList* pCalllogList = null;
\r
957 GroupItemClass* pGroupInfo = null;
\r
958 CallLogDetails* pLatestCallLog;
\r
961 for(int index = 0; index < __pCalllogGroupList->GetCount(); index++)
\r
963 pGroupInfo = static_cast<GroupItemClass*>(__pCalllogGroupList->GetAt(index));
\r
965 if(pGroupInfo != null)
\r
967 pCalllogList = pGroupInfo->GetLogData();
\r
968 if(pCalllogList != null)
\r
970 count = pCalllogList->GetCount();
\r
971 for(int i=0; i< count; i++)
\r
973 pLatestCallLog = static_cast<CallLogDetails*>(pCalllogList->GetAt(i));
\r
974 contacts_db_delete_record(_contacts_phone_log._uri,pLatestCallLog->GetCalllogDbId());
\r
976 pCalllogList->RemoveAll();
\r
977 delete pCalllogList;
\r
978 pCalllogList = null;
\r
984 __pCalllogGroupList->RemoveAll();
\r
985 delete __pCalllogGroupList;
\r
986 __pCalllogGroupList = null;
\r
989 contacts_phone_log_reset_statistics();
\r
994 CallLogManager::GetAllCallLogCount(void)
\r
996 int calLogCount = 0;
\r
997 contacts_filter_h filter=NULL;
998 contacts_query_h query = NULL;
1000 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING);
1001 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1003 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_OUTGOING);
1004 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1006 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_INCOMMING);
1007 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1009 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_OUTGOING);
1010 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1012 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN);
1013 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1015 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN);
1016 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1018 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN);
1019 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1021 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN);
1022 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1024 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_REJECT);
1025 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1027 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_REJECT);
1028 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1030 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VOICE_BLOCKED);
1031 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1033 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_VIDEO_BLOCKED);
1034 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1036 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_MMS_INCOMMING);
1037 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1039 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_MMS_OUTGOING);
1040 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1042 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_SMS_INCOMMING);
1043 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1045 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_SMS_OUTGOING);
1046 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1048 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_SMS_BLOCKED);
1049 contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_OR);
1051 contacts_filter_add_int(filter,_contacts_phone_log.log_type, CONTACTS_MATCH_EQUAL, CONTACTS_PLOG_TYPE_MMS_BLOCKED);
1053 contacts_query_create(_contacts_phone_log._uri,&query);
1054 contacts_query_set_filter(query,filter);
1056 contacts_db_get_count_with_query(query,&calLogCount);
1057 contacts_filter_destroy(filter);
1058 contacts_query_destroy(query);
1060 AppLogDebug("contacts_db_get_count_with_query %d",calLogCount);
\r
1061 return calLogCount;
\r
1065 CallLogManager::GetCallLogsViewedCount()
\r
1067 AppLogDebug("%d",__callLogsViewedCount);
\r
1068 return __callLogsViewedCount;
\r
1072 CallLogManager::GetCalllogCountByNumber(void)
1074 if(__pCalllogListByNumber != null)
1076 return __pCalllogListByNumber->GetCount();
1082 CallLogManager::SortCalllogList(void)
1084 LogListComparer cmp;
1085 if(__pCalllogGroupList != null)
1087 ArrayList* pCalllogList = null;
1088 GroupItemClass* pGroupInfo = null;
1089 for(int index = 0; index < __pCalllogGroupList->GetCount(); index++)
1091 pGroupInfo = static_cast<GroupItemClass*>(__pCalllogGroupList->GetAt(index));
1092 if(pGroupInfo != null)
1094 pCalllogList = pGroupInfo->GetLogData();
1095 if(pCalllogList != null)
1097 pCalllogList->Sort(cmp);
1108 CallLogManager::SortCalllogListByNumber(void)
1110 LogListByNumberComparer cmp;
1111 __pCalllogListByNumber->Sort(cmp);
1115 CallLogManager::GetLatestCallLogFromDbN(void)
1117 String* latestNumber = null;
1119 if(__bDbDirty == true)
1121 AppLogDebug("__bDbDirty == true");
1122 UpdateCallLogList();
1124 if (__pCalllogGroupList != null)
\r
1126 GroupItemClass* pGroupInfo;
\r
1127 CallLogDetails* pLatestCallLog;
\r
1128 ArrayList* callLogList;
\r
1129 int groupCount = __pCalllogGroupList->GetCount();
\r
1131 for(int index = 0; index < groupCount; index++)
\r
1134 pGroupInfo = static_cast<GroupItemClass*>(__pCalllogGroupList->GetAt(index));
\r
1135 callLogList = pGroupInfo->GetLogData();
\r
1136 count = callLogList->GetCount();
\r
1137 for(int i = 0; i < count; i++)
\r
1139 pLatestCallLog = static_cast<CallLogDetails*>(callLogList->GetAt(i));
\r
1140 latestNumber = new String(pLatestCallLog->GetPhoneNumber());
\r
1141 if(CheckNumberIsValid(*latestNumber))
1148 latestNumber = null;
1158 return latestNumber;
1162 CallLogManager::CheckNumberIsValid(String phoneNumber)
1164 //Pattern to compare all characters except 0-9 * # P ; , +
1165 String phoneNumberPattern(L"[^0-9*#P,p+;]");
1166 RegularExpression checkPhoneNumber;
1167 checkPhoneNumber.Construct(phoneNumberPattern);
1168 //If there is any character other than these listed above then display invalid number
1169 bool resultMatch = checkPhoneNumber.Match(phoneNumber,false);
1170 //return false for patterns other than 0-9 * # P ; , +
1171 if(resultMatch == true)
1173 //return phone number is invalid
1181 ArrayList* CallLogManager::GetCallLogGroups()
\r
1183 return __pCalllogGroupList;
\r
1186 void CallLogManager::AddCalllogChangeListener(ICalllogChangeListener& listner )
1188 if(!__pCalllogChangeListerners->Contains(&listner))
1189 __pCalllogChangeListerners->Add(&listner);
1193 void CallLogManager::RemoveCalllogChangeListner(ICalllogChangeListener& listner)
1195 __pCalllogChangeListerners->Remove(&listner);
1198 void CallLogManager::GetCalllogContactName(String number,String& name)
1201 ByteBuffer* pByteBuffer;
1202 char * charname=NULL;
1203 pByteBuffer = StringUtil::StringToUtf8N(number);
1205 contacts_filter_h filter=NULL;
1206 contacts_list_h list=NULL;
1207 contacts_query_h query = NULL;
1208 unsigned int count = 0;
1210 if(number.Contains(L"@"))
1212 contacts_filter_create(_contacts_contact_email._uri,&filter);
1213 contacts_filter_add_str(filter,_contacts_contact_email.email,CONTACTS_MATCH_EXACTLY,(const char*)pByteBuffer->GetPointer());
1214 contacts_query_create(_contacts_contact_email._uri,&query);
1215 contacts_query_set_filter(query,filter);
1219 contacts_filter_create(_contacts_contact_number._uri,&filter);
1220 contacts_filter_add_str(filter,_contacts_contact_number.number,CONTACTS_MATCH_EXACTLY,(const char*)pByteBuffer->GetPointer());
1221 contacts_query_create(_contacts_contact_number._uri,&query);
1222 contacts_query_set_filter(query,filter);
1225 int ret = contacts_db_get_records_with_query(query,0,0,&list);
1228 contacts_filter_destroy(filter);
1229 contacts_query_destroy(query);
1233 contacts_filter_destroy(filter);
1234 contacts_query_destroy(query);
1237 contacts_list_get_count(list,&count);
1238 AppLogDebug("%d",count);
1241 contacts_record_h getrec=0;
1242 contacts_list_first(list);
1243 contacts_list_get_current_record_p(list,&getrec);
1245 contacts_record_get_str(getrec,_contacts_contact_number.display_name,&charname);
1246 AppLogDebug("%s",charname);
1249 String buffer(charname);
1251 name.Append(buffer);
1254 contacts_record_destroy(getrec,true);
1259 void CallLogManager::ContactsDbchangedcb(const char* view_uri, void* user_data)
1261 AppLogDebug("Enter");
1262 CallLogManager* pCallLogMgr = (CallLogManager*) user_data;
1263 if(pCallLogMgr == null || view_uri == null)
1265 AppLogDebug("return");
1269 if(String(view_uri).Equals(String(_contacts_phone_log._uri)) == true)
1271 pCallLogMgr->ResetAndNotifyCalllogData();
1276 CallLogManager::UpDateMissedCallSeenStatus(CallLogDetails* pDetails)
1278 contacts_record_h record;
1279 int res = contacts_db_get_record(_contacts_phone_log._uri, pDetails->GetCalllogDbId(), &record);
1280 if(res == CONTACTS_ERROR_NONE)
1282 if(pDetails->GetCalllogType() == CALL_LOG_TYPE_VOICE_MISSED_UNSEEN)
1284 contacts_record_set_int(record,_contacts_phone_log.log_type,CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN);
1285 pDetails->SetCalllogType(CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN);
1286 res = contacts_db_update_record(record);
1287 AppLogDebug("contacts_db_update_record %d",res);
1293 CallLogManager::setCallLogViewbyID(CallLogType id)
\r
1295 __callLogViewbyID = id;
\r
1299 CallLogManager::getCallLogViewbyID()
\r
1301 return __callLogViewbyID;
\r
1304 contacts_phone_log_type_e
\r
1305 CallLogManager::GetCallLogType(CallLogType type)
\r
1307 contacts_phone_log_type_e callLogType = CONTACTS_PLOG_TYPE_MAX;
\r
1310 case CALL_LOG_TYPE_VOICE_INCOMING:
\r
1311 callLogType = CONTACTS_PLOG_TYPE_VOICE_INCOMMING;
\r
1314 case CALL_LOG_TYPE_VOICE_OUTGOING:
\r
1315 callLogType = CONTACTS_PLOG_TYPE_VOICE_OUTGOING;
\r
1318 case CALL_LOG_TYPE_VOICE_MISSED:
\r
1319 callLogType = CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN;
\r
1322 case CALL_LOG_TYPE_VOICE_MISSED_UNSEEN:
\r
1323 callLogType = CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN;
\r
1326 case CALL_LOG_TYPE_VOICE_REJECTED:
\r
1327 callLogType = CONTACTS_PLOG_TYPE_VOICE_REJECT;
\r
1330 case CALL_LOG_TYPE_VOICE_BLOCKED:
\r
1331 callLogType = CONTACTS_PLOG_TYPE_VOICE_BLOCKED;
\r
1338 return callLogType;
\r
1341 GroupItemClass::GroupItemClass()
\r
1346 GroupItemClass::~GroupItemClass()
\r
1355 GroupItemClass::SetTitleText(String titleText)
\r
1357 __titleText = titleText;
\r
1361 GroupItemClass::SetLogData(ArrayList* pData)
\r
1367 GroupItemClass::GetTitleText(void)
\r
1369 return __titleText;
\r
1373 GroupItemClass::GetLogData(void)
\r