2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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 FSys_AlarmImpl.cpp
19 * @brief This is the implementation file for _AlarmImpl class.
22 #include <unique_ptr.h>
27 #include <FBaseRtIEventArg.h>
28 #include <FBaseSysLog.h>
30 #include <FBase_NativeError.h>
31 #include "FSys_AlarmImpl.h"
32 #include "FSys_AlarmManager.h"
33 #include "FSys_SystemTimeImpl.h"
35 using namespace Tizen::Base;
36 using namespace Tizen::Base::Runtime;
37 using namespace Tizen::Base::Collection;
38 using namespace Tizen::Io;
40 namespace Tizen { namespace System
43 class _AlarmEventArg : public IEventArg
53 class _AlarmEvent : public _Event
56 result Construct(void)
58 return _Event::Initialize();
62 virtual void FireImpl(IEventListener& listener, const IEventArg& arg)
64 SysLog(NID_SYS, "Alarm is expired.");
65 IAlarmEventListener* pListener = dynamic_cast<IAlarmEventListener*> (&listener);
66 const _AlarmEventArg* pArg = dynamic_cast<const _AlarmEventArg*>(&arg);
68 if(pListener == null || pArg == null)
70 SysLogException(NID_SYS, E_SYSTEM, "listener or arg is null.");
74 if(pArg->pAlarm == null)
76 SysLogException(NID_SYS, E_SYSTEM, "Alarm data is invalid.");
80 pListener->OnAlarmExpired(*(pArg->pAlarm));
84 _AlarmImpl::_AlarmImpl(Alarm* pAlarm)
88 , __isSetEndTime(false)
95 _AlarmImpl::~_AlarmImpl(void)
97 if(__alarmId.value != 0)
110 _AlarmImpl::Construct(void)
116 _AlarmImpl::Set(const DateTime& startTime, int period, const DateTime* pEndTime)
118 result r = E_SUCCESS;
119 _AlarmManager* pAlarmManager = _AlarmManager::GetInstance();
120 SysTryReturnResult(NID_SYS, pAlarmManager != null, E_SYSTEM, "It is failed to get AlarmManager.");
122 __startTime = startTime;
127 DateTime* pRequiredEndTime = const_cast <DateTime*> (pEndTime);
128 __pEndTime = pRequiredEndTime;
129 __isSetEndTime = true;
133 __isSetEndTime = false;
136 if(__alarmId.value == 0)
138 r = pAlarmManager->RegisterAlarm(this);
142 r = pAlarmManager->UpdateAlarm(this);
145 if(r != E_SUCCESS && r != E_INVALID_ARG)
147 SysLog(NID_SYS, "It is failed to register alarm. [%s]", GetErrorMessage(r));
154 _AlarmImpl::Cancel(void)
156 result r = E_SUCCESS;
157 _AlarmManager* pAlarmManager = _AlarmManager::GetInstance();
158 SysTryReturnResult(NID_SYS, pAlarmManager != null, E_SYSTEM, "It is failed to get AlarmManager.");
160 r = pAlarmManager->UnregisterAlarm(this);
162 if(r != E_SUCCESS && r != E_INVALID_ARG)
164 SysLog(NID_SYS, "It is failed to cancel alarm. [%s]", GetErrorMessage(r));
174 _AlarmImpl::GetStartTime(void) const
181 _AlarmImpl::GetPeriod(void) const
184 return __period.ToInt();
188 _AlarmImpl::GetEndTime(void) const
195 _AlarmImpl::SetAlarmEventListener(IAlarmEventListener* pListener)
197 if(pListener == null)
199 SysLog(NID_SYS, "Listener null set doesn't mean disalarm");
210 _AlarmEvent* pAlarmEvent = new (std::nothrow) _AlarmEvent();
211 SysTryReturnResult(NID_SYS, pAlarmEvent != null, E_OUT_OF_MEMORY, "It is failed to create Event instance");
212 pAlarmEvent->Construct();
213 __pEvent = pAlarmEvent;
215 __pEvent->AddListener(*pListener);
221 _AlarmImpl::OnAlarmExpired(int alarmId)
225 _AlarmEventArg* pAlarmEventArg= new (std::nothrow) _AlarmEventArg();
226 if(pAlarmEventArg == null)
228 SysLogException(NID_SYS, E_OUT_OF_MEMORY, "It is failed to create instance of _AlarmEventArg class.");
231 pAlarmEventArg->pAlarm = this->__pAlarm;
232 if(pAlarmEventArg != null)
234 SysLog(NID_SYS, "AlarmEventArg is ready.");
235 __pEvent->FireAsync(*pAlarmEventArg);
238 SysLog(NID_SYS, "Alarm Expired for alarm id: %d and listener called.", alarmId);
242 SysLog(NID_SYS, "Reserved alarm is expired. However, Listener point is unavailable.");
248 _AlarmImpl::GetInstance(Alarm* pAlarm)
250 return (pAlarm) ? pAlarm->__pAlarmImpl : null;
254 _AlarmImpl::GetInstance(const Alarm* pAlarm)
256 return (pAlarm) ? pAlarm->__pAlarmImpl : null;