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 return __pCallSettingDataService->IsCallToBeRejected(phoneNumber);
143 SettingsManager::GetUnknownRejectStatus(void)
145 int unknownRejectStatus = -1;
147 vconf_get_bool(VCONFKEY_CISSAPPL_AUTO_REJECT_UNKNOWN_BOOL, &unknownRejectStatus);
149 bool retVal = unknownRejectStatus;
154 SettingsManager::NotifyForwardingEventListeners(ForwardResponseType responseType, bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool isCallForwardActivated, int noReplyWaitTime)
156 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
157 result r = E_FAILURE;
158 if (__pSettingsEventListener != null)
160 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
161 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
163 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
165 ISettingsEventListener* pListener;
166 r = pListenerEnum->GetCurrent(pListener);
167 //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
168 if (responseType == SET_CALLFORWARD_RESPONSE)
170 pListener->HandleSetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
174 pListener->HandleGetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
181 SettingsManager::NotifyBarringEventListeners(BarringResponseType responseType, bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated)
183 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
184 result r = E_FAILURE;
185 if (__pSettingsEventListener != null)
187 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
188 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
190 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
192 ISettingsEventListener* pListener;
193 r = pListenerEnum->GetCurrent(pListener);
194 //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
195 if (responseType == SET_CALLBARRING_RESPONSE)
197 pListener->HandleSetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
201 pListener->HandleGetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
208 SettingsManager::NotifyWaitingEventListeners(WaitingResponseType responseType, bool isCallSuccessful, bool isCallWaitingActivated)
210 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
211 result r = E_FAILURE;
212 if (__pSettingsEventListener != null)
214 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
215 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
217 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
219 ISettingsEventListener* pListener;
220 r = pListenerEnum->GetCurrent(pListener);
221 //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
222 if (responseType == SET_CALLWAITING_RESPONSE)
224 pListener->HandleSetCallWaitingResponse(isCallSuccessful, isCallWaitingActivated);
228 pListener->HandleGetCallWaitingResponse(isCallSuccessful, isCallWaitingActivated);
231 delete pListenerEnum;
236 SettingsManager::GetRejectMessageListN(void)
239 char* pMessage = null;
240 HashMapT<int,String> *pMessageMap = null;
242 int retval = vconf_get_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, &messagesCount);
243 if (retval == 0 && messagesCount > 0)
245 pMessageMap = new (std::nothrow) HashMapT<int,String>();
246 pMessageMap->Construct(messagesCount);
247 for (int index = 0; index < messagesCount; index++)
249 int keyForMsg = index;
250 String *pMessageStr = new (std::nothrow) String();
255 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG1_STR);
261 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG2_STR);
267 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG3_STR);
273 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG4_STR);
279 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG5_STR);
285 pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG6_STR);
299 //todo:Chk if this is allowed outside the call settings library
300 if((pMessage != null) && (String(pMessage).IsEmpty() == false))
302 bindtextdomain("ug-setting-call-efl", "/usr/ug/res/locale");
303 pMessageStr->Append(dgettext("ug-setting-call-efl", pMessage));
304 pMessageMap->Add(keyForMsg, *pMessageStr);
312 SettingsManager::SetCallState(CallState callState)
314 AppLogDebug("Enter %d",callState);
315 result r = E_FAILURE;
316 int retVal = vconf_set_int(VCONFKEY_CALL_STATE, callState);
319 AppLogDebug("Success");
325 SettingsManager::AddSystemEventListener(void)
327 Tizen::System::SettingInfo::AddSettingEventListener(*this);
331 SettingsManager::RemoveSystemEventListener(void)
333 Tizen::System::SettingInfo::RemoveSettingEventListener(*this);
337 SettingsManager::OnSettingChanged(Tizen::Base::String& key)
339 AppLogDebug("Enter");
340 //Flight mode changed
341 if(key.Equals(String(SETTINGS_FLIGHT_MODE_STR)))
343 bool flightMode = false;
344 SettingInfo::GetValue(key, flightMode);
345 if(flightMode == true)
347 // Notify if some active call is going on
348 IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
349 result r = E_FAILURE;
350 if (__pSettingsEventListener != null)
352 pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
353 //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
355 while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
357 ISettingsEventListener* pListener;
358 r = pListenerEnum->GetCurrent(pListener);
359 pListener->HandleFlightMode(true);
369 SettingsManager::GetFlightModeStatus(void)
371 result r = E_SUCCESS;
373 String key(SETTINGS_FLIGHT_MODE_STR);
374 bool flightMode = false;
376 r = SettingInfo::GetValue(key, flightMode);
377 TryCatch(r == E_SUCCESS, , "GetFlightModeStatus: To get a value is failed");