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 FApp_AppImpl.cpp
19 * @brief This is the implementation for the _AppImpl class.
22 #include <unique_ptr.h>
24 #include <notification/notification.h>
25 #include <appsvc/appsvc.h>
28 #include <FBaseInteger.h>
29 #include <FBaseColArrayList.h>
30 #include <FBaseColHashMap.h>
31 #include <FBaseRtThread.h>
32 #include <FAppAppRegistry.h>
33 #include <FAppAppControl.h>
34 #include <FAppDataControlProviderManager.h>
35 #include <FAppIAppCheckPointEventListener.h>
36 #include <FAppISqlDataControlProviderEventListener.h>
37 #include <FAppIMapDataControlProviderEventListener.h>
38 #include <FAppIAppControlProviderEventListener.h>
39 #include <FAppIAppLaunchConditionEventListener.h>
42 #include <FBaseSysLog.h>
43 #include <FIo_RegistryImpl.h>
44 #include <FSys_EnvironmentImpl.h>
45 #include <FSys_PowerManagerImpl.h>
47 #include <FSys_AlarmManager.h>
49 #include "FApp_IAppManager.h"
50 #include "FApp_AppManagerProxy.h"
51 #include "FApp_AppImpl.h"
52 #include "FApp_AppInfo.h"
53 #include "FApp_AppControlManager.h"
54 #include "FApp_AppArg.h"
55 #include "FApp_IAppImpl.h"
56 #include "FApp_AppResourceImpl.h"
58 using namespace Tizen::Base;
59 using namespace Tizen::Base::Collection;
60 using namespace Tizen::Base::Runtime;
61 using namespace Tizen::Io;
62 using namespace Tizen::System;
67 const int HEARTBEAT_WAIT_COUNT = 3;
68 const wchar_t SERVICE_APPID[] = L"aospd00043.osp-app-service";
69 const char SELECTOR_RESPONSE_KEY[] = "__APP_SVC_START_INFO__";
70 const wchar_t FILE_SCHEME_WITH_DELIMITER[] = L"file://";
71 #ifndef VCONFKEY_APPSERVICE_STATUS
72 #define VCONFKEY_APPSERVICE_STATUS "memory/appservice/status"
77 namespace Tizen { namespace App
80 _AppImpl* _AppImpl::__pAppImpl = null;
81 bool _AppImpl::__isTerminationRequested = false;
83 static const int _DATACONTROL_PACKET_INDEX_APPID = 0;
84 static const int _DATACONTROL_PACKET_INDEX_REQUESTTYPE = 1;
85 static const int _DATACONTROL_PACKET_INDEX_REQID = 2;
86 static const int _DATACONTROL_PACKET_INDEX_PROVIDERID = 3;
88 static const int _DATACONTROL_PACKET_INDEX_DATAID = 0;
89 static const int _DATACONTROL_PACKET_INDEX_COLUMNCOUNT = 1;
90 static const int _DATACONTROL_PACKET_INDEX_DELETEWHERE = 1;
91 static const int _DATACONTROL_PACKET_INDEX_MAPKEY = 1;
92 static const int _DATACONTROL_PACKET_INDEX_COLUMNLIST = 2;
93 static const int _DATACONTROL_PACKET_INDEX_INSERTMAP = 2;
94 static const int _DATACONTROL_PACKET_INDEX_UPDATEMAP = 2;
98 void operator()(char* pValue)
108 _AppImpl::_AppImpl(App* pApp)
109 : __pCheckpointEventListener(null)
110 , __pSqlDataControlProviderEventListener(null)
111 , __pMapDataControlProviderEventListener(null)
112 , __pAppControlProviderEventListener(null)
113 , __pAppControlProviderInternalEventListener(null)
114 , __pAppLaunchConditionEventListener(null)
117 , __pRequestHandler(&_AppImpl::HandleAppRequest)
118 , __pLegacyRequestHandler(&_AppImpl::HandleDummyAppRequest)
119 , __forcedTermination(false)
126 _AppImpl::Construct(const IList* pArgs)
128 SysTryReturnResult(NID_APP, pArgs != null, E_INVALID_ARG, "pArguments must not be null.");
129 SysAssertf(__pApp != null, "Getting App instance failed.");
131 result r = __appUserEvent.Construct();
132 SysTryLog(NID_APP, !IsFailed(r), "[%s] User event handler failure.", GetErrorMessage(r));
134 __appUserEvent.AddListener(*this);
136 _AppInfo::SetAppState(INITIALIZING);
143 _AppImpl::Execute(_IAppImpl* pIAppImpl)
145 SysLogTag(NID_APP, "LAUNCH","[%ls:<Initialize Application>:start]", _AppInfo::GetAppExecutableName().GetPointer());
146 result r = E_SUCCESS;
147 int eflResult = APP_ERROR_NONE;
148 int argc = _AppInfo::GetArgc();
149 char** pArgv = _AppInfo::GetArgv();
150 _IAppManager* pAppManager = null;
152 _AppImpl* pAppImpl = _AppImpl::GetInstance();
153 SysTryReturnResult(NID_APP, pAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
154 pAppImpl->__pIAppImpl = pIAppImpl;
156 // handle legacy version handling
157 if (_AppInfo::GetApiVersion() == _API_VERSION_2_0 && _AppInfo::IsOspCompat())
159 pAppImpl->SetLegacyRequestHandler();
162 app_event_callback_s state_handler;
163 memset(&state_handler, 0, sizeof(app_event_callback_s));
165 state_handler.create = &OnCreate;
166 state_handler.service = &OnService;
167 state_handler.terminate = &OnTerminate;
168 state_handler.pause = &OnPause;
169 state_handler.resume = &OnResume;
170 state_handler.device_orientation = NULL;
172 state_handler.low_memory = &OnLowMemory;
173 state_handler.low_battery = NULL;
174 state_handler.language_changed = &OnLanguageChanged;
175 state_handler.region_format_changed = NULL;
177 _Aul::SetPowerOffNotiListener(OnPowerOffNotiReceived, this);
178 // if (pAppManager != null)
180 // r = pAppManager->RegisterApplication(_AppInfo::GetPackageId(), _AppInfo::GetAppExecutableName(), _AppInfo::GetAppType() , _AppInfo::GetProcessId());
181 // SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Application registration failed.", GetErrorMessage(r));
184 eflResult = app_efl_main(&argc, &pArgv, &state_handler, this);
186 SysTryLog(NID_APP, eflResult == APP_ERROR_NONE, "app_efl_main failed with error (%d): Unknown", eflResult);
188 // clear outstanding ongoing notification
189 notification_delete_all_by_type(NULL, NOTIFICATION_TYPE_ONGOING);
192 pAppManager = _AppManagerProxy::GetService();
194 if (pAppManager != null)
196 pAppManager->UnregisterApplication(_AppInfo::GetProcessId());
204 _AppImpl::OnCreate(void* user_data)
206 SysLog(NID_APP, "Platform creation event.");
208 _AppImpl* pAppImpl = static_cast<_AppImpl*>(user_data);
209 if (pAppImpl == null)
211 _AppInfo::SetAppState(TERMINATED);
212 SysLogException(NID_APP, E_INIT_FAILED, "[E_INIT_FAILED] Invalid platform state.");
216 _AppInfo::SetAppState(INITIALIZING);
218 if (!ConfirmAppService())
220 _AppInfo::SetAppState(TERMINATED);
221 SysLogException(NID_APP, E_INIT_FAILED, "[E_INIT_FAILED] Osp AppService is not running.");
225 SysLogTag(NID_APP, "LAUNCH","[%ls:<OnAppInitializing>:start]", _AppInfo::GetAppExecutableName().GetPointer());
226 if (!pAppImpl->__pIAppImpl->OnAppInitializing())
228 _AppInfo::SetAppState(TERMINATED);
229 SysLogException(NID_APP, E_INIT_FAILED, "[E_INIT_FAILED] The initialization of your application failed.");
232 SysLogTag(NID_APP, "LAUNCH","[%ls:<OnAppInitializing>:done]", _AppInfo::GetAppExecutableName().GetPointer());
234 SysLogTag(NID_APP, "LAUNCH","[%ls:<RegisterApplication>:start]", _AppInfo::GetAppExecutableName().GetPointer());
235 _IAppManager* pAppManager = _AppManagerProxy::GetService();
237 if (pAppManager != null)
239 result r = pAppManager->RegisterApplication(_AppInfo::GetPackageId(), _AppInfo::GetAppExecutableName(), static_cast<_AppType>(_AppInfo::GetAppType()), _AppInfo::GetProcessId());
240 SysTryLog(NID_APP, !IsFailed(r), "[%s] Application registration failed.", GetErrorMessage(r));
242 SysLogTag(NID_APP, "LAUNCH","[%ls:<RegisterApplication>:done]", _AppInfo::GetAppExecutableName().GetPointer());
243 // hide splash window
245 _PowerManagerImpl::InitBatteryEvent();
252 _AppImpl::OnService(service_s* service, void* user_data)
254 _AppImpl* pAppImpl = _AppImpl::GetInstance();
255 SysTryReturnVoidResult(NID_APP, pAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
256 SysTryReturnVoidResult(NID_APP, pAppImpl->__pIAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
258 // ugly code for app selector event handling
259 bundle* pBundle = _AppArg::GetBundleFromSvc(service);
262 const char* pValue = appsvc_get_data(pBundle, SELECTOR_RESPONSE_KEY);
265 const int req = _AppArg::GetRequestIdFromBundle(pBundle);
267 const char* pOperation = appsvc_get_operation(pBundle);
269 SysLog(NID_APP, "App selector response [%s, %s], req(%d).", pValue, pOperation, req);
271 //_AppArg::Print(pBundle);
272 _AppControlManager::GetInstance()->SendAppControlStartResponse(req, pValue, pOperation);
277 //_AppArg::Print(pBundle);
279 _AppHandler handler = _APP_HANDLER_NONE;
280 pAppImpl->RegisterAppRequest(service, req, handler);
282 bool initialLaunch = false;
285 // (1) AppControl / DataControl provider listener
286 // (2) OnAppInitialized()
287 // (3) OnResume() (OnForeground()) (UiApp only)
288 // (4) OnUserEventReceivedN()
291 // (1) AppControl / DataControl provider listener
292 // (2) OnResume() (OnForeground()) (UiApp only)
293 // (3) OnUserEventReceivedN()
295 if (_AppInfo::GetAppState() == INITIALIZING)
297 initialLaunch = true;
299 unsigned int winId = 0;
300 service_get_window(service, &winId);
303 _AppInfo::GetAppInfo()->SetParentWindowHandle(winId);
304 SysLog(NID_APP, "Saving window handle 0x%x.", winId);
306 // call for callbacks
307 // ptr to member function
308 SysLogTag(NID_APP, "LAUNCH","[%ls:<RequestHandler and OnAppInitialized>:start]", _AppInfo::GetAppExecutableName().GetPointer());
309 (pAppImpl->*pAppImpl->__pRequestHandler)(service, req, handler);
311 if (!pAppImpl->__pIAppImpl->OnAppInitialized())
313 _AppInfo::SetAppState(TERMINATING);
314 SysLog(NID_APP, "[E_INIT_FAILED] The Initialization of your application failed.");
318 SysLogTag(NID_APP, "LAUNCH","[%ls:<RequestHandler and OnAppInitialized>:done]", _AppInfo::GetAppExecutableName().GetPointer());
320 _AppInfo::SetAppState(RUNNING);
322 SysLogTag(NID_APP, "LAUNCH","[%ls:<Initialize Application>:done]", _AppInfo::GetAppExecutableName().GetPointer());
328 // call for callbacks
329 // ptr to member function
330 (pAppImpl->*pAppImpl->__pRequestHandler)(service, req, handler);
332 std::unique_ptr<char[], charDeleter> pOperation(null);
335 int errVal = service_get_operation(service, &pBuf);
336 pOperation.reset(pBuf);
338 if((errVal == SERVICE_ERROR_NONE) && (!strcmp((const char*)pOperation.get(), "osp.operation.ALARM")))
340 std::unique_ptr<char[], charDeleter> pAlarmId(null);
343 errVal = service_get_extra_data(service, SERVICE_DATA_ALARM_ID, &pBuf);
344 pAlarmId.reset(pBuf);
345 SysTryReturnVoidResult(NID_SYS, errVal == SERVICE_ERROR_NONE, E_SYSTEM, "It is failed to get reserved alarm id.");
346 int alarmId = atoi((const char*)pAlarmId.get());
348 _AlarmManager* pAlarmManager = _AlarmManager::GetInstance();
349 pAlarmManager->OnAlarmExpired(alarmId);
355 pAppImpl->__pIAppImpl->OnService(service, initialLaunch);
357 // ptr to member function
358 (pAppImpl->*pAppImpl->__pLegacyRequestHandler)(service, req, handler);
363 _AppImpl::OnTerminate(void* user_data)
365 SysLog(NID_APP, "Termination event 0x%x state", _AppInfo::GetAppState());
367 _AppImpl* pAppImpl = _AppImpl::GetInstance();
368 SysTryReturnVoidResult(NID_APP, pAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
369 SysTryReturnVoidResult(NID_APP, pAppImpl->__pIAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
371 __isTerminationRequested = true;
372 pAppImpl->__pIAppImpl->OnTerminate();
377 _AppImpl::OnResume(void* user_data)
379 SysLog(NID_APP, "System resume event on 0x%x state", _AppInfo::GetAppState());
380 SysLogTag(NID_APP, "LAUNCH","[%ls:<OnResume>:start]", _AppInfo::GetAppExecutableName().GetPointer());
382 _AppImpl* pAppImpl = _AppImpl::GetInstance();
383 SysTryReturnVoidResult(NID_APP, pAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
384 SysTryReturnVoidResult(NID_APP, pAppImpl->__pIAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
385 pAppImpl->__pIAppImpl->OnResume();
386 SysLogTag(NID_APP, "LAUNCH","[%ls:<OnResume>:done]", _AppInfo::GetAppExecutableName().GetPointer());
391 _AppImpl::OnPause(void* user_data)
393 SysLog(NID_APP, "System pause event on 0x%x state", _AppInfo::GetAppState());
394 SysLogTag(NID_APP, "LAUNCH","[%ls:<OnPause>:start]", _AppInfo::GetAppExecutableName().GetPointer());
396 _AppImpl* pAppImpl = _AppImpl::GetInstance();
397 SysTryReturnVoidResult(NID_APP, pAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
398 SysTryReturnVoidResult(NID_APP, pAppImpl->__pIAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
399 pAppImpl->__pIAppImpl->OnPause();
400 pAppImpl->OnAppCheckpoint();
401 SysLogTag(NID_APP, "LAUNCH","[%ls:<OnPause>:done]", _AppInfo::GetAppExecutableName().GetPointer());
405 _AppImpl::~_AppImpl(void)
412 _AppImpl::GetInstance(void)
419 _AppImpl::GetAppInstance(void)
426 _AppImpl::GetAppArgumentListN(void) const
428 ArrayList* pList = null;
429 const _AppArg* pArg = _AppControlManager::GetInstance()->FindResultRequest(0);
433 pList = pArg->GetArgListN(0);
438 pList = new (std::nothrow) ArrayList();
439 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
440 String* pData = new (std::nothrow) String(LEGACY_LAUNCH_REASON_NORMAL);
441 SysTryReturn(NID_APP, pData != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
442 String* pData2 = new (std::nothrow) String(L"osp.operation.MAIN");
443 SysTryReturn(NID_APP, pData2 != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
455 _AppImpl::Terminate(void)
457 result r = E_SUCCESS;
459 __isTerminationRequested = true;
467 _AppImpl::OnAppInitializing(void)
474 _AppImpl::OnAppWillTerminate(void)
476 SysTryReturn(NID_APP, __pApp != null, false, E_INVALID_STATE, "[E_INVALID_STATE] Getting internal instance failed.");
478 return __pApp->OnAppWillTerminate();
483 _AppImpl::RegisterAppRequest(service_s* service, int& req, _AppHandler& handler)
485 _AppControlManager* pManager = _AppControlManager::GetInstance();
486 SysTryReturnResult(NID_APP, pManager != null, E_SYSTEM, "Wrong system state.");
488 result r = pManager->RegisterRequest(service, req, handler);
489 SysTryReturn(NID_APP, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
491 int providerType = _AppInfo::GetAppHandlerType();
492 providerType |= (_APP_HANDLER_LAUNCH_NORMAL | _APP_HANDLER_LAUNCH_COND);
494 SysTryLog(NID_APP, (handler & providerType) != 0, "Request 0x%x received for 0x%x.", handler,
495 _AppInfo::GetAppHandlerType());
501 _AppImpl::HandleAppRequest(service_s* service, int req, _AppHandler handler)
503 const _AppArg* pArg = _AppControlManager::GetInstance()->FindResultRequest(req);
504 SysTryReturnResult(NID_APP, pArg != null, E_SYSTEM, "No argument found for %d.", req);
510 case _APP_HANDLER_DATACONTROL:
511 SysLog(NID_APP, "Handling DataControl request");
513 OnDataControlRequestReceived(*pArg, static_cast< RequestId >(req));
515 //_AppControlManager::GetInstance()->RemoveResultRequest(req);
518 case _APP_HANDLER_LAUNCH_COND:
519 SysLog(NID_APP, "Handling conditional launch request");
521 OnConditionRequestReceived(*pArg, static_cast< RequestId >(req));
525 SysLog(NID_APP, "Handling AppControl request");
527 OnAppControlRequestReceived(*pArg, static_cast< RequestId >(req));
536 _AppImpl::HandleLegacyAppRequest(service_s* service, int req, _AppHandler handler)
538 const _AppArg* pArg = _AppControlManager::GetInstance()->FindResultRequest(0);
539 SysTryReturnResult(NID_APP, pArg != null, E_SYSTEM, "No argument found for %d.", req);
545 case _APP_HANDLER_LAUNCH_NORMAL:
546 SysLog(NID_APP, "Handling normal launch request");
547 OnUserEventReceivedN(AppLaunchRequestId, pArg->GetArgListN(req), true);
549 // [TODO] request handle memory cleanup confirm
550 _AppControlManager::GetInstance()->RemoveResultRequest(req);
553 case _APP_HANDLER_LAUNCH_COND:
554 SysLog(NID_APP, "Handling conditional launch request");
556 OnUserEventReceivedN(AppLaunchRequestId, pArg->GetArgListN(req), true);
558 // [TODO] request handle memory cleanup confirm
559 _AppControlManager::GetInstance()->RemoveResultRequest(req);
571 _AppImpl::HandleDummyAppRequest(service_s* service, int req, _AppHandler handler)
573 SysLog(NID_APP, "Dummy handler");
580 _AppImpl::SetLegacyRequestHandler(void)
582 SysLog(NID_APP, "Setting request handler for legacy application.");
584 __pRequestHandler = &_AppImpl::HandleDummyAppRequest;
585 __pLegacyRequestHandler = &_AppImpl::HandleLegacyAppRequest;
592 _AppImpl::OnLowMemory(void* user_data)
594 _AppImpl* pAppImpl = _AppImpl::GetInstance();
596 SysTryReturnVoidResult(NID_APP, pAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting internal instance failed.");
597 SysTryReturnVoidResult(NID_APP, pAppImpl->__pApp != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting internal instance failed.");
599 if (_AppInfo::GetAppState() == RUNNING)
601 pAppImpl->__pApp->OnLowMemory();
607 _AppImpl::OnBatteryLevelChanged(BatteryLevel batteryLevel)
609 SysTryReturnVoidResult(NID_APP, __pApp != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting internal instance failed.");
611 __pApp->OnBatteryLevelChanged(batteryLevel);
615 _AppImpl::OnLanguageChanged(void* user_data)
618 _AppInfo::UpdatePackageInfo(true);
620 _AppResourceImpl::Reinitialize();
621 SysLog(NID_APP, "Language change done.");
626 _AppImpl::SendUserEvent(RequestId requestId, const IList* pArgs, bool isPublic)
628 _AppUserEventArg* pArg = new (std::nothrow) _AppUserEventArg(requestId, pArgs, isPublic);
629 SysTryReturnResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "User event creation failure for %d.", requestId);
631 result r = __appUserEvent.FireAsync(*pArg);
638 _AppImpl::OnUserEventReceivedN(RequestId requestId, IList* pArgs, bool isPublic)
640 SysTryReturnVoidResult(NID_APP, __pApp != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting internal instance failed.");
644 __pApp->OnUserEventReceivedN(requestId, pArgs);
650 case _APP_EVENT_TERMINATE:
651 SysLog(NID_APP, "App terminate is requested.");
654 case _APP_EVENT_RAISE:
655 SysLog(NID_APP, "App raise is requested.");
659 SysLog(NID_APP, "Unknown event : 0x%x.", requestId);
667 _AppImpl::OnAppControlRequestReceived(const _AppArg& arg, RequestId reqId)
669 IAppControlProviderEventListener* pAppControlProviderEventListener = null;
671 const String internalOperation = arg.GetValue(OSP_K_APPCONTROL_INTERNAL_OPERATION);
672 if( !internalOperation.IsEmpty() )
674 SysLog(NID_APP, "internalOperation:%ls", internalOperation.GetPointer() );
675 pAppControlProviderEventListener = __pAppControlProviderInternalEventListener;
679 pAppControlProviderEventListener = __pAppControlProviderEventListener;
682 if( pAppControlProviderEventListener == null)
684 SysLog(NID_APP, "No AppControl provider event listener set for request %d.", reqId);
688 const String& appId = _AppInfo::GetApplicationId();
690 const char* p = appsvc_get_operation(arg.GetBundle());
691 String operationId = (p) ? String(p) : TIZEN_OPERATION_MAIN;
692 if (operationId == L"http://tizen.org/appcontrol/operation/default")
694 operationId = TIZEN_OPERATION_MAIN;
697 SysLog(NID_APP, "AppControl (%ls, %ls).", appId.GetPointer(), operationId.GetPointer());
701 const String* pUri = null;
702 const String* pMime = null;
703 p = appsvc_get_uri(arg.GetBundle());
709 // SLP deals with the URI as plain /opt/.../a.jpg.
710 uri.Insert(FILE_SCHEME_WITH_DELIMITER, 0);
714 SysLog(NID_APP, "Delivered uri is [%ls].", pUri->GetPointer());
717 p = appsvc_get_mime(arg.GetBundle());
724 std::unique_ptr<HashMap> pMap(arg.GetArgMapN());
726 pAppControlProviderEventListener->OnAppControlRequestReceived(reqId, operationId, pUri, pMime, pMap.get());
728 SysLog(NID_APP, "AppControl (%ls, %ls) invocation finished.", appId.GetPointer(), operationId.GetPointer());
733 _AppImpl::OnDataControlRequestReceived(const _AppArg& arg, RequestId reqId)
736 ISqlDataControlProviderEventListener* pSqlListener = null;
737 IMapDataControlProviderEventListener* pMapListener = null;
738 ArrayList* pColumnList = null;
739 HashMap* pInsertMap = null;
740 HashMap* pUpdateMap = null;
745 String* pDataId = null;
747 String* pColumnCount = null;
748 String* pColumn = null;
749 String* pValue = null;
750 String* pWhere = null;
751 String* pOrder = null;
752 String* pErrorMsg = null;
754 String* pCount = null;
755 String* pTmpPath = null;
756 String empty(L"NULL");
759 _DataControlRequestType requestType = _DATACONTROL_REQUEST_TYPE_UNDEFINED;
762 int countPerPage = 0;
765 result r = E_SUCCESS;
766 result res = E_SUCCESS;
767 ArrayList* pList = null;
769 String* pNewValue = null;
770 String* pOldValue = null;
772 SysLog(NID_APP, "[DC_PROV_RECV] Data control request is received.");
773 //arg.Print(); // request info
776 appId = arg.GetCallerAppId();
778 reqType = arg.GetValue(OSP_K_DATACONTROL_REQUEST_TYPE);
779 Integer::Parse(reqType, type);
780 requestType = static_cast< _DataControlRequestType >(type);
782 version = arg.GetValue(OSP_K_DATACONTROL_PROTOCOL_VERSION);
783 callerReqId = arg.GetValue(OSP_K_REQUEST_ID);
784 providerId = arg.GetValue(OSP_K_DATACONTROL_PROVIDER);
786 // list-based request
787 pList = _AppArg::GetListN(arg.GetBundle(), OSP_K_ARG);
788 SysTryCatch(NID_APP, pList, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid result object");
790 pDataId = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_DATAID));// request list[0]: data ID
791 SysTryCatch(NID_APP, pDataId, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
793 if (requestType >= _DATACONTROL_REQUEST_TYPE_SQL_QUERY && requestType <= _DATACONTROL_REQUEST_TYPE_SQL_DELETE)
795 pSqlListener = __pSqlDataControlProviderEventListener;
796 SysTryCatch(NID_APP, pSqlListener != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
798 else if (requestType >= _DATACONTROL_REQUEST_TYPE_MAP_QUERY && requestType <= _DATACONTROL_REQUEST_TYPE_MAP_DELETE)
800 pKey = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_MAPKEY)); // request list[1]
801 SysTryCatch(NID_APP, pKey, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
803 pMapListener = __pMapDataControlProviderEventListener;
804 SysTryCatch(NID_APP, pMapListener != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
808 SysLogException(NID_APP, E_SYSTEM, "[E_SYSTEM] invalid request");
814 case _DATACONTROL_REQUEST_TYPE_SQL_QUERY:
815 SysLog(NID_APP, "[DC_PROV_RECV] SqlDataControl SELECT");
817 // request list[1]: selected column count
818 pColumnCount = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_COLUMNCOUNT));
819 SysTryCatch(NID_APP, pColumnCount, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
821 if (pColumnCount->Equals(empty) == true)
827 Integer::Parse(*pColumnCount, columnCount);
828 pColumnList = new (std::nothrow) ArrayList();
829 SysTryReturnVoidResult(NID_APP, pColumnList, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
830 pColumnList->Construct();
831 SysLog(NID_APP, "[DC_PROV_RECV] selected column count: %d", columnCount);
834 while (i < columnCount) // request list[2]: column list
836 pColumn = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_COLUMNLIST + i));
837 SysTryCatch(NID_APP, pColumn != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
839 pColumnList->Add(*(new String(*pColumn)));
840 SysLog(NID_APP, "[DC_PROV_RECV] column[%d]: %ls", i, pColumn->GetPointer());
845 i += _DATACONTROL_PACKET_INDEX_COLUMNLIST;
846 pWhere = dynamic_cast< String* >(pList->GetAt(i)); // request list: where clause
847 SysTryCatch(NID_APP, pWhere, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
849 if (pWhere->Equals(empty) == true)
855 SysLog(NID_APP, "[DC_PROV_RECV] pWhere: %ls", pWhere->GetPointer());
859 pOrder = dynamic_cast< String* >(pList->GetAt(i)); // request list: order clause
860 SysTryCatch(NID_APP, pOrder, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
862 if (pOrder->Equals(empty) == true)
868 SysLog(NID_APP, "[DC_PROV_RECV] pOrder: %ls", pOrder->GetPointer());
872 pNo = dynamic_cast <String*>(pList->GetAt(i)); // request list: page number
873 SysTryCatch(NID_APP, pNo, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
874 Integer::Parse(*pNo, pageNo);
877 pCount = dynamic_cast <String*>(pList->GetAt(i)); // request list: count per page
878 SysTryCatch(NID_APP, pCount, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
879 Integer::Parse(*pCount, countPerPage);
881 pSqlListener->OnSqlDataControlSelectRequestReceived(reqId, providerId, *pDataId, pColumnList,
884 SysSecureLog(NID_APP, "[DC_PROV_RECV] caller app: %ls, requestType: %d, caller req: %ls, provider: %ls, data: %ls, pColumnList: 0x%0x, pWhere: 0x%x, pOrder: 0x%x, pageNo: %d, countPerPage: %d",
885 appId.GetPointer(), requestType, callerReqId.GetPointer(), providerId.GetPointer(),
886 pDataId->GetPointer(), pColumnList, pWhere, pOrder, pageNo, countPerPage);
888 case _DATACONTROL_REQUEST_TYPE_SQL_INSERT:
889 SysLog(NID_APP, "[DC_PROV_RECV] SqlDataControl INSERT");
891 // request list[1]: inserted column count
892 pColumnCount = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_COLUMNCOUNT));
893 SysTryCatch(NID_APP, pColumnCount, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
895 Integer::Parse(*pColumnCount, columnCount);
896 SysLog(NID_APP, "[DC_PROV_RECV] inserted column count: %d", columnCount);
898 pInsertMap = new (std::nothrow) HashMap();
899 SysTryReturnVoidResult(NID_APP, pInsertMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
900 pInsertMap->Construct();
902 SysLog(NID_APP, "[DC_PROV_RECV] version: %ls", version.GetPointer());
903 if (version == L"ver_2.1.0.2" || version == L"ver_2.1.0.3")
905 pTmpPath = dynamic_cast< String* >(pList->GetAt(2)); // request list[2]: path
906 SysTryCatch(NID_APP, pTmpPath != null, , E_SYSTEM, "[E_SYSTEM] invalid request");
907 SysLog(NID_APP, "[DC_PROV_RECV] request: %ls", pTmpPath->GetPointer());
910 r = request.Construct(*pTmpPath, "r");
911 SysTryCatch(NID_APP, !IsFailed(r), , E_SYSTEM, "[%s] Failed to open request (%ls).",
912 GetErrorMessage(r), pTmpPath->GetPointer());
914 for (i = 0; i < columnCount; ++i) // column-value pairs
917 int ret = request.Read(&length, sizeof(int));
918 SysTryCatch(NID_APP, ret > 0, , E_SYSTEM, "[%s] Failed to receive request.",
919 GetErrorMessage(GetLastResult()));
921 char* pColumn = new (std::nothrow) char[length + 1];
922 ret = request.Read(pColumn, length);
923 SysTryCatch(NID_APP, ret > 0, delete pColumn, E_SYSTEM, "[%s] Failed to receive request.",
924 GetErrorMessage(GetLastResult()));
925 pColumn[length] = '\0';
926 SysLog(NID_APP, "[DC_PROV_RECV] column[%d]: %s", i, pColumn);
928 ret = request.Read(&length, sizeof(int));
929 SysTryCatch(NID_APP, ret > 0, delete pColumn, E_SYSTEM, "[%s] Failed to receive request.",
930 GetErrorMessage(GetLastResult()));
932 char* pValue = new (std::nothrow) char[length + 1];
933 ret = request.Read(pValue, length);
936 SysLogException(NID_APP, E_SYSTEM, "[%s] Failed to receive request.", GetErrorMessage(GetLastResult()));
940 pValue[length] = '\0';
941 SysLog(NID_APP, "[DC_PROV_RECV] value[%d]: %s", i, pValue);
943 pInsertMap->Add(new (std::nothrow) String(pColumn), new (std::nothrow) String(pValue));
952 while (i < columnCount * 2) // request list: column-value pairs
954 pColumn = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_INSERTMAP + i++));
955 SysTryCatch(NID_APP, pColumn != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
956 SysLog(NID_APP, "[DC_PROV_RECV] column[%d]: %ls", index, pColumn->GetPointer());
958 pValue = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_INSERTMAP + i++));
959 SysTryCatch(NID_APP, pValue != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
960 SysLog(NID_APP, "[DC_PROV_RECV] value[%d]: %ls", index, pValue->GetPointer());
962 pInsertMap->Add(new (std::nothrow) String(*pColumn), new (std::nothrow) String(*pValue));
969 r = File::Remove(*pTmpPath);
970 SysTryLog(NID_APP, !IsFailed(r), "Failed to remove result: %ls", pTmpPath->GetPointer());
973 pSqlListener->OnSqlDataControlInsertRequestReceived(reqId, providerId, *pDataId, *pInsertMap);
975 SysLog(NID_APP, "[DC_PROV_RECV] caller app: %ls, requestType: %d, caller req: %ls, provider: %ls, data: %ls, pInsertMap: 0x%x",
976 appId.GetPointer(), requestType, callerReqId.GetPointer(), providerId.GetPointer(),
977 pDataId->GetPointer(), pInsertMap);
979 case _DATACONTROL_REQUEST_TYPE_SQL_UPDATE:
980 SysLog(NID_APP, "[DC_PROV_RECV] SqlDataControl UPDATE");
982 // request list[1]: updated column count
983 pColumnCount = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_COLUMNCOUNT));
984 SysTryCatch(NID_APP, pColumnCount, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
986 Integer::Parse(*pColumnCount, columnCount);
987 SysLog(NID_APP, "[DC_PROV_RECV] updated column count: %d", columnCount);
989 pUpdateMap = new (std::nothrow) HashMap();
990 SysTryReturnVoidResult(NID_APP, pUpdateMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
991 pUpdateMap->Construct();
993 SysLog(NID_APP, "[DC_PROV_RECV] version: %ls", version.GetPointer());
994 if (version == L"ver_2.1.0.2" || version == L"ver_2.1.0.3")
996 pTmpPath = dynamic_cast< String* >(pList->GetAt(2)); // request list[2]: path
997 SysTryCatch(NID_APP, pTmpPath != null, , E_SYSTEM, "[E_SYSTEM] invalid request");
998 SysLog(NID_APP, "[DC_PROV_RECV] request: %ls", pTmpPath->GetPointer());
1001 r = request.Construct(*pTmpPath, "r");
1002 SysTryCatch(NID_APP, !IsFailed(r), , E_SYSTEM, "[%s] Failed to open request (%ls).",
1003 GetErrorMessage(r), pTmpPath->GetPointer());
1005 for (i = 0; i < columnCount; ++i) // column-value pairs
1008 int ret = request.Read(&length, sizeof(int));
1009 SysTryCatch(NID_APP, ret > 0, , E_SYSTEM, "[%s] Failed to receive request.",
1010 GetErrorMessage(GetLastResult()));
1012 char* pColumn = new (std::nothrow) char[length + 1];
1013 ret = request.Read(pColumn, length);
1014 SysTryCatch(NID_APP, ret > 0, delete pColumn, E_SYSTEM, "[%s] Failed to receive request.",
1015 GetErrorMessage(GetLastResult()));
1016 pColumn[length] = '\0';
1017 SysLog(NID_APP, "[DC_PROV_RECV] column[%d]: %s", i, pColumn);
1019 ret = request.Read(&length, sizeof(int));
1020 SysTryCatch(NID_APP, ret > 0, delete pColumn, E_SYSTEM, "[%s] Failed to receive request.",
1021 GetErrorMessage(GetLastResult()));
1023 char* pValue = new (std::nothrow) char[length + 1];
1024 ret = request.Read(pValue, length);
1027 SysLogException(NID_APP, E_SYSTEM, "[%s] Failed to receive request.", GetErrorMessage(GetLastResult()));
1031 pValue[length] = '\0';
1032 SysLog(NID_APP, "[DC_PROV_RECV] value[%d]: %s", i, pValue);
1034 pUpdateMap->Add(new (std::nothrow) String(pColumn), new (std::nothrow) String(pValue));
1039 // request list: where clause
1040 pWhere = dynamic_cast< String* >(pList->GetAt(3));
1041 SysTryCatch(NID_APP, pWhere != null, , E_SYSTEM, "[E_SYSTEM] invalid request");
1047 while (i < columnCount * 2) // request list: column-value pairs
1049 pColumn = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_UPDATEMAP + i++));
1050 SysTryCatch(NID_APP, pColumn != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1051 SysLog(NID_APP, "[DC_PROV_RECV] column[%d]: %ls", index, pColumn->GetPointer());
1053 pValue = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_UPDATEMAP + i++));
1054 SysTryCatch(NID_APP, pValue != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1055 SysLog(NID_APP, "[DC_PROV_RECV] value[%d]: %ls", index, pValue->GetPointer());
1057 pUpdateMap->Add(new (std::nothrow) String(*pColumn), new (std::nothrow) String(*pValue));
1061 // request list: where clause
1062 pWhere = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_UPDATEMAP + i));
1063 SysTryCatch(NID_APP, pWhere, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1066 if (pWhere->Equals(empty) == true)
1072 SysLog(NID_APP, "[DC_PROV_RECV] pWhere: %ls", pWhere->GetPointer());
1077 r = File::Remove(*pTmpPath);
1078 SysTryLog(NID_APP, !IsFailed(r), "Failed to remove result: %ls", pTmpPath->GetPointer());
1081 pSqlListener->OnSqlDataControlUpdateRequestReceived(reqId, providerId, *pDataId, *pUpdateMap, pWhere);
1083 SysLog(NID_APP, "[DC_PROV_RECV] caller app: %ls, requestType: %d, caller req: %ls, provider: %ls, data: %ls, pUpdateMap: 0x%x, pWhere: 0x%x",
1084 appId.GetPointer(), requestType, callerReqId.GetPointer(), providerId.GetPointer(),
1085 pDataId->GetPointer(), pUpdateMap, pWhere);
1087 case _DATACONTROL_REQUEST_TYPE_SQL_DELETE:
1088 SysLog(NID_APP, "[DC_PROV_RECV] SqlDataControl DELETE");
1090 // request list[1]: where clause
1091 pWhere = dynamic_cast< String* >(pList->GetAt(_DATACONTROL_PACKET_INDEX_DELETEWHERE));
1092 SysTryCatch(NID_APP, pWhere, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1094 if (pWhere->Equals(empty) == true)
1100 SysLog(NID_APP, "[DC_PROV_RECV] pWhere: %ls", pWhere->GetPointer());
1103 pSqlListener->OnSqlDataControlDeleteRequestReceived(reqId, providerId, *pDataId, pWhere);
1105 SysLog(NID_APP, "[DC_PROV_RECV] caller app: %ls, requestType: %d, caller req: %ls, provider: %ls, data: %ls, pWhere: 0x%x",
1106 appId.GetPointer(), requestType, callerReqId.GetPointer(), providerId.GetPointer(),
1107 pDataId->GetPointer(), pWhere);
1109 case _DATACONTROL_REQUEST_TYPE_MAP_QUERY:
1110 SysLog(NID_APP, "[DC_PROV_RECV] MapDataControl GetValue");
1112 pNo = dynamic_cast <String*>(pList->GetAt(2)); // request list[2]
1113 SysTryCatch(NID_APP, pNo, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1114 Integer::Parse(*pNo, pageNo);
1116 pCount = dynamic_cast <String*>(pList->GetAt(3)); // request list[3]
1117 SysTryCatch(NID_APP, pCount, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1118 Integer::Parse(*pCount, countPerPage);
1120 pMapListener->OnMapDataControlGetValueRequestReceived(reqId, providerId, *pDataId, *pKey);
1122 SysLog(NID_APP, "[DC_PROV_RECV] caller app: %ls, requestType: %d, caller req: %ls, provider: %ls, data: %ls, key: %ls, pageNo: %d, countPerPage: %d",
1123 appId.GetPointer(), requestType, callerReqId.GetPointer(), providerId.GetPointer(),
1124 pDataId->GetPointer(), pKey->GetPointer(), pageNo, countPerPage);
1126 case _DATACONTROL_REQUEST_TYPE_MAP_INSERT:
1127 SysLog(NID_APP, "[DC_PROV_RECV] MapDataControl AddValue");
1129 pValue = dynamic_cast <String*>(pList->GetAt(2)); // request list[2]
1130 SysTryCatch(NID_APP, pValue, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1132 pMapListener->OnMapDataControlAddValueRequestReceived(reqId, providerId, *pDataId, *pKey, *pValue);
1134 SysLog(NID_APP, "[DC_PROV_RECV] caller app: %ls, requestType: %d, caller req: %ls, provider: %ls, data: %ls, key: %ls, value: %ls",
1135 appId.GetPointer(), requestType, callerReqId.GetPointer(), providerId.GetPointer(),
1136 pDataId->GetPointer(), pKey->GetPointer(), pValue->GetPointer());
1138 case _DATACONTROL_REQUEST_TYPE_MAP_UPDATE:
1139 SysLog(NID_APP, "[DC_PROV_RECV] MapDataControl SetValue");
1141 pOldValue = dynamic_cast <String*>(pList->GetAt(2)); // request list[2]
1142 SysTryCatch(NID_APP, pOldValue, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1144 pNewValue = dynamic_cast <String*>(pList->GetAt(3)); // request list[3]
1145 SysTryCatch(NID_APP, pNewValue, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1147 pMapListener->OnMapDataControlSetValueRequestReceived(reqId, providerId, *pDataId, *pKey, *pOldValue, *pNewValue);
1149 SysLog(NID_APP, "[DC_PROV_RECV] caller app: %ls, requestType: %d, caller req: %ls, provider: %ls, data: %ls, key: %ls, oldValue: %ls, newValue: %ls",
1150 appId.GetPointer(), requestType, callerReqId.GetPointer(), providerId.GetPointer(),
1151 pDataId->GetPointer(), pKey->GetPointer(), pOldValue->GetPointer(), pNewValue->GetPointer());
1153 case _DATACONTROL_REQUEST_TYPE_MAP_DELETE:
1154 SysLog(NID_APP, "[DC_PROV_RECV] MapDataControl RemoveValue");
1156 pValue = dynamic_cast <String*>(pList->GetAt(2)); // request list[2]
1157 SysTryCatch(NID_APP, pValue, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1159 pMapListener->OnMapDataControlRemoveValueRequestReceived(reqId, providerId, *pDataId, *pKey, *pValue);
1161 SysLog(NID_APP, "[DC_PROV_RECV] caller app: %ls, requestType: %d, caller req: %ls, provider: %ls, data: %ls, key: %ls, value: %ls",
1162 appId.GetPointer(), requestType, callerReqId.GetPointer(), providerId.GetPointer(),
1163 pDataId->GetPointer(), pKey->GetPointer(), pValue->GetPointer());
1166 SysTryCatch(NID_APP, false, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] invalid request");
1172 pColumnList->RemoveAll(true);
1178 pInsertMap->RemoveAll(true);
1184 pUpdateMap->RemoveAll(true);
1193 pErrorMsg = new (std::nothrow) String("[E_SYSTEM] A system error has occurred.");
1195 else if (r == E_OUT_OF_MEMORY)
1197 pErrorMsg = new (std::nothrow) String("[E_OUT_OF_MEMORY] The memory was insufficient.");
1199 SysTryReturnVoidResult(NID_APP, pErrorMsg, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory was insufficient.");
1201 res = DataControlProviderManager::GetInstance()->SendDataControlError(reqId, *pErrorMsg);
1205 pColumnList->RemoveAll(true);
1211 pInsertMap->RemoveAll(true);
1217 pUpdateMap->RemoveAll(true);
1228 _AppImpl::OnConditionRequestReceived(const _AppArg& arg, RequestId reqId)
1230 if (__pAppLaunchConditionEventListener == null)
1232 SysLog(NID_APP, "No App launch condition event listener");
1236 String condition = arg.GetValue(OSP_K_COND);
1237 //Object* pExtraData = null;//TODO: retrieve NFC extra data.
1238 HashMap* pExtraData = arg.GetArgMapN();
1239 ArrayList* pList = arg.GetArgListN();
1241 __pAppLaunchConditionEventListener->OnAppLaunchConditionMetN(condition, pExtraData, pList);
1246 _AppImpl::GetWindowHandle(void) const
1248 SysTryReturn(NID_APP, __pIAppImpl != null, -1, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
1250 return __pIAppImpl->OnWindowHandleRequest();
1255 _AppImpl::RaiseWindow(void)
1257 SysTryReturnVoidResult(NID_APP, __pIAppImpl != null, E_INVALID_STATE, "[E_INVALID_STATE] Getting App instance failed.");
1259 __pIAppImpl->OnFrameRaiseRequested();
1264 _AppImpl::OnAppCheckpoint(void)
1266 if (__pCheckpointEventListener)
1268 __pCheckpointEventListener->OnAppCheckpointing(*(AppRegistry::GetInstance()));
1274 _AppImpl::ConfirmAppService(void)
1276 if (_AppInfo::GetApplicationId() == SERVICE_APPID)
1283 long interval = 100;
1287 int res = vconf_get_int(VCONFKEY_APPSERVICE_STATUS, &value);
1293 if (count >= HEARTBEAT_WAIT_COUNT)
1298 SysLog(NID_APP, "Waiting for app service %dth time(%d msec).", count, interval);
1300 Thread::Sleep(interval);
1308 _AppImpl::SetListener(_AppEvent appEvent, IEventListener* pListener)
1312 case _APP_EVENT_CHECKPOINT:
1313 SysTryReturnResult(NID_APP, __pCheckpointEventListener == null, E_OBJ_ALREADY_EXIST, "Checkpoint listener is already set.");
1316 case _APP_EVENT_CLEAR_LISTENER:
1317 __pCheckpointEventListener = dynamic_cast <IAppCheckpointEventListener*>(pListener);
1329 _AppImpl::SetSqlDataControlProviderEventListener(ISqlDataControlProviderEventListener* pListener)
1331 __pSqlDataControlProviderEventListener = pListener;
1332 int tmpAppHandlerType = _AppInfo::GetAppHandlerType();
1333 tmpAppHandlerType |= _APP_HANDLER_DATACONTROL;
1334 _AppInfo::SetAppHandlerType(tmpAppHandlerType);
1340 _AppImpl::SetMapDataControlProviderEventListener(IMapDataControlProviderEventListener* pListener)
1342 __pMapDataControlProviderEventListener = pListener;
1343 int tmpAppHandlerType = _AppInfo::GetAppHandlerType();
1344 tmpAppHandlerType |= _APP_HANDLER_DATACONTROL;
1345 _AppInfo::SetAppHandlerType(tmpAppHandlerType);
1351 _AppImpl::SetAppControlProviderEventListener(IAppControlProviderEventListener* pListener)
1353 __pAppControlProviderEventListener = pListener;
1354 int tmpAppHandlerType = _AppInfo::GetAppHandlerType();
1355 tmpAppHandlerType |= _APP_HANDLER_APPCONTROL;
1356 _AppInfo::SetAppHandlerType(tmpAppHandlerType);
1361 _AppImpl::SetAppControlProviderInternalEventListener(IAppControlProviderEventListener* pListener)
1363 __pAppControlProviderInternalEventListener = pListener;
1364 int tmpAppHandlerType = _AppInfo::GetAppHandlerType();
1365 tmpAppHandlerType |= _APP_HANDLER_APPCONTROL;
1366 _AppInfo::SetAppHandlerType(tmpAppHandlerType);
1372 _AppImpl::SetAppLaunchConditionEventListener(IAppLaunchConditionEventListener* pListener)
1374 __pAppLaunchConditionEventListener = pListener;
1375 int tmpAppHandlerType = _AppInfo::GetAppHandlerType();
1376 tmpAppHandlerType |= _APP_HANDLER_LAUNCH_COND;
1377 _AppInfo::SetAppHandlerType(tmpAppHandlerType);
1384 _AppImpl::IsTerminationRequested(void)
1386 return __isTerminationRequested;
1390 _AppImpl::OnPowerOffNotiReceived(void* user_data)
1392 SysLog(NID_APP, "Application is being terminated by power off.");
1394 _AppImpl* pAppImpl = _AppImpl::GetInstance();
1395 if (pAppImpl != null)
1397 pAppImpl->__forcedTermination = true;
1404 _AppImpl::IsForcedTermination(void)
1406 return __forcedTermination;