#include <FBaseSysLog.h>
#include <FSysSystemTime.h>
+#include <FAppApp.h>
+#include <FBaseColArrayList.h>
#include <FBase_NativeError.h>
-#include <FAppApp.h>
#include <FBase_StringConverter.h>
#include "inc/FSys_AlarmManager.h"
alarm_cancel_all();
}
+int alarm_callback(alarm_id_t alarmId, void *user_param)
+{
+ _AlarmManager* pAlarmManager = _AlarmManager::GetInstance();
+ pAlarmManager->OnAlarmExpired((int)alarmId);
+ return 0;
+}
+
+result
+_AlarmManager::Construct(void)
+{
+ int errorCode;
+ Tizen::App::App* pApp = null;
+ pApp = Tizen::App::App::GetInstance();
+ String appId = pApp->GetAppId();
+ std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
+
+ errorCode = alarmmgr_init(pAppId.get());
+ SysTryReturnResult(NID_SYS, errorCode == ALARMMGR_RESULT_SUCCESS, E_SYSTEM, "It is failed to init alarmmgr. error [%d]", errorCode);
+ errorCode = alarmmgr_set_cb(alarm_callback, null);
+ SysTryReturnResult(NID_SYS, errorCode == ALARMMGR_RESULT_SUCCESS, E_SYSTEM, "It is failed to set cb to alarmmgr. error [%d]", errorCode);
+ return E_SUCCESS;
+}
+
_AlarmManager*
_AlarmManager::GetInstance(void)
{
void
_AlarmManager::InitSingleton(void)
{
- _AlarmManager* pAlarmManager = new (std::nothrow) _AlarmManager();
+ result r = E_SUCCESS;
+ std::unique_ptr<_AlarmManager> pAlarmManager(new (std::nothrow) _AlarmManager());
SysTryReturnVoidResult(NID_SYS, pAlarmManager, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.",
GetErrorMessage(E_OUT_OF_MEMORY));
-
- __pAlarmManager = pAlarmManager;
+ r = pAlarmManager->Construct();
+ SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to construct alarm manager.");
+ __pAlarmManager = pAlarmManager.release();
std::atexit(DestroySingleton);
}
ret = alarmmgr_set_type(pAlarmInfo, 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);
+ ret = alarmmgr_add_alarm_with_localtime(pAlarmInfo, null, &reservedAlarmId);
SysTryCatch(NID_SYS, ret == ALARMMGR_RESULT_SUCCESS, r = E_SYSTEM, r, "Alarm creation failed!!! Alrmgr error code is %d", ret);
CATCH:
_AlarmManager::UpdateAlarm(_AlarmImpl* pAlarmImpl)
{
result r = E_SUCCESS;
- int ret = 0;
Integer alarmId;
- SysTryCatch(NID_SYS, pAlarmImpl != null, r = E_INVALID_ARG, r, "There is no alarmImpl.");
-
- ret = pthread_mutex_lock(&__lock);
- SysTryCatch(NID_SYS, ret == 0, r = E_SYSTEM, r, "It is failed to lock mutex.");
+ SysTryReturnResult(NID_SYS, pAlarmImpl != null, E_SYSTEM, "There is no alarmImpl.");
alarmId.value = pAlarmImpl->__alarmId.value;
- SysTryCatch(NID_SYS, __alarmList.ContainsKey(alarmId) == true, r = E_OBJ_NOT_FOUND, r, "There is no registered alarm.");
+ SysTryReturnResult(NID_SYS, __alarmList.ContainsKey(alarmId) == true, E_SYSTEM, "There is no registered alarm.");
r = UnregisterAlarm(pAlarmImpl);
- SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to unregister reserved alarm list.");
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to unregister reserved alarm list.");
r = RegisterAlarm(pAlarmImpl);
-CATCH:
- ret = pthread_mutex_unlock(&__lock);
- SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "It is failed to unlock mutex.");
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to register alarm.");
return r;
}
_AlarmImpl* pAlarmImpl = null;
SysTryCatch(NID_SYS, __pAlarmHashMap != null, r = E_SYSTEM, r, "Alarm list does not initialized");
+
+ ret = pthread_mutex_lock(&__lock);
+ SysTryReturnVoidResult(NID_SYS, ret == 0, E_SYSTEM, "It is failed to lock mutex.");
+
pValueEnum.reset(__pAlarmHashMap->GetValuesN(reservedAlarmId));
SysLog(NID_SYS, "Alarm expire event is delivered. alarm id is %d", alarmId);
if(pValueEnum != null)
{
- ret = pthread_mutex_lock(&__lock);
- SysTryCatch(NID_SYS, ret == 0, r = E_SYSTEM, r, "It is failed to lock mutex.");
-
SysLog(NID_SYS, "Matching Alarm Id is %d \n", alarmId);
+
r = pValueEnum->MoveNext();
SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "Alarm enum value is not valid.");
pAppId = static_cast< String* >(pValueEnum->GetCurrent());
pValueEnum->Reset();
}
- ret = pthread_mutex_unlock(&__lock);
}
+ ret = pthread_mutex_unlock(&__lock);
+
if(pAlarmImpl != null)
{
pAlarmImpl->OnAlarmExpired(alarmId);
SetLastResult(r);
}
+ return;
+
CATCH:
ret = pthread_mutex_unlock(&__lock);
SysTryReturnVoidResult(NID_SYS, ret == 0, E_SYSTEM, "It is failed to unlock mutex.");