2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
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 PhnSettingsManager.cpp
19 * @brief Setting Manager class
24 #include <FBaseColIList.h>
26 #include "vconf-internal-ciss-keys.h"
27 #include "PhnSettingsManager.h"
30 using namespace Tizen::App;
31 using namespace Tizen::Base;
32 using namespace Tizen::Base::Collection;
33 using namespace Tizen::Io;
34 using namespace Tizen::Social;
36 SettingsManager* SettingsManager::__pInstance = null;
38 SettingsManager::SettingsManager(void)
40 , __pSettingsEventListener(null)
41 , __pCallSettingDataService(null)
46 SettingsManager::~SettingsManager(void)
48 //De-initialize the TAPI Library
49 if(__pTapiHandle != null)
51 tel_deinit(__pTapiHandle);
53 if (__pCallSettingDataService)
55 __pCallSettingDataService->CloseDatabase();
56 delete __pCallSettingDataService;
58 if (__pSettingsEventListener != null)
60 delete __pSettingsEventListener;
64 void SettingsManager::CreateInstance(void)
66 __pInstance = new (std::nothrow) SettingsManager();
67 result r = __pInstance->Construct();
74 std::atexit(&(SettingsManager::DestroyInstance));
77 void SettingsManager::DestroyInstance(void)
83 SettingsManager::Construct(void)
85 __pCallSettingDataService = CallSettingDataService::CreateInstance();
86 result r = __pCallSettingDataService->OpenDatabase();
91 //initialize telephony
92 __pTapiHandle = tel_init(null);
93 SetCallState(CALL_STATE__CALL_OFF);
98 SettingsManager::GetInstance(void)
100 if (__pInstance == null)
108 SettingsManager::AddSettingEventListener(ISettingsEventListener* pSettingsEventListener)
110 if (__pSettingsEventListener == null)
112 __pSettingsEventListener = new (std::nothrow) ArrayListT<ISettingsEventListener*>();
115 //Add to listeners, if not already in list.
116 if ( (pSettingsEventListener != null)
117 && !(__pSettingsEventListener->Contains(pSettingsEventListener)) )
119 __pSettingsEventListener->Add(pSettingsEventListener);
124 SettingsManager::RemoveSettingEventListener(ISettingsEventListener* pSettingsEventListener)
126 if ((__pSettingsEventListener != null) && (pSettingsEventListener != null)
127 && __pSettingsEventListener->Contains(pSettingsEventListener))
129 __pSettingsEventListener->Remove(pSettingsEventListener);
134 SettingsManager::NotifyForwardingEventListeners(ForwardResponseType responseType, bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool isCallForwardActivated, int noReplyWaitTime)
136 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
137 result r = E_FAILURE;
138 if (__pSettingsEventListener != null)
140 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
141 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
143 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
145 ISettingsEventListener* pListener;
146 r = pListenerEnum->GetCurrent(pListener);
147 //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
148 if (responseType == SET_CALLFORWARD_RESPONSE)
150 pListener->HandleSetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
154 pListener->HandleGetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
161 SettingsManager::NotifyBarringEventListeners(BarringResponseType responseType, bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated)
163 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
164 result r = E_FAILURE;
165 if (__pSettingsEventListener != null)
167 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
168 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
170 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
172 ISettingsEventListener* pListener;
173 r = pListenerEnum->GetCurrent(pListener);
174 //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
175 if (responseType == SET_CALLBARRING_RESPONSE)
177 pListener->HandleSetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
181 pListener->HandleGetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
188 SettingsManager::NotifyWaitingEventListeners(WaitingResponseType responseType, bool isCallSuccessful, bool isCallWaitingActivated)
190 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
191 result r = E_FAILURE;
192 if (__pSettingsEventListener != null)
194 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
195 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
197 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
199 ISettingsEventListener* pListener;
200 r = pListenerEnum->GetCurrent(pListener);
201 //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
202 if (responseType == SET_CALLWAITING_RESPONSE)
204 pListener->HandleSetCallWaitingResponse(isCallSuccessful, isCallWaitingActivated);
208 pListener->HandleGetCallWaitingResponse(isCallSuccessful, isCallWaitingActivated);
211 delete pListenerEnum;
216 SettingsManager::SetCallForwardStatus(const String& phoneNumber, CallForwardCondition callFwdCondition, bool activateFwding, int noReplyTime)
218 int errorCode = ERROR_NONE;
219 TryReturn(__pTapiHandle != null, ERROR_TAPI_INIT_FAILED, "Telephony initialization failed");
221 TelSsForwardInfo_t forwardInfo;
222 memset(&forwardInfo, 0, sizeof(TelSsForwardInfo_t));
223 forwardInfo.Class = TAPI_SS_CLASS_VOICE;
224 if (activateFwding == true)
226 forwardInfo.Mode = TAPI_SS_CF_MODE_REGISTRATION_EV;
230 forwardInfo.Mode = TAPI_SS_CF_MODE_ERASURE_EV;
232 const wchar_t* pContact = phoneNumber.GetPointer();
233 int len = phoneNumber.GetLength()+1;
234 char* pNumber = new (std::nothrow) char[len];
235 wcstombs(pNumber, pContact, len);
236 strncpy(forwardInfo.szPhoneNumber, pNumber, len);
239 switch (callFwdCondition)
241 case CALL_FORWARD_ALL:
243 forwardInfo.Condition = TAPI_SS_CF_WHEN_CFU;
247 case CALL_FORWARD_BUSY:
249 forwardInfo.Condition = TAPI_SS_CF_WHEN_CFB;
253 case CALL_FORWARD_NO_REPLY:
255 forwardInfo.Condition = TAPI_SS_CF_WHEN_CFNRy;
256 forwardInfo.NoReplyConditionTimer = TelSsNoReplyTime_t(noReplyTime);
260 case CALL_FORWARD_NOT_REACHABLE:
262 forwardInfo.Condition = TAPI_SS_CF_WHEN_CFNRc;
268 return ERROR_INVALID_INPUT;
273 int retStatus = tel_set_ss_forward(__pTapiHandle, &forwardInfo, &HandleSetForwardResponse, this);
274 if (retStatus != TAPI_API_SUCCESS)
276 errorCode = ERROR_TAPI_ERROR;
282 SettingsManager::HandleSetForwardResponse(TapiHandle* pHandle, int result, void* pData, void* pUserData)
284 TelSsForwardResp_t* pResponse = (TelSsForwardResp_t*) pData;
285 SettingsManager* pSettingsManager = (SettingsManager*) pUserData;
286 if (pResponse != null)
288 int count = pResponse->record_num;
289 for (int index = 0; index < count; index++)
291 CallForwardCondition callFwdCondition = CALL_FORWARD_ALL;
292 bool isActivated = false;
293 int noReplyWaitTime = 0;
294 //Check if status is "Active or Quiescent" and forwarding number is available
295 if ((pResponse->record[index].Status == TAPI_SS_STATUS_ACTIVE
296 || pResponse->record[index].Status == TAPI_SS_STATUS_QUIESCENT
297 || pResponse->record[index].Status == TAPI_SS_STATUS_REGISTERED)
298 && (pResponse->record[index].bCallForwardingNumberPresent != 0))
302 switch (pResponse->record[index].ForwardCondition)
304 case TAPI_SS_CF_WHEN_CFU:
306 callFwdCondition = CALL_FORWARD_ALL;
310 case TAPI_SS_CF_WHEN_CFB:
312 callFwdCondition = CALL_FORWARD_BUSY;
316 case TAPI_SS_CF_WHEN_CFNRy:
318 callFwdCondition = CALL_FORWARD_NO_REPLY;
320 noReplyWaitTime = (pResponse->record[index].NoReplyWaitTime);
324 case TAPI_SS_CF_WHEN_CFNRc:
326 callFwdCondition = CALL_FORWARD_NOT_REACHABLE;
333 //fetch forwarding number
334 char* pTmpNumberPtr = new (std::nothrow) char[TAPI_CALL_DIALDIGIT_LEN_MAX];
335 strncpy(pTmpNumberPtr, (char*) (pResponse->record[index].szCallForwardingNumber), TAPI_CALL_DIALDIGIT_LEN_MAX);
336 String callFwdNumber(pTmpNumberPtr);
337 delete []pTmpNumberPtr;
338 pTmpNumberPtr = null;
340 //notify event listeners
341 pSettingsManager->NotifyForwardingEventListeners(SET_CALLFORWARD_RESPONSE,(result == TAPI_SS_SUCCESS),callFwdCondition, callFwdNumber, isActivated, noReplyWaitTime);
347 SettingsManager::GetCallForwardStatus(CallForwardCondition callFwdCondition)
349 int errorCode = ERROR_NONE;
350 TryReturn(__pTapiHandle != null,ERROR_TAPI_INIT_FAILED,"Telephony initialization failed");
352 TelSsForwardWhen_t condition;
353 switch (callFwdCondition)
355 case CALL_FORWARD_ALL:
357 condition = TAPI_SS_CF_WHEN_CFU;
361 case CALL_FORWARD_BUSY:
363 condition = TAPI_SS_CF_WHEN_CFB;
367 case CALL_FORWARD_NO_REPLY:
369 condition = TAPI_SS_CF_WHEN_CFNRy;
373 case CALL_FORWARD_NOT_REACHABLE:
375 condition = TAPI_SS_CF_WHEN_CFNRc;
381 return ERROR_INVALID_INPUT;
385 int retStatus = tel_get_ss_forward_status(__pTapiHandle, TAPI_SS_CLASS_VOICE, condition, &HandleGetForwardResponse, this);
386 if (retStatus != TAPI_API_SUCCESS)
388 errorCode = ERROR_TAPI_ERROR;
395 SettingsManager::HandleGetForwardResponse(TapiHandle* pHandle, int result, void* pData, void* pUserData)
397 TelSsForwardResp_t* pResponse = (TelSsForwardResp_t*) pData;
398 SettingsManager* pSettingsManager = (SettingsManager*) pUserData;
399 if (pResponse != null)
401 int count = pResponse->record_num;
402 for (int index = 0; index < count; index++)
404 CallForwardCondition callFwdCondition = CALL_FORWARD_ALL;
405 bool isActivated = false;
406 int noReplyWaitTime = 0;
407 //Check if status is "ACTIVE or QUIESCENT or REGISTERED" and forwarding number is available
408 if ((pResponse->record[index].Status == TAPI_SS_STATUS_ACTIVE
409 || pResponse->record[index].Status == TAPI_SS_STATUS_QUIESCENT
410 || pResponse->record[index].Status == TAPI_SS_STATUS_REGISTERED)
411 && (pResponse->record[index].bCallForwardingNumberPresent != 0))
415 switch (pResponse->record[index].ForwardCondition)
417 case TAPI_SS_CF_WHEN_CFU:
419 callFwdCondition = CALL_FORWARD_ALL;
423 case TAPI_SS_CF_WHEN_CFB:
425 callFwdCondition = CALL_FORWARD_BUSY;
429 case TAPI_SS_CF_WHEN_CFNRy:
431 callFwdCondition = CALL_FORWARD_NO_REPLY;
432 noReplyWaitTime = (pResponse->record[index].NoReplyWaitTime);
436 case TAPI_SS_CF_WHEN_CFNRc:
438 callFwdCondition = CALL_FORWARD_NOT_REACHABLE;
445 char* pTmpNumberPtr = new (std::nothrow) char[TAPI_CALL_DIALDIGIT_LEN_MAX];
446 strncpy(pTmpNumberPtr, (char*) (pResponse->record[index].szCallForwardingNumber), TAPI_CALL_DIALDIGIT_LEN_MAX);
447 String callFwdNumber(pTmpNumberPtr);
448 //notify event listeners
449 pSettingsManager->NotifyForwardingEventListeners(GET_CALLFORWARD_RESPONSE, (result == TAPI_SS_SUCCESS), callFwdCondition, callFwdNumber, isActivated, noReplyWaitTime);
450 delete []pTmpNumberPtr;
451 pTmpNumberPtr = null;
457 SettingsManager::SetCallBarringStatus(const String& password, CallBarringType callBarringType, bool activateBarring)
459 int errorCode = ERROR_NONE;
460 TryReturn(__pTapiHandle != null, ERROR_TAPI_INIT_FAILED, "Telephony initialization failed");
462 TelSsBarringInfo_t barringInfo;
463 memset(&barringInfo, 0, sizeof(TelSsBarringInfo_t));
464 barringInfo.Class = TAPI_SS_CLASS_VOICE;
465 if (activateBarring == true)
467 barringInfo.Mode = TAPI_SS_CB_MODE_ACTIVATE;
471 barringInfo.Mode = TAPI_SS_CB_MODE_DEACTIVATE;
473 const wchar_t* pContact = password.GetPointer();
474 int len = password.GetLength();
477 return ERROR_BARRING_PWD_TOO_LONG;
479 char* pNumber = new (std::nothrow) char[len];
480 wcstombs(pNumber, pContact, len);
481 strncpy(barringInfo.szPassword, pNumber, len);
484 switch (callBarringType)
486 case CALL_BARRING_ALL_OUTGOING:
488 barringInfo.Type = TAPI_SS_CB_TYPE_BAOC;
492 case CALL_BARRING_INTERNATIONAL_OUTGOING:
494 barringInfo.Type = TAPI_SS_CB_TYPE_BOIC;
498 case CALL_BARRING_INTERNATIONAL_EXCEPT_HOME:
500 barringInfo.Type = TAPI_SS_CB_TYPE_BOIC_NOT_HC;
504 case CALL_BARRING_ALL_INCOMING:
506 barringInfo.Type = TAPI_SS_CB_TYPE_BAIC;
510 case CALL_BARRING_INCOMING_ROAMING:
512 barringInfo.Type = TAPI_SS_CB_TYPE_BIC_ROAM;
518 return ERROR_INVALID_INPUT;
522 int retStatus = tel_set_ss_barring(__pTapiHandle, &barringInfo, &HandleSetBarringResponse, this);
523 if (retStatus != TAPI_API_SUCCESS)
525 errorCode = ERROR_TAPI_ERROR;
532 SettingsManager::HandleSetBarringResponse(TapiHandle* pHandle, int result, void* pData, void* pUserData)
534 TelSsBarringResp_t* pResponse = (TelSsBarringResp_t*) pData;
535 SettingsManager* pSettingsManager = (SettingsManager*) pUserData;
536 if (pResponse != null)
538 CallBarringType callBarringType = CALL_BARRING_ALL_OUTGOING;
539 bool isActivated = false;
540 int count = pResponse->record_num;
541 for (int index = 0; index < count; index++)
543 if (pResponse->record[index].Status == TAPI_SS_STATUS_ACTIVE)
547 switch (pResponse->record[index].Flavour)
549 case TAPI_SS_CB_TYPE_BAOC:
551 callBarringType = CALL_BARRING_ALL_OUTGOING;
555 case TAPI_SS_CB_TYPE_BOIC:
557 callBarringType = CALL_BARRING_INTERNATIONAL_OUTGOING;
561 case TAPI_SS_CB_TYPE_BOIC_NOT_HC:
563 callBarringType = CALL_BARRING_INTERNATIONAL_EXCEPT_HOME;
567 case TAPI_SS_CB_TYPE_BAIC:
569 callBarringType = CALL_BARRING_ALL_INCOMING;
573 case TAPI_SS_CB_TYPE_BIC_ROAM:
575 callBarringType = CALL_BARRING_INCOMING_ROAMING;
582 //notify event listeners
583 pSettingsManager->NotifyBarringEventListeners(SET_CALLBARRING_RESPONSE,(result == TAPI_SS_SUCCESS), callBarringType, isActivated);
589 SettingsManager::GetCallBarringStatus(CallBarringType callBarringType)
591 int errorCode = ERROR_NONE;
592 TryReturn(__pTapiHandle != null, ERROR_TAPI_INIT_FAILED, "Telephony initialization failed");
594 TelSsBarringType_t barringType;
595 switch (callBarringType)
597 case CALL_BARRING_ALL_OUTGOING:
599 barringType = TAPI_SS_CB_TYPE_BAOC;
603 case CALL_BARRING_INTERNATIONAL_OUTGOING:
605 barringType = TAPI_SS_CB_TYPE_BOIC;
609 case CALL_BARRING_INTERNATIONAL_EXCEPT_HOME:
611 barringType = TAPI_SS_CB_TYPE_BOIC_NOT_HC;
615 case CALL_BARRING_ALL_INCOMING:
617 barringType = TAPI_SS_CB_TYPE_BAIC;
621 case CALL_BARRING_INCOMING_ROAMING:
623 barringType = TAPI_SS_CB_TYPE_BIC_ROAM;
629 return ERROR_INVALID_INPUT;
633 int retStatus = tel_get_ss_barring_status(__pTapiHandle, TAPI_SS_CLASS_VOICE, barringType, &HandleGetBarringResponse, this);
634 if (retStatus != TAPI_API_SUCCESS)
636 errorCode = ERROR_TAPI_ERROR;
643 SettingsManager::HandleGetBarringResponse(TapiHandle* pHandle, int result, void* pData, void* pUserData)
645 TelSsBarringResp_t* pResponse = (TelSsBarringResp_t*) pData;
646 SettingsManager* pSettingsManager = (SettingsManager*) pUserData;
647 if (pResponse != null)
649 CallBarringType callBarringType = CALL_BARRING_ALL_OUTGOING;
650 bool isActivated = false;
651 int count = pResponse->record_num;
652 for (int index = 0; index < count; index++)
654 if (pResponse->record[index].Status == TAPI_SS_STATUS_ACTIVE)
658 switch (pResponse->record[index].Flavour)
660 case TAPI_SS_CB_TYPE_BAOC:
662 callBarringType = CALL_BARRING_ALL_OUTGOING;
666 case TAPI_SS_CB_TYPE_BOIC:
668 callBarringType = CALL_BARRING_INTERNATIONAL_OUTGOING;
672 case TAPI_SS_CB_TYPE_BOIC_NOT_HC:
674 callBarringType = CALL_BARRING_INTERNATIONAL_EXCEPT_HOME;
678 case TAPI_SS_CB_TYPE_BAIC:
680 callBarringType = CALL_BARRING_ALL_INCOMING;
684 case TAPI_SS_CB_TYPE_BIC_ROAM:
686 callBarringType = CALL_BARRING_INCOMING_ROAMING;
693 //notify event listeners
694 pSettingsManager->NotifyBarringEventListeners(GET_CALLBARRING_RESPONSE,(result == TAPI_SS_SUCCESS), callBarringType, isActivated);
700 SettingsManager::SetCallWaitingStatus(bool activateWaiting)
702 int errorCode = ERROR_NONE;
703 TryReturn(__pTapiHandle != null, ERROR_TAPI_INIT_FAILED,"Telephony initialization failed");
705 TelSsWaitingInfo_t waitingInfo;
706 memset(&waitingInfo, 0, sizeof(TelSsWaitingInfo_t));
707 waitingInfo.Class = TAPI_SS_CLASS_VOICE;
708 if (activateWaiting == true)
710 waitingInfo.Mode = TAPI_SS_CW_MODE_ACTIVATE;
714 waitingInfo.Mode = TAPI_SS_CW_MODE_DEACTIVATE;
716 int retStatus = tel_set_ss_waiting(__pTapiHandle, &waitingInfo, &HandleSetWaitingResponse, this);
717 if (retStatus != TAPI_API_SUCCESS)
719 errorCode = ERROR_TAPI_ERROR;
726 SettingsManager::HandleSetWaitingResponse(TapiHandle* pHandle, int result, void* pData, void* pUserData)
728 TelSsWaitingResp_t* pResponse = (TelSsWaitingResp_t*) pData;
729 SettingsManager* pSettingsManager = (SettingsManager*) pUserData;
730 bool isCallSuccessful = false;
731 if (result == TAPI_SS_SUCCESS)
733 isCallSuccessful = true;
735 if (pResponse != null)
738 int count = pResponse->record_num;
739 if (pSettingsManager->__pSettingsEventListener != null)
741 for (int index = 0; index < count; index++)
743 //notify event listeners
744 bool isCallWaitingEnabled = (pResponse->record[index].Status == TAPI_SS_STATUS_ACTIVE);
745 pSettingsManager->NotifyWaitingEventListeners(SET_CALLWAITING_RESPONSE, isCallSuccessful, isCallWaitingEnabled);
752 SettingsManager::GetCallWaitingStatus(void)
754 int errorCode = ERROR_NONE;
755 TryReturn(__pTapiHandle != null, ERROR_TAPI_INIT_FAILED,"Telephony initialization failed");
757 int retStatus = tel_get_ss_waiting_status(__pTapiHandle, TAPI_SS_CLASS_VOICE, &HandleGetWaitingResponse, this);
758 if (retStatus != TAPI_API_SUCCESS)
760 errorCode = ERROR_TAPI_ERROR;
767 SettingsManager::HandleGetWaitingResponse(TapiHandle* pHandle, int result, void* pData, void* pUserData)
769 TelSsWaitingResp_t* pResponse = (TelSsWaitingResp_t*) pData;
770 SettingsManager* pSettingsManager = (SettingsManager*) pUserData;
771 if (pResponse != null)
773 bool isCallSuccessful = false;
774 if (result == TAPI_SS_SUCCESS)
776 isCallSuccessful = true;
778 int count = pResponse->record_num;
779 if (pSettingsManager->__pSettingsEventListener != null)
781 for (int index = 0; index < count; index++)
783 //notify event listeners
784 bool isCallWaitingEnabled = (pResponse->record[index].Status == TAPI_SS_STATUS_ACTIVE);
785 pSettingsManager->NotifyWaitingEventListeners(GET_CALLWAITING_RESPONSE, isCallSuccessful, isCallWaitingEnabled);
792 SettingsManager::GetRejectMessageListN(void)
795 char* pMessage = null;
796 HashMapT<int,String> *pMessageMap = null;
798 int retval = vconf_get_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, &messagesCount);
799 if (retval == 0 && messagesCount > 0)
801 pMessageMap = new (std::nothrow) HashMapT<int,String>();
802 pMessageMap->Construct(messagesCount);
803 for (int index = 0; index < messagesCount; index++)
805 int keyForMsg = index;
806 String *pMessageStr = new (std::nothrow) String();
811 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG1_STR);
817 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG2_STR);
823 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG3_STR);
829 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG4_STR);
835 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG5_STR);
841 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG6_STR);
853 //todo:Chk if this is allowed outside the call settings library
854 bindtextdomain("ug-setting-call-efl", "/usr/ug/res/locale");
855 pMessageStr->Append(dgettext("ug-setting-call-efl", pMessage));
856 pMessageMap->Add(keyForMsg, *pMessageStr);
863 SettingsManager::SetRejectMessage(int messageIndex, const String& rejectMessage)
865 result r = E_FAILURE;
866 int messagesCount = 0;
867 vconf_get_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, &messagesCount);
869 const wchar_t* pRejectMessage = rejectMessage.GetPointer();
870 int len = (rejectMessage.GetLength()*sizeof(wchar_t));
871 char* pMessageToBeSet = new (std::nothrow) char[len + 1];
872 memset(pMessageToBeSet, 0, (len + 1) * sizeof(char));
873 wcstombs(pMessageToBeSet, pRejectMessage, len);
877 switch (messageIndex)
881 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG1_STR, pMessageToBeSet);
887 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG2_STR, pMessageToBeSet);
893 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG3_STR, pMessageToBeSet);
899 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG4_STR, pMessageToBeSet);
905 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG5_STR, pMessageToBeSet);
911 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG6_STR, pMessageToBeSet);
917 delete []pMessageToBeSet;
918 pMessageToBeSet = null;
924 delete []pMessageToBeSet;
925 pMessageToBeSet = null;
928 //increment the count only in case of new addition
929 if (messagesCount < 6 && messageIndex >= messagesCount)
933 vconf_set_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, messagesCount);
941 SettingsManager::RemoveRejectMessage(const IListT<int>& deleteKeyList)
943 result r = E_FAILURE;
946 //Fetch old message count
948 vconf_get_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, &oldMsgCount);
950 IMapT<int,String> *pRejectMsgMap = GetRejectMessageListN();
951 if(pRejectMsgMap != null)
953 //First,remove all messages from vconf
954 for (int index = 0; index < oldMsgCount; index++)
959 retval = vconf_unset(VCONFKEY_CISSAPPL_USER_CREATE_MSG1_STR);
963 retval = vconf_unset(VCONFKEY_CISSAPPL_USER_CREATE_MSG2_STR);
967 retval = vconf_unset(VCONFKEY_CISSAPPL_USER_CREATE_MSG3_STR);
971 retval = vconf_unset(VCONFKEY_CISSAPPL_USER_CREATE_MSG4_STR);
975 retval = vconf_unset(VCONFKEY_CISSAPPL_USER_CREATE_MSG5_STR);
979 retval = vconf_unset(VCONFKEY_CISSAPPL_USER_CREATE_MSG6_STR);
984 //Check if all messages are deleted
985 if(oldMsgCount == deleteKeyList.GetCount())
987 vconf_set_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, 0);
988 delete pRejectMsgMap;
992 //Second, delete messages to be deleted from fetched old Message map
993 for (int index = 0; index < deleteKeyList.GetCount(); index++)
996 if (deleteKeyList.GetAt(index, keyForMsg) == E_SUCCESS)
998 pRejectMsgMap->Remove(keyForMsg);
1002 //Third, reset remaining message in vconf with ordered keys
1003 IListT<String> *pRejectMsgList = pRejectMsgMap->GetValuesN();
1004 newMsgCount = pRejectMsgList->GetCount();
1005 for (int index = 0; index < newMsgCount; index++)
1008 pRejectMsgList->GetAt(index,msg);
1010 const wchar_t* pMsgPtr = msg.GetPointer();
1011 int len = msg.GetLength()*sizeof(wchar_t);
1012 char* pMessageToBeSet = new (std::nothrow) char[len + 1];
1013 memset(pMessageToBeSet, 0, (len + 1) * sizeof(char));
1014 wcstombs(pMessageToBeSet, pMsgPtr, len);
1019 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG1_STR, pMessageToBeSet);
1025 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG2_STR, pMessageToBeSet);
1031 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG3_STR, pMessageToBeSet);
1037 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG4_STR, pMessageToBeSet);
1043 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG5_STR, pMessageToBeSet);
1049 retval = vconf_set_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG6_STR, pMessageToBeSet);
1056 delete []pMessageToBeSet;
1057 pMessageToBeSet = null;
1059 delete pRejectMsgMap;
1060 pRejectMsgMap = null;
1063 //todo: retVal from vconf_unset is always -1. to be checked
1066 //Update message count in vconf
1067 vconf_set_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, newMsgCount);
1075 SettingsManager::GetPrefixDialListN(void)
1077 int phoneNumberCount;
1078 char* pPhoneNumber = null;
1079 ArrayList* pPhoneNumberList = null;
1081 int retval = vconf_get_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_INT, &phoneNumberCount);
1084 pPhoneNumberList = new (std::nothrow) ArrayList();
1085 for (int index = 0; index < phoneNumberCount; index++)
1087 String* phoneNumberStr = new (std::nothrow) String();
1092 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM1_STR);
1098 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM2_STR);
1104 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM3_STR);
1110 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM4_STR);
1116 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM5_STR);
1122 delete pPhoneNumberList;
1123 pPhoneNumberList = null;
1128 phoneNumberStr->Append(pPhoneNumber);
1129 pPhoneNumberList->Add(*phoneNumberStr);
1136 return pPhoneNumberList;
1140 SettingsManager::SetPrefixDialNumber(int phoneNumberIndex, const String& phoneNumber)
1142 result r = E_FAILURE;
1143 int phoneNumberCount = 0;
1146 const wchar_t* pRejectMessage = phoneNumber.GetPointer();
1147 int len = phoneNumber.GetLength();
1148 char* pTmpPhonePtr = new (std::nothrow) char[len + 1];
1149 memset(pTmpPhonePtr, 0, (len + 1) * sizeof(char));
1150 wcstombs(pTmpPhonePtr, pRejectMessage, len);
1151 char* pNumberToBeSet = new (std::nothrow) char[len + 1];
1152 memset(pNumberToBeSet, 0, (len + 1) * sizeof(char));
1153 strncpy(pNumberToBeSet, pTmpPhonePtr, len);
1154 delete []pTmpPhonePtr;
1155 pTmpPhonePtr = null;
1156 vconf_get_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_INT, &phoneNumberCount);
1157 switch (phoneNumberIndex)
1161 retval = vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM1_STR, pNumberToBeSet);
1167 retval = vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM2_STR, pNumberToBeSet);
1173 retval = vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM3_STR, pNumberToBeSet);
1179 retval = vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM4_STR, pNumberToBeSet);
1185 retval = vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM5_STR, pNumberToBeSet);
1191 delete []pNumberToBeSet;
1192 pNumberToBeSet = null;
1198 delete []pNumberToBeSet;
1199 pNumberToBeSet = null;
1203 if (phoneNumberCount < 5)
1207 vconf_set_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_INT, phoneNumberCount);
1208 //todo: change to adding single area code if its prefix number list is supported
1217 SettingsManager::GetPrefixDialNumberAtIndex(int phoneNumberIndex, String& phoneNumber)
1219 result r = E_FAILURE;
1221 int phoneNumberCount = 0;
1222 vconf_get_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_INT, &phoneNumberCount);
1225 if(phoneNumberCount > 0 && phoneNumberIndex < phoneNumberCount)
1227 char* pPhoneNumber = null;
1228 switch (phoneNumberIndex)
1232 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM1_STR);
1238 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM2_STR);
1244 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM3_STR);
1250 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM4_STR);
1256 pPhoneNumber = vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM5_STR);
1264 if(pPhoneNumber != null)
1266 r = phoneNumber.Append(pPhoneNumber);
1273 SettingsManager::RemovePrefixDialNumber(int phoneNumberIndex)
1275 result r = E_FAILURE;
1276 int phoneNumberCount = 0;
1279 vconf_get_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_INT, &phoneNumberCount);
1280 switch (phoneNumberIndex)
1284 retval = vconf_unset(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM1_STR);
1290 retval = vconf_unset(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM2_STR);
1296 retval = vconf_unset(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM3_STR);
1302 retval = vconf_unset(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM4_STR);
1308 retval = vconf_unset(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM5_STR);
1319 //todo: retVal from vconf_unset is always -1. to be checked
1322 if (phoneNumberCount > 0)
1326 vconf_set_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_INT, phoneNumberCount);
1334 SettingsManager::SetPrefixDialingStatus(bool enablePrefixDialing)
1336 result r = E_FAILURE;
1337 int retVal = vconf_set_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, enablePrefixDialing);
1346 SettingsManager::SetActivePrefixDialingValue(int prefixDialIndex)
1348 result r = E_FAILURE;
1349 int retVal = vconf_set_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_VALUE_INT, prefixDialIndex);
1358 SettingsManager::GetActivePrefixDialingValue(int& prefixDialIndex)
1360 result r = E_FAILURE;
1362 int retVal = vconf_get_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_VALUE_INT, &indexPos);
1365 prefixDialIndex = indexPos;
1372 SettingsManager::GetPrefixDialingStatus(void)
1374 int isPrefixDialingEnabled = -1;
1376 vconf_get_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, &isPrefixDialingEnabled);
1378 bool retVal = isPrefixDialingEnabled;
1383 SettingsManager::SetVideoCallImagePath(const String& imagePath)
1385 result r = E_FAILURE;
1386 const wchar_t* pRejectMessage = imagePath.GetPointer();
1387 int len = imagePath.GetLength();
1388 char* pTmpPath = new (std::nothrow) char[len + 1];
1389 memset(pTmpPath, 0, (len + 1) * sizeof(char));
1390 wcstombs(pTmpPath, pRejectMessage, len);
1391 char* pPathToBeSet = new (std::nothrow) char[len + 1];
1392 memset(pPathToBeSet, 0, (len + 1) * sizeof(char));
1393 strncpy(pPathToBeSet, pTmpPath, len);
1394 int retVal = vconf_set_str(VCONFKEY_CISSAPPL_VIDEO_IMAGE_PATH_STR, pPathToBeSet);
1401 delete []pPathToBeSet;
1402 pPathToBeSet = null;
1407 SettingsManager::GetVideoCallImagePath(String& imagePath)
1409 result r = E_FAILURE;
1410 char* pVideoImagePath = null;
1411 pVideoImagePath = vconf_get_str(VCONFKEY_CISSAPPL_VIDEO_IMAGE_PATH_STR);
1412 if (pVideoImagePath != null)
1415 imagePath.Append(pVideoImagePath);
1422 SettingsManager::SetCallLineIdentity(CallLineIdentity identity)
1424 result r = E_FAILURE;
1425 int retVal = vconf_set_int(VCONFKEY_CISSAPPL_SHOW_MY_NUMBER_INT, identity);
1434 SettingsManager::GetCallLineIdentity(CallLineIdentity& identity)
1436 result r = E_FAILURE;
1437 int lineIdentity = -1;
1438 int retVal = vconf_get_int(VCONFKEY_CISSAPPL_SHOW_MY_NUMBER_INT, &lineIdentity);
1441 identity = (CallLineIdentity) lineIdentity;
1448 SettingsManager::AddToCallRejectList(const String& phoneNumber, CallRejectMatchCondition rejectCondition)
1450 //construct CallRejectInfo.
1451 CallRejectInfo rejInfo;
1452 rejInfo.phoneNumber = phoneNumber;
1453 rejInfo.rejectCondition = rejectCondition;
1454 rejInfo.isActivated = false;
1456 //Fetch call reject list
1457 IListT<CallRejectInfo>* pRejNumbersList = GetCallRejectList();
1458 //Check if this is not already present in database.
1459 bool isDuplicate = false;
1460 if (pRejNumbersList != null)
1462 IEnumeratorT<CallRejectInfo>* pRejectEnum = pRejNumbersList->GetEnumeratorN();
1463 if (pRejectEnum != null)
1465 while (pRejectEnum->MoveNext() == E_SUCCESS)
1467 CallRejectInfo fetchedInfo;
1468 if (( pRejectEnum->GetCurrent(fetchedInfo) == E_SUCCESS) && (fetchedInfo == rejInfo))
1475 delete pRejNumbersList;
1478 result r = E_OBJ_ALREADY_EXIST;
1479 if (isDuplicate == false)
1481 r = __pCallSettingDataService->AddCallRejectInfoToDatabase(&rejInfo);
1486 IListT<CallRejectInfo>*
1487 SettingsManager::GetCallRejectList(void)
1489 int rejectCount = 0;
1490 __pCallSettingDataService->GetCallRejectCount(rejectCount);
1492 if (rejectCount > 0)
1494 ArrayListT<CallRejectInfo>* pCallRejectList = new (std::nothrow) ArrayListT<CallRejectInfo>();
1495 pCallRejectList->Construct(rejectCount);
1496 __pCallSettingDataService->GetAllCallRejectInfoFromDatabaseN(*pCallRejectList);
1497 return pCallRejectList;
1503 SettingsManager::UpdateCallRejectRow(int rowId, const String& phoneNumber, bool activate, CallRejectMatchCondition rejectCondition)
1505 result r = E_FAILURE;
1506 CallRejectInfo* rejInfo = new (std::nothrow) CallRejectInfo();
1507 rejInfo->rowId = rowId;
1508 rejInfo->phoneNumber.Append(phoneNumber);
1509 rejInfo->rejectCondition = rejectCondition;
1510 rejInfo->isActivated = activate;
1511 r = __pCallSettingDataService->UpdateCallRejectInfoDatabase(rowId,rejInfo);
1517 SettingsManager::RemoveCallRejectRow(int rowId)
1519 return __pCallSettingDataService->DeleteCallRejectInfoFromDatabase(rowId);
1523 SettingsManager::SetUnknownRejectStatus(bool activate)
1525 result r = E_FAILURE;
1526 int retVal = vconf_set_bool(VCONFKEY_CISSAPPL_AUTO_REJECT_UNKNOWN_BOOL, activate);
1535 SettingsManager::IsCallToBeRejected(String& phoneNumber)
1537 return __pCallSettingDataService->IsCallToBeRejected(phoneNumber);
1541 SettingsManager::GetUnknownRejectStatus(void)
1543 int unknownRejectStatus = -1;
1545 vconf_get_bool(VCONFKEY_CISSAPPL_AUTO_REJECT_UNKNOWN_BOOL, &unknownRejectStatus);
1547 bool retVal = unknownRejectStatus;
1552 SettingsManager::SetCallAlertStatus(CallAlertStatus callAlertStatus)
1554 result r = E_FAILURE;
1555 int retVal = vconf_set_int(VCONFKEY_CISSAPPL_ALERT_ON_CALL_INT, callAlertStatus);
1564 SettingsManager::GetCallAlertStatus(CallAlertStatus& callAlertStatus)
1566 result r = E_FAILURE;
1567 int alertStatus = -1;
1568 int retVal = vconf_get_int(VCONFKEY_CISSAPPL_ALERT_ON_CALL_INT, &alertStatus);
1571 callAlertStatus = (CallAlertStatus) alertStatus;
1578 SettingsManager::SetCallConnectToneStatus(bool activate)
1580 result r = E_FAILURE;
1581 int retVal = vconf_set_bool(VCONFKEY_CISSAPPL_CALL_CONNECT_TONE_BOOL, activate);
1590 SettingsManager::GetCallConnectToneStatus(void)
1592 int unknownRejectStatus = -1;
1594 vconf_get_bool(VCONFKEY_CISSAPPL_CALL_CONNECT_TONE_BOOL, &unknownRejectStatus);
1596 bool retVal = unknownRejectStatus;
1601 SettingsManager::SetMinuteMinderToneStatus(bool activate)
1603 result r = E_FAILURE;
1604 int retVal = vconf_set_bool(VCONFKEY_CISSAPPL_MINUTE_MINDER_BOOL, activate);
1613 SettingsManager::GetMinuteMinderToneStatus(void)
1615 int unknownRejectStatus = -1;
1617 vconf_get_bool(VCONFKEY_CISSAPPL_MINUTE_MINDER_BOOL, &unknownRejectStatus);
1619 bool retVal = unknownRejectStatus;
1624 SettingsManager::SetCallEndToneStatus(bool activate)
1626 result r = E_FAILURE;
1627 int retVal = vconf_set_bool(VCONFKEY_CISSAPPL_CALL_END_TONE_BOOL, activate);
1636 SettingsManager::GetCallEndToneStatus(void)
1638 int unknownRejectStatus = -1;
1640 vconf_get_bool(VCONFKEY_CISSAPPL_CALL_END_TONE_BOOL, &unknownRejectStatus);
1642 bool retVal = unknownRejectStatus;
1647 SettingsManager::SetSpeedDialMapping(const String& contactId, int numberToMap)
1649 result r = E_FAILURE;
1650 SpeedDialInfo mappingInfo;;
1651 mappingInfo.keyMapping = numberToMap;
1652 mappingInfo.contactId = contactId;
1653 r = __pCallSettingDataService->AddSpeedDialInfoToDatabase(&mappingInfo);
1657 IMapT<int,SpeedDialInfo>*
1658 SettingsManager::GetSpeedDialMappingN(void)
1660 return (__pCallSettingDataService->GetAllSpeedDialInfoMapFromDatabaseN());
1664 SettingsManager::RemoveSpeedDialMapping(int rowId)
1666 return __pCallSettingDataService->DeleteSpeedDialInfoFromDatabase(rowId);
1670 SettingsManager::UpdateSpeedDialMapping(int rowId, const String& contactId, int numberToMap)
1672 result r = E_FAILURE;
1673 SpeedDialInfo* mappingInfo = new (std::nothrow) SpeedDialInfo();
1674 mappingInfo->rowId = rowId;
1675 mappingInfo->contactId.Append(contactId);
1676 mappingInfo->keyMapping = numberToMap;
1677 r = __pCallSettingDataService->UpdateSpeedDialInfoDatabase(rowId,mappingInfo);
1683 SettingsManager::GetMappedSpeedDialNumberN(int aIndex)
1685 String* contactNumber = null;
1687 //Fetch contactId for mapped speed dial
1688 String* contactId = __pCallSettingDataService->GetSpeedDialContactN(aIndex);
1689 if(contactId != null && contactId->IsEmpty() == false)
1691 RecordId recordId = INVALID_RECORD_ID;
1692 Integer::Parse(*contactId, recordId);
1693 //check if recordId is correct
1694 if (recordId != Tizen::Social::INVALID_RECORD_ID)
1696 AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
1697 Addressbook* pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
1698 if (pAddressbook != null)
1700 Contact* pMappedContact = pAddressbook->GetContactN(recordId);
1701 if (pMappedContact != null)
1703 IList* pPhoneNumberList = pMappedContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
1704 if (pPhoneNumberList != null)
1706 PhoneNumber* pPhoneNumber = static_cast<PhoneNumber*>(pPhoneNumberList->GetAt(0));
1707 if(pPhoneNumber != null)
1709 contactNumber = new (std::nothrow) String(pPhoneNumber->GetPhoneNumber());
1711 pPhoneNumberList->RemoveAll(true);
1712 delete pPhoneNumberList;
1714 delete pMappedContact;
1716 delete pAddressbook;
1722 return contactNumber;
1726 SettingsManager::FetchContactDetailsN(const String& contactId)
1728 Contact* pFetchedContact = null;
1730 RecordId recordId = INVALID_RECORD_ID;
1731 Integer::Parse(contactId, recordId);
1732 //check if recordId is correct
1733 if (recordId != Tizen::Social::INVALID_RECORD_ID)
1735 AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
1736 Addressbook* pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
1737 if (pAddressbook != null)
1739 pFetchedContact = pAddressbook->GetContactN(recordId);
1740 delete pAddressbook;
1743 return pFetchedContact;
1747 SettingsManager::SetCallState(CallState callState)
1749 AppLogDebug("Enter %d",callState);
1750 result r = E_FAILURE;
1751 int retVal = vconf_set_int(VCONFKEY_CALL_STATE, callState);