*/
#include <unique_ptr.h>
+#include <appfw/app.h>
+#include <alarm.h>
+#include <appsvc/appsvc.h>
#include <FBaseSysLog.h>
#include <FSysSystemTime.h>
#include <FBase_NativeError.h>
-#include <FIo_AppServiceIpcMessages.h>
+#include <FAppApp.h>
+#include <FBase_StringConverter.h>
-#include "FSys_AlarmManager.h"
-#include "FSys_CommunicationDispatcherClient.h"
+#include "inc/FSys_AlarmManager.h"
using namespace Tizen::Base;
using namespace Tizen::Base::Runtime;
namespace Tizen { namespace System
{
+static const long _SECOND_OF_MINUTE = 60;
-static const wchar_t* _ALARM_SERVICE_ID = L"osp.alarm.service";
-static const wchar_t* _ALARM_SET_SINGLEALARM = L"osp.alarm.set.singlealarm";
-static const wchar_t* _ALARM_SET_REPEATEDALARM = L"osp.alarm.set.repeatedalarm";
-static const wchar_t* _ALARM_CANCEL = L"osp.alarm.cancel";
-static const wchar_t* _ALARM_EXPIRED_EVENT = L"osp.alarm.expired.callback";
-static const wchar_t* _ALARM_RESULT_OK = L"osp.alarm.result.ok";
-
-const int _ALARM_SERVICE_IPC_MESSAGE_SERVICE_ID = 0;
-const int _ALARM_SERVICE_IPC_MESSAGE_COMMAND_ID = 1;
-const int _ALARM_SERVICE_RESPONSE_DATA = 2;
-const int _ALARM_SERVICE_ALARM_ID = 3;
-
- _AlarmManager* _AlarmManager::pAlarmManager = null;
+_AlarmManager* _AlarmManager::pAlarmManager = null;
_AlarmManager::_AlarmManager()
-: __pIpcClient(null)
+ : __pAlarmHashMap(null)
{
result r = E_SUCCESS;
- static String ALARM_SERVICE_ID(_ALARM_SERVICE_ID);
__alarmList.Construct();
- _CommunicationDispatcherClient* pCommunicationDispatcherClient = _CommunicationDispatcherClient::GetInstance();
- SysTryCatch(NID_SYS, pCommunicationDispatcherClient != null, r = E_SYSTEM, r, "It is It is It is failed to get CommunicationDispatcherClient.");
+ if (!__pAlarmHashMap)
+ {
+ __pAlarmHashMap = new (std::nothrow) MultiHashMap();
+ SysTryCatch(NID_SYS, __pAlarmHashMap != null, r = E_SYSTEM, E_SYSTEM, "__pAlarmHashMap should not be null");
- r = pCommunicationDispatcherClient->RegisterCommunicationListener(ALARM_SERVICE_ID, *this);
- SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is It is It is failed to register on CommunicationDispatcherClient.");
+ r = __pAlarmHashMap->Construct();
+ SysTryCatch(NID_SYS, r == E_SUCCESS, r= E_SYSTEM, E_SYSTEM, "[%s] Propagated.", GetErrorMessage(r));
+ }
- __pIpcClient = pCommunicationDispatcherClient->GetIpcClient();
+ //Checks for any alarm existence
+ alarm_cancel_all();
CATCH:
SetLastResult(r);
_AlarmManager::~_AlarmManager()
{
+ delete __pAlarmHashMap;
+ __pAlarmHashMap = null;
+
+ //Cancel all the alarms before exiting
+ alarm_cancel_all();
}
_AlarmManager*
return pAlarmManager;
}
+int
+_AlarmManager::ReserveAlarm(Tizen::Base::String appId, Tizen::Base::DateTime startTime, int period)
+{
+ int reservedAlarmId = -1;
+ result r = E_SUCCESS;
+
+ int ret = 0;
+ service_h service;
+
+ SysLog(NID_SYS, "Reserve time is %d/%d/%d %d:%d:%d", startTime.GetYear(), startTime.GetMonth(), startTime.GetDay(), startTime.GetHour(), startTime.GetMinute(), startTime.GetSecond());
+
+ bundle* pBundle = null;
+ alarm_entry_t* pAlarmInfo;
+ alarm_date_t expireTime = {0,};
+
+ std::unique_ptr<char[]> pId(_StringConverter::CopyToCharArrayN(appId));
+
+ pBundle = bundle_create();
+ SysTryCatch(NID_SYS, pBundle != null, r = E_SYSTEM, r, "It is failed to create bundle");
+
+ ret = appsvc_set_operation(pBundle,"osp.appsvc.operation.ALARM");
+ SysTryCatch(NID_SYS, ret == SERVICE_ERROR_NONE, r = E_SYSTEM, r, "It is failed to set operation");
+
+ ret = appsvc_set_appid(pBundle, (const char*)(pId.get()));
+ SysTryCatch(NID_SYS, ret == SERVICE_ERROR_NONE, r = E_SYSTEM, r, "It is failed to set appid for %ls", appId.GetPointer());
+
+ pAlarmInfo = alarmmgr_create_alarm();
+ SysTryCatch(NID_SYS, pAlarmInfo != null, r = E_SYSTEM, r, "It is failed to create alarm entry");
+
+ expireTime.year = startTime.GetYear();
+ expireTime.month = startTime.GetMonth();
+ expireTime.day = startTime.GetDay();
+ expireTime.hour = startTime.GetHour();
+ expireTime.min = startTime.GetMinute();
+ expireTime.sec = startTime.GetSecond();
+
+ ret = alarmmgr_set_time(pAlarmInfo, expireTime);
+ SysTryCatch(NID_SYS, ret == ALARMMGR_RESULT_SUCCESS, r = E_SYSTEM, r, "It is failed to set new alarm time");
+
+ if(period > 0)
+ {
+ ret = alarmmgr_set_repeat_mode(pAlarmInfo, ALARM_REPEAT_MODE_REPEAT, period * _SECOND_OF_MINUTE);
+ SysTryCatch(NID_SYS, ret == ALARMMGR_RESULT_SUCCESS, r = E_SYSTEM, r, "It is failed to set repeat mode");
+ }
+
+ ret = alarmmgr_set_type(pAlarmInfo, 0x04/*ALARM_TYPE_NOLAUNCH*/);
+ SysTryCatch(NID_SYS, ret == ALARMMGR_RESULT_SUCCESS, r = E_SYSTEM, r, "It is failed to set repeat mode");
+
+ ret = alarmmgr_add_alarm_appsvc_with_localtime(pAlarmInfo,(void *)pBundle, &reservedAlarmId);
+ SysTryCatch(NID_SYS, ret == ALARMMGR_RESULT_SUCCESS, r = E_SYSTEM, r, "Alarm creation failed!!! Alrmgr error code is %d", ret);
+
+CATCH:
+ if(r == E_SYSTEM)
+ {
+ reservedAlarmId = -1;
+ }
+ if(pAlarmInfo != null)
+ {
+ alarmmgr_free_alarm(pAlarmInfo);
+ }
+
+ if(pBundle != null)
+ {
+ bundle_free(pBundle);
+ }
+
+ return reservedAlarmId;
+}
+
+result
+_AlarmManager::AddAlarmList(int alarmId, int period, String appId, DateTime* endTime)
+{
+ result r = E_SUCCESS;
+
+ SysTryReturnResult(NID_SYS, __pAlarmHashMap != null, E_SYSTEM, "Alarm list does not initialized");
+ SysLog(NID_SYS, "New Alarm Id is added (%d, %d, %ls)", alarmId, period, appId.GetPointer());
+
+ Integer* reservedAlarmId = null;
+ Integer* alarmPeriod = null;
+ String* alarmAppId = null;
+
+ Integer* reverseAlarmId = null;
+ String* reverseAppId = null;
+
+ reservedAlarmId = new (std::nothrow) Integer(alarmId);
+ SysTryCatch(NID_SYS, reservedAlarmId != null, r = E_SYSTEM, E_SYSTEM, "reservedAlarmId should not be null");
+
+ alarmPeriod = new (std::nothrow) Integer(period);
+ SysTryCatch(NID_SYS, alarmPeriod != null, r = E_SYSTEM, E_SYSTEM, "alarmPeriod should not be null");
+
+ alarmAppId = new (std::nothrow) String(appId);
+ SysTryCatch(NID_SYS, alarmAppId != null, r = E_SYSTEM, E_SYSTEM, "alarmAppId should not be null");
+
+ //Forward
+ r = __pAlarmHashMap->Add(*reservedAlarmId, *alarmAppId);
+ SysTryCatch(NID_SYS, r == E_SUCCESS, r, r, "Fail to add new alarm app id on the alarm list");
+
+ r = __pAlarmHashMap->Add(*reservedAlarmId, *alarmPeriod);
+ SysTryCatch(NID_SYS, r == E_SUCCESS, r, r, "Fail to add new alarm period on the alarm list");
+
+ if(endTime != null)
+ {
+ DateTime* alarmEndTime = new DateTime(*endTime);
+
+ SysLog(NID_SYS, "Endtime is exist %d:%d:%d", alarmEndTime->GetHour(), alarmEndTime->GetMinute(), alarmEndTime->GetSecond());
+ r = __pAlarmHashMap->Add(*reservedAlarmId, *alarmEndTime);
+ SysTryCatch(NID_SYS, r == E_SUCCESS, r, r, "Fail to add new alarm endtime on the alarm list");
+ }
+
+ //Reverse
+ reverseAlarmId = new (std::nothrow) Integer(alarmId);
+ SysTryCatch(NID_SYS, reverseAlarmId != null, r = E_SYSTEM, E_SYSTEM, "reverseAlarmId should not be null");
+
+ reverseAppId = new (std::nothrow) String(appId);
+ SysTryCatch(NID_SYS, reverseAppId != null, r = E_SYSTEM, E_SYSTEM, "reverseAppId should not be null");
+
+ r = __pAlarmHashMap->Add(*reverseAppId, *reverseAlarmId);
+ SysTryCatch(NID_SYS, r == E_SUCCESS, r, r, "Fail to add new alarm on the alarm list");
+
+CATCH:
+ if(r != E_SUCCESS)
+ {
+ if(reservedAlarmId != null)
+ {
+ __pAlarmHashMap->Remove(*reservedAlarmId, false);
+ delete reservedAlarmId;
+ }
+
+ if(alarmPeriod != null)
+ {
+ delete alarmPeriod;
+ }
+
+ if(alarmAppId != null)
+ {
+ delete alarmAppId;
+ }
+
+ if(reverseAppId != null)
+ {
+ __pAlarmHashMap->Remove(*reverseAppId, false);
+ delete reverseAppId;
+ }
+
+ if(reverseAlarmId != null)
+ {
+ delete reverseAlarmId;
+ }
+ }
+ return r;
+}
+
+result
+_AlarmManager::RemoveAlarmList(int alarmId)
+{
+ result r = E_SUCCESS;
+ Integer requiredAlarmId(alarmId);
+ std::unique_ptr<IEnumerator>pValueEnum(null);
+
+ SysTryReturnResult(NID_SYS, __pAlarmHashMap != null, E_SYSTEM, "Alarm list does not initialized");
+
+ alarm_cancel(alarmId);
+ SysLog(NID_SYS, "AlarmId %d disarms the timer.", alarmId);
+
+ pValueEnum.reset(__pAlarmHashMap->GetValuesN(requiredAlarmId));
+
+ if(pValueEnum != null)
+ {
+ SysLog(NID_SYS, "Reserved Alarms are exist");
+ String* alarmAppId = null;
+ r = pValueEnum->MoveNext();
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Reserved Alarm List is not valid.");
+ alarmAppId = static_cast< String* >(pValueEnum->GetCurrent());
+
+ if(alarmAppId != null)
+ {
+ SysLog(NID_SYS, "Alarm AppId is %S", alarmAppId->GetPointer());
+ std::unique_ptr<IEnumerator>pAlarmEnum(__pAlarmHashMap->GetValuesN(*alarmAppId));
+ if(pAlarmEnum != null)
+ {
+ while(pAlarmEnum->MoveNext() == E_SUCCESS)
+ {
+ Integer* reverseAlarmId = static_cast< Integer* >(pAlarmEnum->GetCurrent());
+ if(reverseAlarmId != null)
+ {
+ SysLog(NID_SYS, "Reserved Alarm is %d", reverseAlarmId->ToInt());
+ if(reverseAlarmId->ToInt() == alarmId)
+ {
+ SysLog(NID_SYS, "Remove reservedAlarmId for reverse look-up");
+ __pAlarmHashMap->Remove(*alarmAppId, *reverseAlarmId);
+ delete reverseAlarmId;
+ break;
+ }
+ }
+ }
+ }
+
+ int count = 0;
+ __pAlarmHashMap->GetCount(*alarmAppId, count);
+ if(count == 0)
+ {
+ SysLog(NID_SYS, "There is no reserved alarm for AppId:%S", alarmAppId->GetPointer());
+ __pAlarmHashMap->Remove(*alarmAppId, true);
+ }
+ }
+ }
+ r = __pAlarmHashMap->Remove(requiredAlarmId, true);
+
+ return r;
+}
+
+result
+_AlarmManager::RemoveAlarmList(String appId)
+{
+ result r = E_SUCCESS;
+ Integer requiredAlarmId;
+ IEnumerator *pValueEnum = null;
+
+ SysTryReturnResult(NID_SYS, __pAlarmHashMap != null, E_SYSTEM, "Alarm list does not initialized");
+ pValueEnum = __pAlarmHashMap->GetValuesN(appId);
+
+ if(pValueEnum != null)
+ {
+ SysLog(NID_SYS, "Reserved Alarms are exist for AppId:%S", appId.GetPointer());
+ while(pValueEnum->MoveNext() == E_SUCCESS)
+ {
+ Integer* reverseAlarmId = static_cast< Integer* >(pValueEnum->GetCurrent());
+ if(reverseAlarmId != null)
+ {
+ SysLog(NID_SYS, "Reserved AlarmId is %d", reverseAlarmId->ToInt());
+ alarm_cancel(reverseAlarmId->ToInt());
+ __pAlarmHashMap->Remove(*reverseAlarmId, true);
+ }
+ }
+ delete pValueEnum;
+ }
+ r = __pAlarmHashMap->Remove(appId, true);
+
+ return r;
+}
+
result
_AlarmManager::RegisterAlarm(_AlarmImpl* pAlarmImpl)
{
String startTimeStr;
String periodStr;
String endTimeStr;
+ String appId;
int period = pAlarmImpl->GetPeriod();
- String serviceId = _ALARM_SERVICE_ID;
- String commandId = _ALARM_SET_SINGLEALARM;
- if(period > 0) //If period is 0, alarm is operated as Single alarm.
- {
- commandId = _ALARM_SET_REPEATEDALARM;
- }
-
DateTime currentTime;
DateTime startTime = pAlarmImpl->GetStartTime();
const DateTime* pEndTime = pAlarmImpl->GetEndTime();
- //Status check
- SysTryReturnResult(NID_SYS, __pIpcClient != null, E_INVALID_STATE, "This instance has not been constructed as yet.");
-
//Argument check
r = SystemTime::GetCurrentTime(WALL_TIME, currentTime);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is It is failed to get current time");
- SysTryReturnResult(NID_SYS, DateTime::Compare(currentTime, startTime) < 0, E_INVALID_ARG, "Designated start time has to be greater then current time");
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to get current time.");
+ SysTryReturnResult(NID_SYS, DateTime::Compare(currentTime, startTime) < 0, E_INVALID_ARG, "Designated start time has to be greater than current time.");
SysTryReturnResult(NID_SYS, period > -1, E_INVALID_ARG, "Period has to greater then -1");
if(pEndTime != null)
{
- SysTryReturnResult(NID_SYS, DateTime::Compare(startTime, *pEndTime) < 0, E_INVALID_ARG, "Designated end time is less then start time");
+ SysTryReturnResult(NID_SYS, DateTime::Compare(startTime, *pEndTime) < 0, E_INVALID_ARG, "Designated end time is less then start time.");
}
//End Alarm validation check
- //IPC data construction
- r = requestMessage.Construct();
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is failed to create request instance.");
- r = responseMessage.Construct();
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is failed to create response instance.");
-
- r = requestMessage.Add(serviceId);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is failed to add service id.");
- r = requestMessage.Add(commandId);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is failed to add command id.");
- startTimeStr = startTime.ToString();
- r = requestMessage.Add(startTimeStr);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is failed to add start time value.");
- periodStr.Append(period);
- r = requestMessage.Add(periodStr);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is failed to add period value.");
-
- if(pEndTime != null)
- {
- endTimeStr = pEndTime->ToString();
- r = requestMessage.Add(endTimeStr);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is failed to add end time value.");
- }
-
- std::unique_ptr<IoService_Request> pRequest(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
+ Tizen::App::App* pApp = Tizen::App::App::GetInstance();
+ SysTryReturnResult(NID_SYS, pApp != null, E_SYSTEM, "[%s] A system error has been occurred. App::GetInstance() failed.", GetErrorMessage(E_SYSTEM));
+ appId = pApp->GetAppId();
- //IPC data delivery
- r = __pIpcClient->SendRequest(pRequest.get());
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is It is failed to send ipc message.");
- SysLog(NID_SYS, "Alarm reqeust is deliverted to osp-app-service successfully.");
+ String* result = null;
+ int reservedAlarmId = 0;
- //IPC data response check
+ SysLog(NID_SYS, "Alarm setting request");
- String* pResult = (String*)responseMessage.GetAt(_ALARM_SERVICE_RESPONSE_DATA);
- SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "There is no result.");
- SysTryReturnResult(NID_SYS, *pResult == _ALARM_RESULT_OK, E_SYSTEM, "It is It is failed to register alarm. [%ls]", pResult->GetPointer());
+ reservedAlarmId = ReserveAlarm(appId, startTime, period);
+ SysTryReturnResult(NID_SYS, reservedAlarmId != -1, E_SYSTEM, "It is failed to register alarm.");
- String* pAlarmId = (String*)responseMessage.GetAt(_ALARM_SERVICE_ALARM_ID);
- SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "There is no alarmId.");
- SysLog(NID_SYS, "Reserved alarm id is %ls from osp-app-service.", pAlarmId->GetPointer());
+ SysLog(NID_SYS, "Reserved AppId %ls, alarmId: %d", appId.GetPointer(), reservedAlarmId);
- int registeredAlarmId = 0;
- Integer::Parse(*pAlarmId, registeredAlarmId);
+ if(pEndTime == null)
+ {
+ r = AddAlarmList(reservedAlarmId, period, appId, null);
+ }
+ else
+ {
+ r = AddAlarmList(reservedAlarmId, period, appId, const_cast<DateTime*>(pEndTime));
+ }
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add new alarm on the alarm list.");
- pAlarmImpl->__alarmId.value = registeredAlarmId;
+ pAlarmImpl->__alarmId.value = reservedAlarmId;
r = __alarmList.Add(&(pAlarmImpl->__alarmId), pAlarmImpl);
+
return r;
}
result
_AlarmManager::UnregisterAlarm(_AlarmImpl* pAlarmImpl)
{
+ SysLog(NID_SYS, "Alarm Cancel request");
+
result r = E_SUCCESS;
SysTryReturnResult(NID_SYS, pAlarmImpl != null, E_INVALID_ARG, "There is no alarmImpl.");
Integer alarmId(pAlarmImpl->__alarmId.value);
SysTryReturnResult(NID_SYS, __alarmList.ContainsKey(alarmId) == true, E_OBJ_NOT_FOUND, "There is no registered alarm.");
- r = __alarmList.Remove(alarmId);
-
- ArrayList requestMessage;
- ArrayList responseMessage;
- String serviceId(_ALARM_SERVICE_ID);
- String commandId(_ALARM_CANCEL);
-
- //Status check
- SysTryReturnResult(NID_SYS, __pIpcClient != null, E_INVALID_STATE, "This instance has not been constructed as yet.");
-
- //IPC data construction
- r = requestMessage.Construct();
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to create request instance");
- r = responseMessage.Construct();
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to create response instance");
-
- r = requestMessage.Add(serviceId);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add service id");
- r = requestMessage.Add(commandId);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add command id");
-
- String alarmIdStr;
- alarmIdStr.Append(alarmId.value);
-
- r = requestMessage.Add(alarmIdStr);
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add alarm id value");
- //IPC data delivery
- std::unique_ptr<IoService_Request> pRequest(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
-
- r = __pIpcClient->SendRequest(pRequest.get());
- SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send ipc message.");
- SysLog(NID_SYS, "Alarm cancel reqeust is deliverted to osp-app-service successfully");
+ r = __alarmList.Remove(alarmId);
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to remove reserved alarmImpl instance.");
- //IPC data response check
- String* pResult = (String*)responseMessage.GetAt(_ALARM_SERVICE_RESPONSE_DATA);
-
- SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "It is failed to receive Ipc response");
- SysTryReturnResult(NID_SYS, *pResult == _ALARM_RESULT_OK, E_SYSTEM, "It is failed to cancel alarm");
+ r = RemoveAlarmList(alarmId.ToInt());
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to remove reserved alarm list.");
return r;
}
Integer alarmId(pAlarmImpl->__alarmId.value);
SysTryReturnResult(NID_SYS, __alarmList.ContainsKey(alarmId) == true, E_OBJ_NOT_FOUND, "There is no registered alarm.");
- UnregisterAlarm(pAlarmImpl);
- RegisterAlarm(pAlarmImpl);
+ r = UnregisterAlarm(pAlarmImpl);
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to unregister reserved alarm list.");
+
+ r = RegisterAlarm(pAlarmImpl);
return r;
}
void
-_AlarmManager::OnDataReceived(const Tizen::Base::Collection::ArrayList& data)
+_AlarmManager::OnAlarmExpired(int alarmId)
{
- SysLog(NID_SYS, "IPC message is delivered.");
- String alarmIdStr;
-
- String* pServiceId = (String*) data.GetAt(_ALARM_SERVICE_IPC_MESSAGE_SERVICE_ID);
- String* pCommandId = (String*) data.GetAt(_ALARM_SERVICE_IPC_MESSAGE_COMMAND_ID);
- String* pData = (String*) data.GetAt(_ALARM_SERVICE_RESPONSE_DATA);
+ result r = E_SUCCESS;
+ String* pAppId = null;
+ Integer* pPeriod = null;
+ std::unique_ptr<IEnumerator> pValueEnum(null);
+ Integer reservedAlarmId(alarmId);
+ DateTime* endTime = null;
- SysLog(NID_SYS, "IPC message is delivered.");
- String serviceId(_ALARM_SERVICE_ID);
- String commandId(_ALARM_EXPIRED_EVENT);
+ SysTryReturnVoidResult(NID_SYS, __pAlarmHashMap != null, E_SYSTEM, "Alarm list does not initialized");
+ pValueEnum.reset(__pAlarmHashMap->GetValuesN(reservedAlarmId));
- SysTryReturnVoidResult(NID_SYS, pServiceId != null && pCommandId != null && pData != null, E_SYSTEM, "There is no device data.");
+ SysLog(NID_SYS, "Alarm expire event is delivered. alarm id is %d", alarmId);
- if(*pServiceId == serviceId && *pCommandId == commandId)
+ if(pValueEnum != null)
{
- SysLog(NID_SYS, "Alarm expire event is delivered.");
- int alarmId = 0;
- Integer::Parse(*pData, alarmId);
+ String alarmAppId;
+ SysLog(NID_SYS, "Matching Alarm Id is %d \n", alarmId);
+ r = pValueEnum->MoveNext();
+ SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Alarm enum value is not valid.");
+ pAppId = static_cast< String* >(pValueEnum->GetCurrent());
+ alarmAppId.Append(*pAppId);
+ r = pValueEnum->MoveNext();
+ pPeriod = static_cast< Integer* >(pValueEnum->GetCurrent());
+ SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Alarm enum value is not valid.");
+
+ if(pValueEnum->MoveNext() == E_SUCCESS)
+ {
+ endTime = static_cast< DateTime* >(pValueEnum->GetCurrent());
+ }
- Integer reservedAlarmId(alarmId);
+ SysLog(NID_SYS, "Reserved Alarm AppId:%ls, Period:%d\n", pAppId->GetPointer(), pPeriod->ToInt());
- _AlarmImpl* pAlarmImpl = (_AlarmImpl*)__alarmList.GetValue(reservedAlarmId);
- if(pAlarmImpl != null)
+ if (pPeriod->ToInt() > 0)
+ {
+ if(endTime != null)
+ {
+ DateTime currentTime;
+ SystemTime::GetCurrentTime(WALL_TIME, currentTime);
+ SysLog(NID_SYS, "Current time: %d:%d:%d", currentTime.GetHour(), currentTime.GetMinute(), currentTime.GetSecond());
+ currentTime.AddMinutes(pPeriod->ToInt());
+ SysLog(NID_SYS, "Next time: %d:%d:%d", currentTime.GetHour(), currentTime.GetMinute(), currentTime.GetSecond());
+ SysLog(NID_SYS, "Endtime is exist %d:%d:%d", endTime->GetHour(), endTime->GetMinute(), endTime->GetSecond());
+
+ if (currentTime.CompareTo(*endTime) >= 0)
+ {
+ SysLog(NID_SYS, "Next time is greater then end time.");
+ RemoveAlarmList(alarmId);
+ pValueEnum->Reset();
+ }
+ }
+ }
+ else if (pPeriod->ToInt() == 0)
{
- SysLog(NID_SYS, "Reserved Alarm[%d] is found.", alarmId);
- pAlarmImpl->OnAlarmExpired(alarmId);
+ RemoveAlarmList(alarmId);
}
+ else
+ {
+ pValueEnum->Reset();
+ }
+ }
+
+ _AlarmImpl* pAlarmImpl = (_AlarmImpl*)__alarmList.GetValue(reservedAlarmId);
+ if(pAlarmImpl != null)
+ {
+ SysLog(NID_SYS, "Reserved Alarm[%d] is found.", alarmId);
+ pAlarmImpl->OnAlarmExpired(alarmId);
}
+
+ if(__pAlarmHashMap->ContainsKey(reservedAlarmId) == false)
+ {
+ r = __alarmList.Remove(reservedAlarmId);
+ SetLastResult(r);
+ }
+
+ return;
}
} } // Tizen::System