2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FAppAppManager.cpp
20 * @brief This is the implementation for the AppManager class.
25 #include <FBaseString.h>
26 #include <FBaseColIListT.h>
27 #include <FAppAppManager.h>
28 #include <FAppIAppControlListener.h>
29 #include <FAppSqlDataControl.h>
30 #include <FAppMapDataControl.h>
31 #include <FAppIAppCheckPointEventListener.h>
32 #include <FAppAppControlProviderManager.h>
33 #include <FAppIActiveAppEventListener.h>
34 #include <FBaseSysLog.h>
36 #include <FSec_AccessController.h>
37 #include "FApp_Types.h"
38 #include "FAppPkg_PackageManagerImpl.h"
39 #include "FApp_AppManagerImpl.h"
40 #include "FApp_AppImpl.h"
41 #include "FApp_AppInfo.h"
42 #include "FApp_AppArg.h"
44 #include "FApp_AppControlProviderManagerImpl.h"
45 #ifdef _SINGLETON_CLEANUP
46 #include "FApp_LongevityManager.h"
49 using namespace Tizen::App::Package;
50 using namespace Tizen::Base;
51 using namespace Tizen::Base::Collection;
52 using namespace Tizen::Base::Runtime;
53 using namespace Tizen::Io;
54 using namespace Tizen::Security;
56 namespace Tizen { namespace App
59 const long MAX_ARGUMENTS_SIZE = 1024;
62 AppManager::AppManager(void)
63 : __pAppManagerImpl(null)
69 AppManager::Construct(void)
73 SysAssertf(__pAppManagerImpl == null,
74 "Already constructed. Calling Construct() twice or more on a same in stance is not allowed for this class.");
76 __pAppManagerImpl = new (std::nothrow) _AppManagerImpl();
77 SysTryReturnResult(NID_APP, __pAppManagerImpl != null, E_OUT_OF_MEMORY, "");
79 r = __pAppManagerImpl->Construct();
80 SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] Propagating.", GetErrorMessage(r));
85 delete __pAppManagerImpl;
86 __pAppManagerImpl = null;
92 AppManager::~AppManager(void)
94 delete __pAppManagerImpl;
99 AppManager::FindAppControlN(const AppId& appId, const String& operationId)
101 return _AppManagerImpl::FindAppControlN(appId, operationId);
106 AppManager::FindAppControlsN(const String* pOperationId, const String* pCategory, const String* pDataType, const String* pUriScheme)
108 return _AppManagerImpl::FindAppControlsN(pOperationId, pCategory, pDataType, pUriScheme);
113 AppManager::StartAppControl(const String& uri, const String* pOperationId,
114 const String* pDataType,
115 IAppControlListener* pListener)
117 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
118 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
120 return _AppManagerImpl::StartAppControl(uri, pOperationId, pDataType, pListener);
125 AppManager::StartAppControl(const String* pOperationId, const String* pCategory,
126 const String* pDataType, const String* pUriScheme,
127 const IList* pDataList,
128 IAppControlListener* pListener)
130 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
131 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
133 return _AppManagerImpl::StartAppControl(pOperationId, pCategory, pDataType, pUriScheme, pDataList, pListener);
137 AppManager::GetSqlDataControlN(const String& providerId)
139 return _AppManagerImpl::GetSqlDataControlN(providerId);
143 AppManager::GetMapDataControlN(const String& providerId)
145 return _AppManagerImpl::GetMapDataControlN(providerId);
149 AppManager::GetAppSharedPath(const AppId& appId)
153 result r = _AppManagerImpl::GetAppRootPath(appId, sharedPath);
154 SysTryReturn(NID_APP, !IsFailed(r), sharedPath, r, "[%s] Propagating to caller...",
157 sharedPath.Append(L"shared/");
159 SetLastResult(E_SUCCESS);
164 AppManager::GetInstance(void)
166 result r = E_SUCCESS;
167 static AppManager* pAppMgr = null;
171 pAppMgr = new (std::nothrow) AppManager();
172 SysTryReturn(NID_APP, pAppMgr != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppManager allocation failed.");
174 r = pAppMgr->Construct();
175 SysTryCatch(NID_APP, !IsFailed(r), , r, "[%s] AppManager construction failed.", GetErrorMessage(r));
177 #ifdef _SINGLETON_CLEANUP
178 // [FIXME] temporary disable to resolve N_SE-23319, ImeApp cleanup issue
179 //_LongevityManager::GetInstance().RegisterOwnership(*pAppMgr);
193 AppManager::LaunchApplication(const AppId& appId, const IList* pArguments, LaunchOption option)
195 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
196 SysTryReturnResult(NID_APP, appId.GetLength() <= WIDGET_APP_MAX_APPID_LENGTH, E_MAX_EXCEEDED,
197 "The length of appid exceeded the limit(%d).", WIDGET_APP_MAX_APPID_LENGTH);
199 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
200 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
202 return __pAppManagerImpl->LaunchApplication(appId, pArguments, LAUNCH_OPTION_DEFAULT);
206 AppManager::LaunchApplication(const AppId& appId, LaunchOption option)
208 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
209 SysTryReturnResult(NID_APP, appId.GetLength() <= WIDGET_APP_MAX_APPID_LENGTH, E_MAX_EXCEEDED,
210 "The length of appid exceeded the limit(%d).", WIDGET_APP_MAX_APPID_LENGTH);
212 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
213 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
215 return __pAppManagerImpl->LaunchApplication(appId, LAUNCH_OPTION_DEFAULT);
219 AppManager::TerminateApplication(const AppId& appId)
221 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
222 SysTryReturnResult(NID_APP, appId.GetLength() <= WIDGET_APP_MAX_APPID_LENGTH, E_MAX_EXCEEDED,
223 "The length of appid exceeded the limit(%d).", WIDGET_APP_MAX_APPID_LENGTH);
225 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_KILL, _PRV_APPMANAGER_KILL);
226 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
228 return __pAppManagerImpl->TerminateApplication(appId);
232 AppManager::IsRunning(const AppId& appId) const
234 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
236 return __pAppManagerImpl->IsRunning(appId);
240 AppManager::GetRunningAppListN(void) const
242 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
244 return __pAppManagerImpl->GetRunningAppListN();
248 AppManager::RegisterAppLaunch(const String& condition, const IList* pArguments, LaunchOption option)
250 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
252 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
253 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
255 return __pAppManagerImpl->RegisterAppLaunch(L"", condition, pArguments, option);
259 AppManager::UnregisterAppLaunch(void)
261 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
263 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
264 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
266 return __pAppManagerImpl->UnregisterAppLaunch(L"", null);
270 AppManager::UnregisterAppLaunch(const String& condition)
272 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
274 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
275 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
277 return __pAppManagerImpl->UnregisterAppLaunch(L"", &condition);
281 AppManager::IsAppLaunchRegistered(void) const
283 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
285 return __pAppManagerImpl->IsAppLaunchRegistered(L"", null);
289 AppManager::RegisterAppLaunch(const AppId& appId, const String& condition, const IList* pArguments, LaunchOption option)
291 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
292 SysTryReturnResult(NID_APP, _Aul::IsInstalled(appId) == true, E_APP_NOT_INSTALLED, "The application(%ls) is not installed.", appId.GetPointer());
294 return __pAppManagerImpl->RegisterAppLaunch(appId, condition, pArguments, option);
299 AppManager::UnregisterAppLaunch(const AppId& appId, const String* pCondition)
301 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
302 SysTryReturnResult(NID_APP, _Aul::IsInstalled(appId) == true, E_APP_NOT_INSTALLED, "The application(%ls) is not installed.", appId.GetPointer());
304 return __pAppManagerImpl->UnregisterAppLaunch(appId, pCondition);
309 AppManager::IsAppLaunchRegistered(const AppId& appId, const String* pCondition) const
311 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
313 return __pAppManagerImpl->IsAppLaunchRegistered(appId, pCondition);
317 AppManager::SetCheckpointEventListener(IAppCheckpointEventListener& listener)
319 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
321 Tizen::Base::Runtime::IEventListener* pListener = &listener;
322 return __pAppManagerImpl->SetEventListener(AE_CHECKPOINT, pListener);
326 AppManager::SetAppLaunchConditionEventListener(IAppLaunchConditionEventListener* pListener)
329 _AppImpl::GetInstance()->SetAppLaunchConditionEventListener(pListener);
334 AppManager::SendAppControlResult(const String& appControlRequestId, const IList* pResultList)
336 int req = _AppArg::GetRequestId(appControlRequestId);
337 AppControlProviderManager* pInstance = AppControlProviderManager::GetInstance();
338 return _AppControlProviderManagerImpl::GetInstance(*pInstance)->SendAppControlResult(req, pResultList);
342 AppManager::AddActiveAppEventListener(IActiveAppEventListener& listener)
344 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
346 result r = _AccessController::CheckUserPrivilege(_PRV_APPUSAGE);
347 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
349 return __pAppManagerImpl->AddActiveAppEventListener(listener);
353 AppManager::RemoveActiveAppEventListener(IActiveAppEventListener& listener)
355 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
357 result r = _AccessController::CheckUserPrivilege(_PRV_APPUSAGE);
358 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
360 return __pAppManagerImpl->RemoveActiveAppEventListener(listener);
364 AppManager::GetActiveApp(AppId& appId)
366 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
368 result r = _AccessController::CheckUserPrivilege(_PRV_APPUSAGE);
369 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
371 return __pAppManagerImpl->GetActiveApp(appId);