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 return __pAppManagerImpl->TerminateApplication(appId);
229 AppManager::IsRunning(const AppId& appId) const
231 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
233 return __pAppManagerImpl->IsRunning(appId);
237 AppManager::GetRunningAppListN(void) const
239 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
241 return __pAppManagerImpl->GetRunningAppListN();
245 AppManager::RegisterAppLaunch(const String& condition, const IList* pArguments, LaunchOption option)
247 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
249 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
250 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
252 return __pAppManagerImpl->RegisterAppLaunch(L"", condition, pArguments, option);
256 AppManager::UnregisterAppLaunch(void)
258 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
260 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
261 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
263 return __pAppManagerImpl->UnregisterAppLaunch(L"", null);
267 AppManager::UnregisterAppLaunch(const String& condition)
269 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
271 result r = _AccessController::CheckUserPrivilege(_PRV_APPLICATION_LAUNCH);
272 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
274 return __pAppManagerImpl->UnregisterAppLaunch(L"", &condition);
278 AppManager::IsAppLaunchRegistered(void) const
280 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
282 return __pAppManagerImpl->IsAppLaunchRegistered(L"", null);
286 AppManager::RegisterAppLaunch(const AppId& appId, const String& condition, const IList* pArguments, LaunchOption option)
288 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
289 SysTryReturnResult(NID_APP, _Aul::IsInstalled(appId) == true, E_APP_NOT_INSTALLED, "The application(%ls) is not installed.", appId.GetPointer());
291 return __pAppManagerImpl->RegisterAppLaunch(appId, condition, pArguments, option);
296 AppManager::UnregisterAppLaunch(const AppId& appId, const String* pCondition)
298 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
299 SysTryReturnResult(NID_APP, _Aul::IsInstalled(appId) == true, E_APP_NOT_INSTALLED, "The application(%ls) is not installed.", appId.GetPointer());
301 return __pAppManagerImpl->UnregisterAppLaunch(appId, pCondition);
306 AppManager::IsAppLaunchRegistered(const AppId& appId, const String* pCondition) const
308 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
310 return __pAppManagerImpl->IsAppLaunchRegistered(appId, pCondition);
314 AppManager::SetCheckpointEventListener(IAppCheckpointEventListener& listener)
316 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
318 Tizen::Base::Runtime::IEventListener* pListener = &listener;
319 return __pAppManagerImpl->SetEventListener(AE_CHECKPOINT, pListener);
323 AppManager::SetAppLaunchConditionEventListener(IAppLaunchConditionEventListener* pListener)
326 _AppImpl::GetInstance()->SetAppLaunchConditionEventListener(pListener);
331 AppManager::SendAppControlResult(const String& appControlRequestId, const IList* pResultList)
333 int req = _AppArg::GetRequestId(appControlRequestId);
334 AppControlProviderManager* pInstance = AppControlProviderManager::GetInstance();
335 return _AppControlProviderManagerImpl::GetInstance(*pInstance)->SendAppControlResult(req, pResultList);
339 AppManager::AddActiveAppEventListener(IActiveAppEventListener& listener)
341 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
343 result r = _AccessController::CheckUserPrivilege(_PRV_APPUSAGE);
344 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
346 return __pAppManagerImpl->AddActiveAppEventListener(listener);
350 AppManager::RemoveActiveAppEventListener(IActiveAppEventListener& listener)
352 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
354 result r = _AccessController::CheckUserPrivilege(_PRV_APPUSAGE);
355 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
357 return __pAppManagerImpl->RemoveActiveAppEventListener(listener);
361 AppManager::GetActiveApp(AppId& appId)
363 SysAssertf(__pAppManagerImpl != null, "Not constructed properly by platform.");
365 result r = _AccessController::CheckUserPrivilege(_PRV_APPUSAGE);
366 SysTryReturnResult(NID_APP, !IsFailed(r), E_PRIVILEGE_DENIED, "The application does not have the privilege to call this method.");
368 return __pAppManagerImpl->GetActiveApp(appId);