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 CallSettingsManager.cpp
19 * @brief Setting Manager class
24 #include <FBaseColIList.h>
26 #include "vconf-internal-ciss-keys.h"
27 #include "CallSettingsManager.h"
28 #include "CallTypes.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;
35 using namespace Tizen::System;
37 SettingsManager* SettingsManager::__pInstance = null;
39 SettingsManager::SettingsManager(void)
41 , __pSettingsEventListener(null)
42 , __pCallSettingDataService(null)
47 SettingsManager::~SettingsManager(void)
49 //De-initialize the TAPI Library
50 if(__pTapiHandle != null)
52 tel_deinit(__pTapiHandle);
54 if (__pCallSettingDataService)
56 __pCallSettingDataService->CloseDatabase();
57 delete __pCallSettingDataService;
59 if (__pSettingsEventListener != null)
61 delete __pSettingsEventListener;
63 RemoveSystemEventListener();
66 void SettingsManager::CreateInstance(void)
68 __pInstance = new (std::nothrow) SettingsManager();
69 result r = __pInstance->Construct();
76 std::atexit(&(SettingsManager::DestroyInstance));
79 void SettingsManager::DestroyInstance(void)
85 SettingsManager::Construct(void)
87 __pCallSettingDataService = CallSettingDataService::CreateInstance();
88 result r = __pCallSettingDataService->OpenDatabase();
93 //initialize telephony
94 __pTapiHandle = tel_init(null);
95 SetCallState(CALL_STATE_CALL_OFF);
96 AddSystemEventListener();
101 SettingsManager::GetInstance(void)
103 if (__pInstance == null)
111 SettingsManager::AddSettingEventListener(ISettingsEventListener* pSettingsEventListener)
113 if (__pSettingsEventListener == null)
115 __pSettingsEventListener = new (std::nothrow) ArrayListT<ISettingsEventListener*>();
118 //Add to listeners, if not already in list.
119 if ( (pSettingsEventListener != null)
120 && !(__pSettingsEventListener->Contains(pSettingsEventListener)) )
122 __pSettingsEventListener->Add(pSettingsEventListener);
127 SettingsManager::RemoveSettingEventListener(ISettingsEventListener* pSettingsEventListener)
129 if ((__pSettingsEventListener != null) && (pSettingsEventListener != null)
130 && __pSettingsEventListener->Contains(pSettingsEventListener))
132 __pSettingsEventListener->Remove(pSettingsEventListener);
137 SettingsManager::IsCallToBeRejected(String& phoneNumber)
139 if(__pCallSettingDataService != null)
141 return __pCallSettingDataService->IsCallToBeRejected(phoneNumber);
150 SettingsManager::GetUnknownRejectStatus(void)
152 int unknownRejectStatus = -1;
154 vconf_get_bool(VCONFKEY_CISSAPPL_AUTO_REJECT_UNKNOWN_BOOL, &unknownRejectStatus);
156 bool retVal = unknownRejectStatus;
161 SettingsManager::NotifyForwardingEventListeners(ForwardResponseType responseType, bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool isCallForwardActivated, int noReplyWaitTime)
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_CALLFORWARD_RESPONSE)
177 pListener->HandleSetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
181 pListener->HandleGetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
188 SettingsManager::NotifyBarringEventListeners(BarringResponseType responseType, bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated)
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_CALLBARRING_RESPONSE)
204 pListener->HandleSetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
208 pListener->HandleGetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
215 SettingsManager::NotifyWaitingEventListeners(WaitingResponseType responseType, bool isCallSuccessful, bool isCallWaitingActivated)
217 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
218 result r = E_FAILURE;
219 if (__pSettingsEventListener != null)
221 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
222 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
224 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
226 ISettingsEventListener* pListener;
227 r = pListenerEnum->GetCurrent(pListener);
228 //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
229 if (responseType == SET_CALLWAITING_RESPONSE)
231 pListener->HandleSetCallWaitingResponse(isCallSuccessful, isCallWaitingActivated);
235 pListener->HandleGetCallWaitingResponse(isCallSuccessful, isCallWaitingActivated);
238 delete pListenerEnum;
243 SettingsManager::GetRejectMessageListN(void)
246 char* pMessage = null;
247 HashMapT<int,String> *pMessageMap = null;
249 int retval = vconf_get_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, &messagesCount);
250 if (retval == 0 && messagesCount > 0)
252 pMessageMap = new (std::nothrow) HashMapT<int,String>();
253 pMessageMap->Construct(messagesCount);
254 for (int index = 0; index < messagesCount; index++)
256 int keyForMsg = index;
257 String *pMessageStr = new (std::nothrow) String();
262 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG1_STR);
268 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG2_STR);
274 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG3_STR);
280 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG4_STR);
286 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG5_STR);
292 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG6_STR);
306 //todo:Chk if this is allowed outside the call settings library
307 if((pMessage != null) && (String(pMessage).IsEmpty() == false))
309 bindtextdomain("ug-setting-call-efl", "/usr/ug/res/locale");
310 pMessageStr->Append(dgettext("ug-setting-call-efl", pMessage));
311 pMessageMap->Add(keyForMsg, *pMessageStr);
319 SettingsManager::SetCallState(CallState callState)
321 AppLogDebug("Enter %d",callState);
322 result r = E_FAILURE;
323 int retVal = vconf_set_int(VCONFKEY_CALL_STATE, callState);
326 AppLogDebug("Success");
332 SettingsManager::AddSystemEventListener(void)
334 Tizen::System::SettingInfo::AddSettingEventListener(*this);
338 SettingsManager::RemoveSystemEventListener(void)
340 Tizen::System::SettingInfo::RemoveSettingEventListener(*this);
344 SettingsManager::OnSettingChanged(Tizen::Base::String& key)
346 AppLogDebug("Enter");
347 //Flight mode changed
348 if(key.Equals(String(SETTINGS_FLIGHT_MODE_STR)))
350 bool flightMode = false;
351 SettingInfo::GetValue(key, flightMode);
352 if(flightMode == true)
354 // Notify if some active call is going on
355 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
356 result r = E_FAILURE;
357 if (__pSettingsEventListener != null)
359 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
360 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
362 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
364 ISettingsEventListener* pListener;
365 r = pListenerEnum->GetCurrent(pListener);
366 pListener->HandleFlightMode(true);
376 SettingsManager::GetFlightModeStatus(void)
378 result r = E_SUCCESS;
380 String key(SETTINGS_FLIGHT_MODE_STR);
381 bool flightMode = false;
383 r = SettingInfo::GetValue(key, flightMode);
384 TryCatch(r == E_SUCCESS, , "GetFlightModeStatus: To get a value is failed");