From 9adc0af2f1f29d61f74c5945f04a82812059ee4c Mon Sep 17 00:00:00 2001 From: Igor Olshevskyi Date: Wed, 7 Jun 2017 08:58:40 +0300 Subject: [PATCH] TizenRefApp-8673 [Call UI] Implement ContactInfoProvider Change-Id: I11c6fe251559ba16c3dd87bf4eb65809d1009aa7 --- src/model/ActiveCall.cpp | 4 +- src/model/CallInfo.cpp | 31 +++-- src/model/CallInfo.h | 11 +- src/model/CallManager.cpp | 12 ++ src/model/CallManager.h | 2 + src/model/ConferenceCallInfo.cpp | 26 ++-- src/model/ConferenceCallInfo.h | 7 +- src/model/ContactInfo.cpp | 100 ++------------- src/model/ContactInfo.h | 18 ++- src/model/ContactInfoProvider.cpp | 195 ++++++++++++++++++++++++++++++ src/model/ContactInfoProvider.h | 42 +++++++ src/model/HeldCall.cpp | 4 +- src/model/IncomingCall.cpp | 4 +- src/model/SoundManager.cpp | 7 +- src/model/implTypes.h | 2 + src/types.cpp | 1 + tizen-manifest.xml | 9 +- 17 files changed, 343 insertions(+), 132 deletions(-) create mode 100644 src/model/ContactInfoProvider.cpp create mode 100644 src/model/ContactInfoProvider.h diff --git a/src/model/ActiveCall.cpp b/src/model/ActiveCall.cpp index f945ed8..ba4bbdf 100644 --- a/src/model/ActiveCall.cpp +++ b/src/model/ActiveCall.cpp @@ -55,7 +55,9 @@ namespace callui { Result ActiveCall::prepare(cm_call_data_h callData) { - m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData); + m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), + callData, + m_cm->getContactInfoProvider()); if (!m_callInfo) { LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!"); } diff --git a/src/model/CallInfo.cpp b/src/model/CallInfo.cpp index 2119de3..3a52533 100644 --- a/src/model/CallInfo.cpp +++ b/src/model/CallInfo.cpp @@ -21,8 +21,9 @@ #include #include -#include "ContactInfo.h" #include "CallClient.h" +#include "ContactInfoProvider.h" +#include "ContactInfo.h" #include "ConferenceCallInfo.h" #include "common.h" @@ -76,7 +77,9 @@ namespace callui { { } - CallInfoSRef CallInfo::newInstance(CallClient &client, cm_call_data_h callData) + CallInfoSRef CallInfo::newInstance(CallClient &client, + cm_call_data_h callData, + ContactInfoProviderSRef callInfoProvider) { if (!client) { LOG_RETURN_VALUE(RES_FAIL, {}, "client is NULL"); @@ -87,11 +90,16 @@ namespace callui { } auto result = makeShared(); - FAIL_RETURN_VALUE(result->prepare(client, callData), {}, "result->prepare() failed!"); + FAIL_RETURN_VALUE(result->prepare(client, + callData, + callInfoProvider), + {}, "result->prepare() failed!"); return result; } - Result CallInfo::prepare(CallClient &client, cm_call_data_h callData) + Result CallInfo::prepare(CallClient &client, + cm_call_data_h callData, + ContactInfoProviderSRef callInfoProvider) { Result res = convertCMResult( cm_call_data_get_call_id(callData, &m_callId)); @@ -132,10 +140,10 @@ namespace callui { cm_call_data_get_person_id(callData, &personId)); FAIL_RETURN(res, "cm_call_data_get_person_id() failed!"); - if (personId >= 0) { - m_contactInfo = ContactInfo::newInstance(personId); + if (personId >= 0 && callInfoProvider) { + m_contactInfo = callInfoProvider->createContactInfo(personId); if (!m_contactInfo) { - LOG_RETURN(RES_FAIL, "ContactInfo::newInstance() failed!"); + LOG_RETURN(RES_FAIL, "createContactInfo() failed!"); } } @@ -143,14 +151,15 @@ namespace callui { FAIL_RETURN(res, "cm_call_data_get_call_member_count() failed!"); if (m_confMemberCount > 1) { - res = initConferenceCallInfoList(client); + res = initConferenceCallInfoList(client, callInfoProvider); FAIL_RETURN(res, "initConferenceCallInfoList() failed!"); } return RES_OK; } - Result CallInfo::initConferenceCallInfoList(CallClient &client) + Result CallInfo::initConferenceCallInfoList(CallClient &client, + ContactInfoProviderSRef callInfoProvider) { // XXX: must be initialized with nullptr. If not an there is no conference calls // cm_get_conference_callList return CM_ERROR_NONE and pointer will be not changed. @@ -162,7 +171,9 @@ namespace callui { res = RES_OK; GSList *l = callList; for (; l != nullptr; l = g_slist_next(l)) { - auto confCallInfo = ConferenceCallInfo::newInstance(static_cast(l->data)); + auto confCallInfo = ConferenceCallInfo::newInstance( + static_cast(l->data), + callInfoProvider); if (!confCallInfo) { LOG_BREAK(res = RES_OUT_OF_MEMORY, "ConferenceCallInfo::newInstance() failed!"); } diff --git a/src/model/CallInfo.h b/src/model/CallInfo.h index 5a0d57e..835f8e1 100644 --- a/src/model/CallInfo.h +++ b/src/model/CallInfo.h @@ -27,7 +27,9 @@ namespace callui { class CallInfo final : public ICallInfo { public: - static CallInfoSRef newInstance(CallClient &client, cm_call_data_h callData); + static CallInfoSRef newInstance(CallClient &client, + cm_call_data_h callData, + ContactInfoProviderSRef callInfoProvider); virtual ~CallInfo(); // ICallInfo @@ -47,8 +49,11 @@ namespace callui { friend class ucl::RefCountObj; CallInfo(); - ucl::Result prepare(CallClient &client, cm_call_data_h callData); - ucl::Result initConferenceCallInfoList(CallClient &client); + ucl::Result prepare(CallClient &client, + cm_call_data_h callData, + ContactInfoProviderSRef callInfoProvider); + ucl::Result initConferenceCallInfoList(CallClient &client, + ContactInfoProviderSRef callInfoProvider); private: unsigned int m_callId; diff --git a/src/model/CallManager.cpp b/src/model/CallManager.cpp index df9089c..c3de082 100644 --- a/src/model/CallManager.cpp +++ b/src/model/CallManager.cpp @@ -25,6 +25,8 @@ #include "HeldCall.h" #include "EndCall.h" +#include "ContactInfoProvider.h" + #include "CallInfo.h" #include "ConferenceCallInfo.h" @@ -67,6 +69,11 @@ namespace callui { Result CallManager::prepare() { + m_contactInfoProvider = ContactInfoProvider::newInstance(); + if (!m_contactInfoProvider) { + ELOG("ContactInfoProvider::newInstance() failed"); + } + FAIL_RETURN(initCalls(), "initCalls() failed!"); FAIL_RETURN(convertCMResult( @@ -214,6 +221,11 @@ namespace callui { return endCall((*iter)->getCallId(), CallReleaseType::BY_CALL_HANDLE); } + ContactInfoProviderSRef CallManager::getContactInfoProvider() + { + return m_contactInfoProvider; + } + RejectMsgProviderSRef CallManager::getRejectMsgProvider() { if (!m_rejectMsgProvider) { diff --git a/src/model/CallManager.h b/src/model/CallManager.h index c1b24f5..b4412ba 100644 --- a/src/model/CallManager.h +++ b/src/model/CallManager.h @@ -39,6 +39,7 @@ namespace callui { ucl::Result endCall(unsigned int callId, CallReleaseType type); ucl::Result splitCalls(CallInfoSRef callInfo, const IConferenceCallInfoSCRef &confCallInfo); + ContactInfoProviderSRef getContactInfoProvider(); RejectMsgProviderSRef getRejectMsgProvider(); ucl::Result processOutgoingCall(const std::string &telNum); @@ -79,6 +80,7 @@ namespace callui { private: CallClientSRef m_callClient; RejectMsgProviderSRef m_rejectMsgProvider; + ContactInfoProviderSRef m_contactInfoProvider; ICallManagerListenerWRef m_listener; IncomingCallSRef m_incomingCall; ActiveCallSRef m_activeCall; diff --git a/src/model/ConferenceCallInfo.cpp b/src/model/ConferenceCallInfo.cpp index 669f24f..3d3ebf2 100644 --- a/src/model/ConferenceCallInfo.cpp +++ b/src/model/ConferenceCallInfo.cpp @@ -18,6 +18,7 @@ #include +#include "ContactInfoProvider.h" #include "ContactInfo.h" #include "common.h" @@ -35,37 +36,44 @@ namespace callui { { } - ConferenceCallInfoSRef ConferenceCallInfo::newInstance(cm_conf_call_data_t *confCallData) + ConferenceCallInfoSRef ConferenceCallInfo::newInstance( + cm_conf_call_data_t *confCallData, + ContactInfoProviderSRef callInfoProvider) { if (!confCallData) { LOG_RETURN_VALUE(RES_FAIL, {}, "callData is NULL"); } auto result = makeShared(); - FAIL_RETURN_VALUE(result->prepare(confCallData), {}, "result->prepare() failed!"); + FAIL_RETURN_VALUE(result->prepare(confCallData, callInfoProvider), {}, "result->prepare() failed!"); return result; } - Result ConferenceCallInfo::prepare(cm_conf_call_data_t *confCallData) + Result ConferenceCallInfo::prepare( + cm_conf_call_data_t *confCallData, + ContactInfoProviderSRef callInfoProvider) { - Result res = convertCMResult(cm_conf_call_data_get_call_id(confCallData, &m_callId)); + Result res = convertCMResult( + cm_conf_call_data_get_call_id(confCallData, &m_callId)); FAIL_RETURN(res, "cm_conf_call_data_get_call_id() failed!"); char *number = nullptr; - res = convertCMResult(cm_conf_call_data_get_call_number(confCallData, &number)); + res = convertCMResult( + cm_conf_call_data_get_call_number(confCallData, &number)); FAIL_RETURN(res, "cm_conf_call_data_get_call_number() failed!"); m_phoneNum = nz(number); // XXX: According to documentation it must be free, but it leads to crash // free(number); int personId = -1; - res = convertCMResult(cm_conf_call_data_get_person_id(confCallData, &personId)); + res = convertCMResult( + cm_conf_call_data_get_person_id(confCallData, &personId)); FAIL_RETURN(res, "cm_conf_call_data_get_person_id() failed!"); - if (personId >= 0) { - m_contactInfo = ContactInfo::newInstance(personId); + if (personId >= 0 && callInfoProvider) { + m_contactInfo = callInfoProvider->createContactInfo(personId); if (!m_contactInfo) { - LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "ContactInfo::newInstance() failed!"); + LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "createContactInfo() failed!"); } } return RES_OK; diff --git a/src/model/ConferenceCallInfo.h b/src/model/ConferenceCallInfo.h index 374c46f..b3b0fd9 100644 --- a/src/model/ConferenceCallInfo.h +++ b/src/model/ConferenceCallInfo.h @@ -27,7 +27,9 @@ namespace callui { class ConferenceCallInfo final : public IConferenceCallInfo { public: - static ConferenceCallInfoSRef newInstance(cm_conf_call_data_t *confCallData); + static ConferenceCallInfoSRef newInstance( + cm_conf_call_data_t *confCallData, + ContactInfoProviderSRef callInfoProvider); virtual ~ConferenceCallInfo(); // IConferenceCallInfo @@ -40,7 +42,8 @@ namespace callui { friend class ucl::RefCountObj; ConferenceCallInfo(); - ucl::Result prepare(cm_conf_call_data_t *confCallData); + ucl::Result prepare(cm_conf_call_data_t *confCallData, + ContactInfoProviderSRef callInfoProvider); private: unsigned int m_callId; std::string m_phoneNum; diff --git a/src/model/ContactInfo.cpp b/src/model/ContactInfo.cpp index 5dc6a8a..2724f57 100644 --- a/src/model/ContactInfo.cpp +++ b/src/model/ContactInfo.cpp @@ -15,7 +15,6 @@ */ #include -#include #include "ContactInfo.h" @@ -25,9 +24,14 @@ namespace callui { using namespace ucl; - ContactInfo::ContactInfo(int personId): + ContactInfo::ContactInfo(int personId, + const std::string &name, + const std::string &imagePath, + ContactNameSourceType type): m_personId(personId), - m_nameSource(ContactNameSourceType::INVALID) + m_name(name), + m_imagePath(imagePath), + m_nameSource(type) { } @@ -35,92 +39,12 @@ namespace callui { { } - ContactInfoSRef ContactInfo::newInstance(int personId) + ContactInfoSRef ContactInfo::newInstance(int personId, + const std::string &name, + const std::string &imagePath, + ContactNameSourceType type) { - auto result = makeShared(personId); - FAIL_RETURN_VALUE(result->prepare(), {}, "result->prepare() failed!"); - return result; - } - - inline ContactNameSourceType ContactInfo::convertContactNameSourceType(contacts_display_name_source_type_e cdbType) - { - switch (cdbType) { - case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_INVALID: return ContactNameSourceType::INVALID; - case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL: return ContactNameSourceType::EMAIL; - case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER: return ContactNameSourceType::NUMBER; - case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME: return ContactNameSourceType::NICKNAME; - case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY: return ContactNameSourceType::COMPANY; - case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME: return ContactNameSourceType::NAME; - default: - return ContactNameSourceType::INVALID; - } - } - - Result ContactInfo::prepare() - { - DLOG("Contact exists with index [%d]", m_personId); - - contacts_filter_h filter = nullptr; - contacts_list_h list = nullptr; - contacts_query_h query = nullptr; - contacts_record_h record = nullptr; - - contacts_filter_create(_contacts_contact._uri, &filter); - contacts_filter_add_int(filter, _contacts_contact.person_id, CONTACTS_MATCH_EQUAL, m_personId); - contacts_query_create(_contacts_contact._uri, &query); - contacts_query_set_filter(query, filter); - - contacts_db_get_records_with_query(query, 0, 1, &list); - contacts_list_get_current_record_p(list, &record); - - if (record) { - char *name = nullptr; - contacts_record_get_str_p(record, _contacts_contact.display_name, &name); - m_name = nz(name); - - int type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_INVALID; - contacts_record_get_int(record, _contacts_contact.display_source_type, &type); - m_nameSource = convertContactNameSourceType(static_cast(type)); - - int count = 0; - contacts_record_get_child_record_count(record, _contacts_contact.image, &count); - if (count > 0) { - char *imgPath = nullptr; - contacts_record_h childRecord = NULL; - contacts_record_get_child_record_at_p(record, _contacts_contact.image, 0, &childRecord); - contacts_record_get_str_p(childRecord, _contacts_image.path, &imgPath); - m_imagePath = nz(imgPath); - } - } - contacts_list_destroy(list, true); - contacts_filter_destroy(filter); - contacts_query_destroy(query); - - DLOG("PersonID [%d]", m_personId); - DLOG("Contact name [%s]", m_name.c_str()); - DLOG("Contact image path [%s]", m_imagePath.c_str()); - - return RES_OK; - } - - int ContactInfo::getPersonId() const - { - return m_personId; - } - - void ContactInfo::setName(const std::string &name) - { - m_name = name; - } - - void ContactInfo::setImagePath(const std::string &imagePath) - { - m_imagePath = imagePath; - } - - void ContactInfo::setContactNameSourceType(ContactNameSourceType type) - { - m_nameSource = type; + return makeShared(personId, name, imagePath, type); } const std::string &ContactInfo::getName() const diff --git a/src/model/ContactInfo.h b/src/model/ContactInfo.h index cd62571..b899a8a 100644 --- a/src/model/ContactInfo.h +++ b/src/model/ContactInfo.h @@ -27,14 +27,12 @@ namespace callui { class ContactInfo final : public IContactInfo { public: - static ContactInfoSRef newInstance(int personId); + static ContactInfoSRef newInstance(int personId, + const std::string &name, + const std::string &imagePath, + ContactNameSourceType type); virtual ~ContactInfo(); - int getPersonId() const; - void setName(const std::string &name); - void setImagePath(const std::string &imagePath); - void setContactNameSourceType(ContactNameSourceType type); - // IContactInfo virtual const std::string &getName() const override final; @@ -43,10 +41,10 @@ namespace callui { private: friend class ucl::RefCountObj; - ContactInfo(int personId); - - ucl::Result prepare(); - ContactNameSourceType convertContactNameSourceType(contacts_display_name_source_type_e cdbType); + ContactInfo(int personId, + const std::string &name, + const std::string &imagePath, + ContactNameSourceType type); private: int m_personId; diff --git a/src/model/ContactInfoProvider.cpp b/src/model/ContactInfoProvider.cpp new file mode 100644 index 0000000..3cffba2 --- /dev/null +++ b/src/model/ContactInfoProvider.cpp @@ -0,0 +1,195 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ContactInfoProvider.h" + +#include +#include +#include + +#include "ContactInfo.h" + +#include "common.h" + +namespace callui { namespace { namespace impl { + + using namespace ucl; + + inline ContactNameSourceType convertContactNameSourceType(contacts_display_name_source_type_e cdbType) + { + switch (cdbType) { + case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_INVALID: return ContactNameSourceType::INVALID; + case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL: return ContactNameSourceType::EMAIL; + case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER: return ContactNameSourceType::NUMBER; + case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NICKNAME: return ContactNameSourceType::NICKNAME; + case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_COMPANY: return ContactNameSourceType::COMPANY; + case CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NAME: return ContactNameSourceType::NAME; + default: + return ContactNameSourceType::INVALID; + } + } + +}}} + +namespace callui { + + using namespace ucl; + + ContactInfoProvider::ContactInfoProvider(): + m_isConnected(false) + { + + } + + ContactInfoProvider::~ContactInfoProvider() + { + if (m_isConnected) { + contacts_disconnect(); + } + } + + ContactInfoProviderSRef ContactInfoProvider::newInstance() + { + auto result = makeShared(); + FAIL_RETURN_VALUE(result->prepare(), {}, "result->prepare() failed!"); + return result; + } + + Result ContactInfoProvider::prepare() + { + auto res = contacts_connect(); + if (res != CONTACTS_ERROR_NONE) { + LOG_RETURN(RES_FAIL, "contacts_connect() failed! res[%d] msg[%s]", + res, get_error_message(res)); + } + m_isConnected = true; + + return RES_OK; + } + + ContactInfoSRef ContactInfoProvider::createContactInfo(int contactId) + { + DLOG("Try create contact info for ID [%d]", contactId); + + std::string contactName; + std::string contactImagePath; + ContactNameSourceType contactNameSource; + + contacts_filter_h filter = nullptr; + contacts_list_h list = nullptr; + contacts_query_h query = nullptr; + contacts_record_h record = nullptr; + + int ret = CONTACTS_ERROR_NONE; + do { + ret = contacts_filter_create(_contacts_contact._uri, + &filter); + if (ret != CONTACTS_ERROR_NONE) { + LOG_BREAK(RES_FAIL, + "contacts_filter_create() failed!" + "res[%d] res_msg[%s]", + ret, get_error_message(ret)); + } + + ret = contacts_filter_add_int(filter, + _contacts_contact.person_id, + CONTACTS_MATCH_EQUAL, contactId); + if (ret != CONTACTS_ERROR_NONE) { + LOG_BREAK(RES_FAIL, + "contacts_filter_add_int() failed!" + "res[%d] res_msg[%s]", + ret, get_error_message(ret)); + } + + ret = contacts_query_create(_contacts_contact._uri, &query); + if (ret != CONTACTS_ERROR_NONE) { + LOG_BREAK(RES_FAIL, + "contacts_query_create() failed!" + "res[%d] res_msg[%s]", + ret, get_error_message(ret)); + } + + ret = contacts_query_set_filter(query, filter); + if (ret != CONTACTS_ERROR_NONE) { + LOG_BREAK(RES_FAIL, + "contacts_query_set_filter() failed!" + "res[%d] res_msg[%s]", + ret, get_error_message(ret)); + } + + ret = contacts_db_get_records_with_query(query, 0, 1, &list); + if (ret != CONTACTS_ERROR_NONE) { + LOG_BREAK(RES_FAIL, + "contacts_db_get_records_with_query() failed!" + "res[%d] res_msg[%s]", + ret, get_error_message(ret)); + } + + ret = contacts_list_get_current_record_p(list, &record); + if (ret != CONTACTS_ERROR_NONE) { + LOG_BREAK(RES_FAIL, + "contacts_list_get_current_record_p() failed!" + "res[%d] res_msg[%s]", + ret, get_error_message(ret)); + } + + if (record) { + char *name = nullptr; + contacts_record_get_str_p(record, + _contacts_contact.display_name, &name); + contactName = nz(name); + + int type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_INVALID; + contacts_record_get_int(record, + _contacts_contact.display_source_type, &type); + contactNameSource = impl::convertContactNameSourceType( + static_cast(type)); + + int count = 0; + contacts_record_get_child_record_count(record, + _contacts_contact.image, &count); + if (count > 0) { + char *imgPath = nullptr; + contacts_record_h childRecord = NULL; + contacts_record_get_child_record_at_p(record, + _contacts_contact.image, 0, &childRecord); + contacts_record_get_str_p(childRecord, + _contacts_image.path, &imgPath); + contactImagePath = nz(imgPath); + } + } + } while (false); + + contacts_list_destroy(list, true); + contacts_filter_destroy(filter); + contacts_query_destroy(query); + + if (ret != CONTACTS_ERROR_NONE) { + return {}; + } + + DLOG("Contact ID [%d]", contactId); + DLOG("Contact name [%s]", contactName.c_str()); + DLOG("Contact image path [%s]", contactImagePath.c_str()); + + return ContactInfo::newInstance(contactId, + contactName, + contactImagePath, + contactNameSource); + } + +} + diff --git a/src/model/ContactInfoProvider.h b/src/model/ContactInfoProvider.h new file mode 100644 index 0000000..627d680 --- /dev/null +++ b/src/model/ContactInfoProvider.h @@ -0,0 +1,42 @@ +/* + * Copyright 2017 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CALLUI_MODEL_CONTACT_INFO_PROVIDER_H__ +#define __CALLUI_MODEL_CONTACT_INFO_PROVIDER_H__ + +#include "implTypes.h" + +namespace callui { + + class ContactInfoProvider { + public: + static ContactInfoProviderSRef newInstance(); + virtual ~ContactInfoProvider(); + + ContactInfoSRef createContactInfo(int contactId); + + private: + friend class ucl::RefCountObj; + ContactInfoProvider(); + + ucl::Result prepare(); + + private: + bool m_isConnected; + }; +} + +#endif // __CALLUI_MODEL_CONTACT_INFO_PROVIDER_H__ diff --git a/src/model/HeldCall.cpp b/src/model/HeldCall.cpp index 89cbc53..839bd62 100644 --- a/src/model/HeldCall.cpp +++ b/src/model/HeldCall.cpp @@ -53,7 +53,9 @@ namespace callui { Result HeldCall::prepare(cm_call_data_h callData) { - m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData); + m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), + callData, + m_cm->getContactInfoProvider()); if (!m_callInfo) { LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!"); } diff --git a/src/model/IncomingCall.cpp b/src/model/IncomingCall.cpp index fc51eea..9e1720a 100644 --- a/src/model/IncomingCall.cpp +++ b/src/model/IncomingCall.cpp @@ -55,7 +55,9 @@ namespace callui { Result IncomingCall::prepare(cm_call_data_h callData) { - m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), callData); + m_callInfo = CallInfo::newInstance(m_cm->getCallClient(), + callData, + m_cm->getContactInfoProvider()); if (!m_callInfo) { LOG_RETURN_VALUE(RES_FAIL, RES_FAIL, "CallInfo::newInstance() failed!"); } diff --git a/src/model/SoundManager.cpp b/src/model/SoundManager.cpp index 491ea9a..e3de217 100644 --- a/src/model/SoundManager.cpp +++ b/src/model/SoundManager.cpp @@ -45,13 +45,14 @@ namespace callui { namespace { namespace impl { ret = sound_manager_get_next_device(deviceList, &device); if (ret == SOUND_MANAGER_ERROR_NO_DATA) { res = RES_OK; - LOG_BREAK(res, "No more device to check"); + ILOG("No more device to check"); + break; } else if (ret != SOUND_MANAGER_ERROR_NONE) { - LOG_BREAK(res, "sound_manager_get_next_device() failed. [%d][%s]", + UCL_FAIL_BREAK(res, "sound_manager_get_next_device() failed. [%d][%s]", ret, get_error_message(ret)); } if (!device) { - LOG_BREAK(res, "device is NULL"); + UCL_FAIL_BREAK(res, "device is NULL"); } sound_manager_get_device_type(device, &type); if (searchType == type) { diff --git a/src/model/implTypes.h b/src/model/implTypes.h index a26c7a8..9b0ec17 100644 --- a/src/model/implTypes.h +++ b/src/model/implTypes.h @@ -67,6 +67,8 @@ namespace callui { UCL_DECLARE_REF_ALIASES(SimSlotStateSource); UCL_DECLARE_REF_ALIASES(HdVoiceStateSource); + UCL_DECLARE_REF_ALIASES(ContactInfoProvider); + UCL_DECLARE_REF_ALIASES(BluetoothVolume); using AudioStateEvent = ucl::Event; diff --git a/src/types.cpp b/src/types.cpp index 5b3d286..08bd058 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -24,6 +24,7 @@ ucl::ResultData getUCLResultData(const ucl::Result result) case callui::RES_NOT_REGISTERED: return {"RES_NOT_REGISTERED", DLOG_FATAL}; case callui::RES_ALREADY_REGISTERED: return {"RES_ALREADY_REGISTERED", DLOG_FATAL}; case callui::RES_OPERATION_FAILED: return {"RES_OPERATION_FAILED", DLOG_FATAL}; + case callui::RES_NOT_CONNECTED: return {"RES_NOT_CONNECTED", DLOG_FATAL}; default: return ucl::getResultData(result); } diff --git a/tizen-manifest.xml b/tizen-manifest.xml index 295e338..6a76d4d 100644 --- a/tizen-manifest.xml +++ b/tizen-manifest.xml @@ -13,16 +13,17 @@ http://tizen.org/privilege/telephony - http://tizen.org/privilege/telephony.admin - http://tizen.org/privilege/appmanager.launch + http://tizen.org/privilege/keygrab http://tizen.org/privilege/window.priority.set http://tizen.org/privilege/systemsettings.admin http://tizen.org/privilege/contact.read + http://tizen.org/privilege/display + http://tizen.org/privilege/telephony.admin + http://tizen.org/privilege/appmanager.launch http://tizen.org/privilege/volume.set http://tizen.org/privilege/message.write http://tizen.org/privilege/notification - http://tizen.org/privilege/display http://tizen.org/privilege/message.read - http://tizen.org/privilege/keygrab + http://tizen.org/privilege/callhistory.read -- 2.34.1