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.
18 * @file FAppPkg_PackageManagerImpl.cpp
19 * @brief This is the implementation for the _PackageManagerImpl class.
27 #include <unique_ptr.h>
29 #include <package-manager-types.h>
31 #include <FAppPkgPackageManager.h>
32 #include <FAppPkgPackageAppInfo.h>
33 #include <FAppPkgPackageInfo.h>
34 #include <FAppPkgIPackageInstallationEventListener.h>
35 #include <FAppPkgIPackageInstallationResponseListener.h>
36 #include <FAppPkgIPackageUninstallationResponseListener.h>
37 #include <FBaseSysLog.h>
39 #include <FIoRegistry.h>
40 #include <FSysSystemTime.h>
41 #include <FBase_StringConverter.h>
43 #include "FAppPkg_PackageManagerImpl.h"
44 #include "FAppPkg_PackageInfoImpl.h"
45 #include "FAppPkg_PackageAppInfoImpl.h"
46 #include "FAppPkg_PackageParser.h"
47 #include "FApp_AppInfo.h"
48 #include "FApp_PackageManagerProxy.h"
50 using namespace Tizen::Base;
51 using namespace Tizen::Base::Runtime;
52 using namespace Tizen::Base::Collection;
53 using namespace Tizen::Io;
54 using namespace Tizen::System;
56 namespace Tizen { namespace App { namespace Package
59 PackageManager* pPackageManagerInstance = null;
61 Tizen::Base::Collection::HashMap _PackageManagerImpl::__installationList;
64 _PackageManagerEvent::FireImpl(IEventListener& listener, const IEventArg& arg)
66 IPackageInstallationEventListener* pListener = dynamic_cast<IPackageInstallationEventListener*> (&listener);
67 SysTryReturnVoidResult(NID_APP, pListener != null, E_OUT_OF_MEMORY, "pListener instance must not be null.");
69 const _PackageManagerEventArg* pArg = dynamic_cast<const _PackageManagerEventArg*>(&arg);
70 SysTryReturnVoidResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "pArg instance must not be null.");
72 if (pArg->__eventKey == L"end")
74 if (pArg->__eventValue == L"ok")
78 SysLog(NID_APP, "Installation is Completed. [Package = %ls]", pArg->__packageId.GetPointer());
79 pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_SUCCESS);
83 SysLog(NID_APP, "Uninstallation is Completed. [Package = %ls]", pArg->__packageId.GetPointer());
84 pListener->OnPackageUninstallationCompleted(pArg->__packageId, true);
91 SysLog(NID_APP, "Installation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer());
92 pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
96 SysLog(NID_APP, "Uninstallation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer());
97 pListener->OnPackageUninstallationCompleted(pArg->__packageId, false);
101 else if (pArg->__eventKey == L"install_percent")
103 std::unique_ptr<char[]> pProgress(_StringConverter::CopyToCharArrayN(pArg->__eventValue));
106 sscanf(pProgress.get(), "%d", &progress);
108 SysLog(NID_APP, "InstallationInProgress [%d]", progress);
109 pListener->OnPackageInstallationInProgress(pArg->__packageId, progress);
114 _PackageManagerImpl::GetPackageIdByAppId(const AppId& appId)
116 SysTryReturn(NID_APP, appId.IsEmpty() == false, L"", E_INVALID_ARG, "appId is empty");
120 if (appId.StartsWith(L".", 10) == true)
122 appId.SubString(0, 10, packageId);
127 char* pPackageId = null;
128 pkgmgrinfo_appinfo_h pAppInfoHandle = null;
130 std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
131 SysTryReturn(NID_APP, pAppId, L"", E_OUT_OF_MEMORY, "pAppId is null");
133 result = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &pAppInfoHandle);
134 SysTryReturn(NID_APP, result == 0, L"", E_PKG_NOT_INSTALLED, "pkgmgrinfo_appinfo_get_appinfo() failed. result=[%d], app=[%s]", result, pAppId.get());
136 result = pkgmgrinfo_appinfo_get_pkgname(pAppInfoHandle, &pPackageId);
138 packageId.Append(pPackageId);
142 pkgmgrinfo_appinfo_destroy_appinfo(pAppInfoHandle);
146 SysLog(NID_APP, "app = [%ls], package = [%ls]", appId.GetPointer(), packageId.GetPointer());
152 _PackageManagerImpl::AddEventListener(IPackageInstallationEventListener* pListener, int priority)
154 SysTryReturnResult(NID_APP, (priority < 3) && (priority >= 0), E_INVALID_ARG, "priority is invalid.");
156 result r = E_SUCCESS;
159 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
160 SysTryReturnResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
162 while (pEnum->MoveNext() == E_SUCCESS)
164 _PackageManagerEvent* pEvent = null;
165 pEnum->GetCurrent(pEvent);
168 if (pEvent->__pListener == pListener)
170 SysLog(NID_APP, "The event listener already exist. listener = [0x%x]", pListener);
171 return E_OBJ_ALREADY_EXIST;
176 if (__pListeningClient == null)
178 __pListeningClient = pkgmgr_client_new(PC_LISTENING);
179 SysTryReturnResult(NID_APP, __pListeningClient != null, E_SYSTEM, "pkgmgr_client_new(PC_LISTENING) failed");
181 res = pkgmgr_client_listen_status(__pListeningClient, PackageEventHandler, this);
182 if (res < PKGMGR_R_OK)
184 pkgmgr_client_free(__pListeningClient);
185 __pListeningClient = null;
187 if (res == PKGMGR_R_EINVAL)
189 SysLog(NID_APP, "pkgmgr_client_listen_status() returns ARGV error");
190 return E_INVALID_ARG;
192 else if (res == PKGMGR_R_ECOMM)
194 SysLog(NID_APP, "pkgmgr_client_listen_status() returns COMM error");
196 else if (res == PKGMGR_R_ETIMEOUT)
198 SysLog(NID_APP, "pkgmgr_client_listen_status() returns TIME_OUT error");
200 else if (res == PKGMGR_R_ERROR)
202 SysLog(NID_APP, "pkgmgr_client_listen_status() returns Unknown error");
206 SysLog(NID_APP, "pkgmgr_client_listen_status() returns Unknown error, res = %d", res);
213 _PackageManagerEvent* pEvent = new (std::nothrow) _PackageManagerEvent();
214 SysTryReturnResult(NID_APP, pEvent != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
216 r = pEvent->Construct();
217 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "pEvent->Construct() failed.");
219 pEvent->__pListener = pListener;
221 r = pEvent->AddListener(*pListener, true);
222 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "pEvent->AddListener() failed. [%s]", GetErrorMessage(r));
224 r = __packageEventListenerList.Add(pEvent);
225 SysTryReturnResult(NID_APP, !IsFailed(r), r, "[%s] Propagating.", GetErrorMessage(r));
227 SysLog(NID_APP, "Add PackageInstallationEventListener = [0x%x]", pListener);
232 _PackageManagerImpl::RemoveEventListener(IPackageInstallationEventListener* pListener)
234 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
235 SysTryReturnResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
237 result r = E_SUCCESS;
239 while (pEnum->MoveNext() == E_SUCCESS)
241 _PackageManagerEvent* pEvent = null;
242 pEnum->GetCurrent(pEvent);
245 if (pEvent->__pListener == pListener)
247 r = __packageEventListenerList.Remove(pEvent);
248 SysTryReturnResult(NID_APP, !IsFailed(r), r, "[%s] Propagating.", GetErrorMessage(r));
252 SysLog(NID_APP, "Remove PackageInstallationEventListener = [0x%x]", pListener);
258 return E_OBJ_NOT_FOUND;
262 _PackageManagerImpl::GetPackageInfoN(const PackageId& packageId) const
264 SysTryReturn(NID_APP, packageId.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] packageId is empty.");
265 SysTryReturn(NID_APP, packageId.GetLength() < NATIVE_APP_MAX_APPID_LENGTH, null, E_INVALID_ARG, "packageId is invalid.(length)");
267 result r = E_SUCCESS;
268 PackageInfo* pPackageInfo = null;
270 pPackageInfo = new (std::nothrow) PackageInfo;
271 SysTryReturn(NID_APP, pPackageInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
273 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
274 r = pPackageInfoImpl->Construct(packageId);
275 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[E_PKG_NOT_INSTALLED] package (%ls) is not found.", packageId.GetPointer());
285 _PackageManagerImpl::GetPackageAppInfoN(const AppId& appId) const
287 SysTryReturn(NID_APP, appId.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] appId is empty.");
289 result r = E_SUCCESS;
290 PackageAppInfo* pPackageAppInfo = null;
292 pPackageAppInfo = new (std::nothrow) PackageAppInfo;
293 SysTryReturn(NID_APP, pPackageAppInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageAppInfo instance must not be null.");
295 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
296 r = pPackageAppInfoImpl->Construct(appId);
297 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[E_PKG_NOT_INSTALLED] app (%ls) is not found.", appId.GetPointer());
299 return pPackageAppInfo;
302 delete pPackageAppInfo;
307 _PackageManagerImpl::GetPackageInfoListN(void) const
309 result r = E_SUCCESS;
311 ArrayList* pList = null;
313 pList = new (std::nothrow) ArrayList();
314 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
317 res = pkgmgrinfo_pkginfo_get_list(PackageInfoEventHandler, pList);
320 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_list() is failed. result = [%d]", res);
322 pList->RemoveAll(true);
331 _PackageManagerImpl::IsPackageInstalled(const PackageId& packageId) const
333 SysTryReturn(NID_APP, packageId.IsEmpty() == false, false, E_INVALID_ARG, "packageId is empty");
336 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
338 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
339 SysTryReturn(NID_APP, pPackageId, false, E_OUT_OF_MEMORY, "pPackageId is null");
341 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
344 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", result, pPackageId.get());
348 if(pPackageInfoHandle)
350 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
353 SysLog(NID_APP, "package = [%ls] is installed.", packageId.GetPointer());
359 _PackageManagerImpl::InstallPackage(const PackageId& packageId, const String& packagePath, IPackageInstallationResponseListener* pListener)
361 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty.");
362 SysTryReturnResult(NID_APP, packagePath.IsEmpty() == false, E_INVALID_ARG, "packagePath is empty.");
363 SysTryReturnResult(NID_APP, File::IsFileExist(packagePath) == true, E_INVALID_ARG, "packagePath is not existed.");
365 String extension = File::GetFileExtension(packagePath);
366 SysTryReturnResult(NID_APP, extension.IsEmpty() == false, E_INVALID_ARG, "extension is empty.");
368 std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(packagePath));
369 SysTryReturnResult(NID_APP, pPackagePath, E_OUT_OF_MEMORY, "pPackagePath is null.");
371 std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
372 SysTryReturnResult(NID_APP, pExtension, E_OUT_OF_MEMORY, "pExtension is null.");
374 if ((strcasecmp(pExtension.get(), "tpk") == 0) || (strcasecmp(pExtension.get(), "wgt") == 0))
376 SysLog(NID_APP, "package = [%ls], packagePath = [%s], extension = [%s]", packageId.GetPointer(), pPackagePath.get(), pExtension.get());
380 SysLog(NID_APP, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
384 // optionalData = 12345abcde:StoreClientId=XXXXX12345
385 PackageId StoreClientId = _AppInfo::GetPackageId();
387 optionalData.Append(packageId);
388 optionalData.Append(":StoreClientId=");
389 optionalData.Append(StoreClientId);
391 std::unique_ptr<char[]> pOptionalData(_StringConverter::CopyToCharArrayN(optionalData));
392 SysTryReturnResult(NID_APP, pOptionalData, E_OUT_OF_MEMORY, "pOptionalData is null.");
394 SysLog(NID_APP, "optionalData = [%s]", pOptionalData.get());
396 result r = E_SUCCESS;
397 _PackageManagerProxy packageManagerProxy;
398 r = packageManagerProxy.Construct();
399 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "packageManagerProxy.Construct() failed.");
401 r = packageManagerProxy.InstallPackage(packageId, packagePath, null);
402 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "packageManagerProxy.InstallPackage() failed.");
404 if (__pRequestClient == null)
406 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
407 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
410 int res = pkgmgr_client_install(__pRequestClient, pExtension.get(), null, pPackagePath.get(), pOptionalData.get(), PM_QUIET, InstallationEventHandler, pListener);
412 if (res < PKGMGR_R_OK)
414 pkgmgr_client_free(__pRequestClient);
415 __pRequestClient = null;
417 if (res == PKGMGR_R_EINVAL)
419 SysLog(NID_APP, "pkgmgr_client_install() returns ARGV error");
420 return E_INVALID_ARG;
422 else if (res == PKGMGR_R_ECOMM)
424 SysLog(NID_APP, "pkgmgr_client_install() returns COMM error");
426 else if (res == PKGMGR_R_ETIMEOUT)
428 SysLog(NID_APP, "pkgmgr_client_install() returns TIME_OUT error");
430 else if (res == PKGMGR_R_ERROR)
432 SysLog(NID_APP, "pkgmgr_client_install() returns Unknown error");
436 SysLog(NID_APP, "pkgmgr_client_install() returns Unknown error, res = %d", res);
446 _PackageManagerImpl::UninstallPackage(const PackageId& packageId, IPackageUninstallationResponseListener* pListener)
448 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty.");
449 SysTryReturnResult(NID_APP, packageId.GetLength() < NATIVE_APP_MAX_APPID_LENGTH, E_INVALID_ARG, "The packageId is invalid.(length)");
450 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
452 result r = E_SUCCESS;
455 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
457 _PackageManagerProxy packageManagerProxy;
458 r = packageManagerProxy.Construct();
459 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "packageManagerProxy.Construct() failed.");
461 r = packageManagerProxy.UninstallPackage(packageId, pListener);
462 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "packageManagerProxy.UninstallPackage() failed.");
464 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
465 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
467 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
468 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", res, pPackageId.get());
470 res = pkgmgrinfo_pkginfo_get_type(pPackageInfoHandle, &pType);
471 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], package=[%s]", res, pPackageId.get());
473 if (__pRequestClient == null)
475 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
476 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
479 res = pkgmgr_client_uninstall(__pRequestClient, pType, pPackageId.get(), PM_QUIET, UninstallationEventHandler, pListener);
480 SysLog(NID_APP, "pkgmgr_client_uninstall - req_id=[%d], package=[%s], type=[%s]", res, pPackageId.get(), pType);
482 if(pPackageInfoHandle)
484 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
487 if (res < PKGMGR_R_OK)
489 pkgmgr_client_free(__pRequestClient);
490 __pRequestClient = null;
492 if (res == PKGMGR_R_EINVAL)
494 SysLog(NID_APP, "pkgmgr_client_uninstall() returns ARGV error");
495 return E_INVALID_ARG;
497 else if (res == PKGMGR_R_ECOMM)
499 SysLog(NID_APP, "pkgmgr_client_uninstall() returns COMM error");
501 else if (res == PKGMGR_R_ETIMEOUT)
503 SysLog(NID_APP, "pkgmgr_client_uninstall() returns TIME_OUT error");
505 else if (res == PKGMGR_R_ERROR)
507 SysLog(NID_APP, "pkgmgr_client_uninstall() returns Unknown error");
511 SysLog(NID_APP, "pkgmgr_client_uninstall() returns Unknown error, res = %d", res);
521 _PackageManagerImpl::MoveToExternalStorage(const PackageId& packageId)
523 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty");
524 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
528 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
529 pkgmgrinfo_pkginfo_h packageInfoHandle = null;
531 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
532 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
534 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &packageInfoHandle);
535 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", res, pPackageId.get());
537 res = pkgmgrinfo_pkginfo_get_type(packageInfoHandle, &pType);
538 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], package=[%s]", res, pPackageId.get());
540 res = pkgmgrinfo_pkginfo_get_installed_storage(packageInfoHandle, &storage);
541 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_installed_storage() failed. result=[%d], package=[%s]", res, pPackageId.get());
543 if (storage == PMINFO_EXTERNAL_STORAGE)
545 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d][E_INVALID_OPERATION]", storage);
546 return E_INVALID_OPERATION;
549 if (__pRequestClient == null)
551 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
552 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
555 res = pkgmgr_client_move(__pRequestClient, pType, pPackageId.get(), PM_MOVE_TO_SDCARD, PM_QUIET);
557 if(packageInfoHandle)
559 pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle);
562 if (res < PKGMGR_R_OK)
564 pkgmgr_client_free(__pRequestClient);
565 __pRequestClient = null;
567 if (res == PKGMGR_R_EINVAL)
569 SysLog(NID_APP, "pkgmgr_client_move() returns ARGV error");
570 return E_INVALID_ARG;
572 else if (res == PKGMGR_R_ERROR)
574 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error");
578 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error, res = %d", res);
588 _PackageManagerImpl::MoveToInternalStorage(const PackageId& packageId)
590 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty");
591 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
595 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
596 pkgmgrinfo_pkginfo_h packageInfoHandle = null;
598 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
599 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
601 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &packageInfoHandle);
602 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", res, pPackageId.get());
604 res = pkgmgrinfo_pkginfo_get_type(packageInfoHandle, &pType);
605 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], package=[%s]", res, pPackageId.get());
607 res = pkgmgrinfo_pkginfo_get_installed_storage(packageInfoHandle, &storage);
608 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_installed_storage() failed. result=[%d], package=[%s]", res, pPackageId.get());
610 if (storage == PMINFO_INTERNAL_STORAGE)
612 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d][E_INVALID_OPERATION]", storage);
613 return E_INVALID_OPERATION;
616 if (__pRequestClient == null)
618 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
619 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
622 res = pkgmgr_client_move(__pRequestClient, pType, pPackageId.get(), PM_MOVE_TO_INTERNAL, PM_QUIET);
624 if(packageInfoHandle)
626 pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle);
629 if (res < PKGMGR_R_OK)
631 pkgmgr_client_free(__pRequestClient);
632 __pRequestClient = null;
634 if (res == PKGMGR_R_EINVAL)
636 SysLog(NID_APP, "pkgmgr_client_move() returns ARGV error");
637 return E_INVALID_ARG;
639 else if (res == PKGMGR_R_ERROR)
641 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error");
645 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error, res = %d", res);
655 _PackageManagerImpl::InstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData)
657 SysLog(NID_APP, "reqId[%d], Type[%s], Package[%s], Key[%s], Val[%s]", reqId, pType, pPackageId, pKey, pVal);
661 IPackageInstallationResponseListener* pListener = (IPackageInstallationResponseListener*) pData;
663 if (strcmp(pKey, "end") == 0)
665 if (strcmp(pVal, "ok") == 0)
667 pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_SUCCESS);
668 SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_SUCCESS)");
672 pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
673 SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE)");
678 else if (strcmp(pKey, "install_percent") == 0)
681 sscanf(pVal, "%d", &progress);
683 pListener->OnPackageInstallationInProgressResponseReceived(pPackageId, progress);
684 SysLog(NID_APP, "OnPackageInstallationInProgressResponseReceived(%s, %d)", pPackageId, progress);
692 _PackageManagerImpl::UninstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData)
694 SysLog(NID_APP, "reqId[%d], Type[%s], Package[%s], Key[%s], Val[%s]", reqId, pType, pPackageId, pKey, pVal);
698 if (strcmp(pKey, "end") == 0)
700 IPackageUninstallationResponseListener* pListener = (IPackageUninstallationResponseListener*) pData;
702 if (strcmp(pVal, "ok") == 0)
704 SysLog(NID_APP, "OnPackageUninstallationResponseReceived(true)");
705 pListener->OnPackageUninstallationResponseReceived(pPackageId, true);
709 SysLog(NID_APP, "OnPackageUninstallationResponseReceived(false)");
710 pListener->OnPackageUninstallationResponseReceived(pPackageId, false);
721 _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const
723 SysTryReturn(NID_APP, filePath.IsEmpty() == false, null, E_INVALID_ARG, "filePath is empty.");
724 SysTryReturn(NID_APP, File::IsFileExist(filePath) == true, null, E_FILE_NOT_FOUND, "package is not existed.");
726 String extension = File::GetFileExtension(filePath);
727 SysTryReturn(NID_APP, extension.IsEmpty() == false, null, E_INVALID_ARG, "extension is empty.");
729 std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(filePath));
730 SysTryReturn(NID_APP, pPackagePath, null, E_OUT_OF_MEMORY, "pPackagePath is null.");
732 std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
733 SysTryReturn(NID_APP, pExtension, null, E_OUT_OF_MEMORY, "pExtension is null.");
735 std::unique_ptr< PackageInfo > pPackageInfo(new (std::nothrow) PackageInfo);
736 SysTryReturn(NID_APP, pPackageInfo, null, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
738 SysLog(NID_APP, "packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
741 result r = E_SUCCESS;
743 if (strcasecmp(pExtension.get(), "tpk") == 0)
745 _PackageParser packageParser;
747 res = packageParser.Construct(pPackageInfo.get());
748 SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Construct() is failed. [%s]", pPackagePath.get());
750 res = packageParser.Parse(filePath);
751 SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Parse() is failed. [%s]", pPackagePath.get());
753 else if (strcasecmp(pExtension.get(), "wgt") == 0)
755 pkgmgr_info* pPkgmgrInfo = null;
757 pPkgmgrInfo = pkgmgr_client_check_pkginfo_from_file(pPackagePath.get());
758 SysTryReturn(NID_APP, pPkgmgrInfo, null, E_PARSING_FAILED, "pkgmgr_client_check_pkginfo_from_file(%s) is failed.", pPackagePath.get());
760 _package_manager_pkg_detail_info_t* pPkgInfo = (_package_manager_pkg_detail_info_t*) pPkgmgrInfo;
761 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
763 SysLog(NID_APP, "id(%s), version(%s), label(%s), description(%s), author(%s), icon_size(%d), pkgname(%s)", pPkgInfo->pkgid, pPkgInfo->version, pPkgInfo->label,
764 pPkgInfo->pkg_description, pPkgInfo->author, pPkgInfo->icon_size, pPkgInfo->pkg_name);
766 pPackageInfoImpl->SetType(PACKAGE_TYPE_WGT);
767 pPackageInfoImpl->SetId(pPkgInfo->pkgid);
768 pPackageInfoImpl->SetVersion(pPkgInfo->version);
769 pPackageInfoImpl->SetDisplayName(pPkgInfo->label);
770 pPackageInfoImpl->SetDescription(pPkgInfo->pkg_description);
771 pPackageInfoImpl->SetAuthor(pPkgInfo->author);
772 pPackageInfoImpl->SetMainAppId(pPkgInfo->pkg_name);
774 if (pPkgInfo->privilege_list)
777 pList = g_list_first(pPkgInfo->privilege_list);
780 char* pPrivilege = (char*)pList->data;
783 pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(pPrivilege));
786 pList = g_list_next(pList);
788 g_list_free(pPkgInfo->privilege_list);
791 std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
794 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
796 pPackageAppInfoImpl->SetAppId(pPkgInfo->pkg_name);
797 pPackageAppInfoImpl->SetAppName(pPkgInfo->label);
798 pPackageAppInfoImpl->SetAppDisplayName(pPkgInfo->label);
799 pPackageAppInfoImpl->SetMainApp(true);
800 if ((pPkgInfo->icon_buf) && (pPkgInfo->icon_size > 0))
802 String iconPath("/tmp/icon.png");
804 r = file.Construct(iconPath, "w+");
805 r = file.Write(pPkgInfo->icon_buf, pPkgInfo->icon_size);
807 pPackageAppInfoImpl->SetAppTempIconPath(iconPath);
810 pPackageInfoImpl->AddPackageAppInfo(*pPackageAppInfo.release());
814 SysLog(NID_APP, "pPackageAppInfo instance must not be null.");
815 pkgmgr_client_free_pkginfo(pPkgmgrInfo);
819 pkgmgr_client_free_pkginfo(pPkgmgrInfo);
823 SysTryReturn(NID_APP, false, null, E_UNSUPPORTED_FORMAT, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
826 return pPackageInfo.release();
830 _PackageManagerImpl::GetPackageInfoListN(const IMap& packageFilterMap) const
832 SysTryReturn(NID_APP, packageFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageFilterMap.GetCount() is invalid.");
834 std::unique_ptr<IMapEnumerator> pEnum(packageFilterMap.GetMapEnumeratorN());
835 SysTryReturn(NID_APP, pEnum, null, E_INVALID_ARG, "GetMapEnumeratorN() is failed.");
837 std::unique_ptr< ArrayList > pList(new (std::nothrow) ArrayList());
838 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList is null.");
842 int res = PMINFO_R_OK;
843 pkgmgrinfo_pkginfo_filter_h handle = null;
845 res = pkgmgrinfo_pkginfo_filter_create(&handle);
846 SysTryReturn(NID_APP, res == PMINFO_R_OK, null, E_SYSTEM, "pkgmgrinfo_pkginfo_filter_create() is failed. [%d]", res);
848 while(pEnum->MoveNext() == E_SUCCESS)
850 String* pKey = static_cast< String* >(pEnum->GetKey());
851 SysTryCatch(NID_APP, pKey, , E_INVALID_ARG, "GetKey() is failed.");
853 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
854 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
856 bool value = pVal->ToBool();
858 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value);
860 if ((*pKey) == PACKAGE_FILTER_UNINSTALLABLE)
862 res = pkgmgrinfo_pkginfo_filter_add_bool(handle, PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE, value);
863 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(REMOVABLE, %d) is failed. [%d]", value, res);
865 else if ((*pKey) == PACKAGE_FILTER_DOWNLOADED)
867 res = pkgmgrinfo_pkginfo_filter_add_bool(handle, PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD, !value);
868 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(PRELOAD, %d) is failed. [%d]", !value, res);
870 else if ((*pKey) == PACKAGE_FILTER_APP_SETTING)
872 res = pkgmgrinfo_pkginfo_filter_add_bool(handle, PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING, value);
873 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(APPSETTING, %d) is failed. [%d]", value, res);
875 else if ((*pKey) == PACKAGE_FILTER_EXTERNAL_STORAGE)
877 String installedStorage;
880 installedStorage = L"installed_external";
884 installedStorage = L"installed_internal";
887 std::unique_ptr<char[]> pInstalledStorage(_StringConverter::CopyToCharArrayN(installedStorage));
888 SysTryCatch(NID_APP, pInstalledStorage, , E_OUT_OF_MEMORY, "pInstalledStorage is null.");
890 SysLog(NID_APP, "Value[%d]->[%s]", value, pInstalledStorage.get());
892 res = pkgmgrinfo_pkginfo_filter_add_string(handle, PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE, pInstalledStorage.get());
893 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_string(STORAGE, %s) is failed. [%d]", pInstalledStorage.get(), res);
897 SysTryCatch(NID_APP, false, , E_INVALID_ARG, "Invalid key(%ls)", pKey->GetPointer());
901 res = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle, PackageInfoHandler, pList.get());
902 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_foreach_pkginfo() failed. [%d]", res);
907 pkgmgrinfo_pkginfo_filter_destroy(handle);
910 if (pList->GetCount() <= 0)
912 AppLog("pList's count is 0.");
916 return pList.release();
920 _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) const
922 SysTryReturn(NID_APP, packageAppFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageAppFilterMap.GetCount() is invalid.");
924 std::unique_ptr< IMapEnumerator > pEnum(packageAppFilterMap.GetMapEnumeratorN());
925 SysTryReturn(NID_APP, pEnum, null, E_INVALID_ARG, "GetMapEnumeratorN() is failed.");
927 std::unique_ptr< ArrayList > pList(new (std::nothrow) ArrayList());
928 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList is null.");
933 bool definedKey = false;
934 bool metadataKey = false;
936 ArrayList metadataList;
938 pkgmgrinfo_appinfo_filter_h handle = null;
939 pkgmgrinfo_appinfo_metadata_filter_h metaHandle = null;
941 res = pkgmgrinfo_appinfo_filter_create(&handle);
942 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_filter_create() is failed. [%d]", res);
944 res = pkgmgrinfo_appinfo_metadata_filter_create(&metaHandle);
945 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_create() is failed. [%d]", res);
947 while(pEnum->MoveNext() == E_SUCCESS)
949 String* pKey = static_cast< String* >(pEnum->GetKey());
950 SysTryCatch(NID_APP, pKey, , E_INVALID_ARG, "GetKey() is failed.");
952 if ((*pKey) == PACKAGE_APP_FILTER_MENUICON_VISIBLE)
956 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
957 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
959 bool nodisplay = !(pVal->ToBool());
960 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), nodisplay);
962 res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, nodisplay);
963 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(NODISPLAY, %d) is failed. [%d]", nodisplay, res);
965 else if ((*pKey) == PACKAGE_APP_FILTER_CATEGORY_HOMEAPP || (*pKey) == PACKAGE_APP_FILTER_CATEGORY_LOCKAPP
966 || (*pKey) == PACKAGE_APP_FILTER_CATEGORY_MENUAPP)
970 std::unique_ptr<char[]> pDefinedKey(_StringConverter::CopyToCharArrayN(*pKey));
971 SysTryCatch(NID_APP, pDefinedKey, , E_OUT_OF_MEMORY, "pDefinedKey is null.");
973 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
974 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
976 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), pVal->ToBool());
977 SysTryCatch(NID_APP, pVal->ToBool() == true, , E_INVALID_ARG, "Value(false) is not allowed.");
979 res = pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_CATEGORY, pDefinedKey.get());
980 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_filter_add_string(CATEGORY, %s) is failed. [%d]", pDefinedKey.get(), res);
986 String* pVal = static_cast< String* >(pEnum->GetValue());
987 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
989 SysLog(NID_APP, "Key[%ls], Value[%ls]", pKey->GetPointer(), pVal->GetPointer());
991 std::unique_ptr<char[]> pMetaKey(_StringConverter::CopyToCharArrayN(*pKey));
992 SysTryCatch(NID_APP, pMetaKey, , E_OUT_OF_MEMORY, "pMetaKey is null.");
994 std::unique_ptr<char[]> pValue(_StringConverter::CopyToCharArrayN(*pVal));
995 SysTryCatch(NID_APP, pValue, , E_OUT_OF_MEMORY, "pValue is null.");
999 res = pkgmgrinfo_appinfo_metadata_filter_add(metaHandle, pMetaKey.get(), null);
1000 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_add(%s, null) is failed. [%d]", pMetaKey.get(), res);
1004 res = pkgmgrinfo_appinfo_metadata_filter_add(metaHandle, pMetaKey.get(), pValue.get());
1005 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_add(%s, %s) is failed. [%d]", pMetaKey.get(), pValue.get(), res);
1010 if ((definedKey == true) && (metadataKey == false))
1012 res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, pList.get());
1013 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_filter_foreach_appinfo() failed. [%d]", res);
1015 else if ((definedKey == false) && (metadataKey == true))
1017 res = pkgmgrinfo_appinfo_metadata_filter_foreach(metaHandle, PackageAppInfoMetadataHandler, pList.get());
1018 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_foreach() failed. [%d]", res);
1024 res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, &list);
1025 if (res != PMINFO_R_OK)
1027 SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res);
1031 metadataList.Construct();
1033 res = pkgmgrinfo_appinfo_metadata_filter_foreach(metaHandle, PackageAppInfoMetadataHandler, &metadataList);
1034 if (res != PMINFO_R_OK)
1036 SysLog(NID_APP, "pkgmgrinfo_appinfo_metadata_filter_foreach() is failed. result = [%d]", res);
1040 for (int i = 0; i < list.GetCount(); i++)
1042 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(list.GetAt(i));
1043 if (pPackageAppInfo)
1045 AppLog("PackageAppFilter - App [%ls]", pPackageAppInfo->GetAppId().GetPointer());
1047 std::unique_ptr< AppId > pAppId(new (std::nothrow) AppId(pPackageAppInfo->GetAppId()));
1048 appIdList.Add(pAppId.release());
1052 for (int j = 0; j < metadataList.GetCount(); j++)
1054 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(metadataList.GetAt(j));
1055 if (pPackageAppInfo)
1057 AppId appId = pPackageAppInfo->GetAppId();
1059 if (appIdList.Contains(appId) == true)
1061 AppLog("App [%ls] is matched.", appId.GetPointer());
1063 std::unique_ptr< PackageAppInfo > pAppInfo(new (std::nothrow) PackageAppInfo);
1064 SysTryCatch(NID_APP, pAppInfo, , E_OUT_OF_MEMORY, "pAppInfo is null.");
1066 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pAppInfo.get());
1067 pPackageAppInfoImpl->Construct(appId);
1069 pList->Add(pAppInfo.release());
1073 AppLog("App [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer());
1082 pkgmgrinfo_appinfo_filter_destroy(handle);
1087 pkgmgrinfo_appinfo_metadata_filter_destroy(metaHandle);
1090 if (pList->GetCount() <= 0)
1092 AppLog("pList's count is 0.");
1096 return pList.release();
1100 _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageFilterMap, const IMap& packageAppFilterMap) const
1102 SysTryReturn(NID_APP, packageFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageFilterMap Count is invalid.");
1103 SysTryReturn(NID_APP, packageAppFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageAppFilterMap Count is invalid.");
1105 ArrayList appIdList;
1107 std::unique_ptr< IList > pPackageFilterList(GetPackageInfoListN(packageFilterMap));
1108 if (pPackageFilterList == null)
1110 SysLog(NID_APP, "GetPackageInfoListN(packageFilterMap) is null.");
1114 for (int i = 0; i < pPackageFilterList->GetCount(); i++)
1116 PackageInfo* pPackageInfo = dynamic_cast < PackageInfo* >(pPackageFilterList->GetAt(i));
1119 std::unique_ptr< IList > pPackageAppInfoList(pPackageInfo->GetPackageAppInfoListN());
1120 if (pPackageAppInfoList)
1122 for (int j = 0; j < pPackageAppInfoList->GetCount(); j++)
1124 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(pPackageAppInfoList->GetAt(j));
1125 if (pPackageAppInfo)
1127 AppLog("PackageFilter - App [%ls]", pPackageAppInfo->GetAppId().GetPointer());
1129 std::unique_ptr< AppId > pAppId(new (std::nothrow) AppId(pPackageAppInfo->GetAppId()));
1130 appIdList.Add(pAppId.release());
1137 std::unique_ptr< ArrayList > pList(new (std::nothrow) ArrayList);
1138 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList is null.");
1140 std::unique_ptr< IList > pAppFilterList(GetPackageAppInfoListN(packageAppFilterMap));
1141 if (pAppFilterList == null)
1143 SysLog(NID_APP, "GetPackageAppInfoListN(packageAppFilterMap) is null.");
1147 for (int k = 0; k < pAppFilterList->GetCount(); k++)
1149 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(pAppFilterList->GetAt(k));
1150 if (pPackageAppInfo)
1152 AppId appId = pPackageAppInfo->GetAppId();
1153 AppLog("AppFilter - App [%ls]", appId.GetPointer());
1155 if (appIdList.Contains(appId) == true)
1157 AppLog("App [%ls] is matched.", appId.GetPointer());
1159 std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
1160 SysTryReturn(NID_APP, pPackageAppInfo, null, E_OUT_OF_MEMORY, "PackageAppInfo is null.");
1162 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
1163 pPackageAppInfoImpl->Construct(appId);
1165 pList->Add(pPackageAppInfo.release());
1169 AppLog("App [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer());
1174 if (pList->GetCount() <= 0)
1176 AppLog("pList's count is 0.");
1180 return pList.release();
1184 _PackageManagerImpl::PackageInfoHandler(const pkgmgrinfo_pkginfo_h handle, void* pUserData)
1186 SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null.");
1187 SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null.");
1189 result r = E_SUCCESS;
1190 int res = PMINFO_R_OK;
1191 char* pPackageId = null;
1192 ArrayList* pList = (ArrayList*)pUserData;
1194 res = pkgmgrinfo_pkginfo_get_pkgname(handle, &pPackageId);
1195 SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkgname() is failed. [%d]", res);
1197 std::unique_ptr<PackageInfo> pPackageInfo(new (std::nothrow) PackageInfo);
1198 SysTryReturn(NID_APP, pPackageInfo, 0, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
1200 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
1201 r = pPackageInfoImpl->Construct(pPackageId);
1202 SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pPackageId);
1204 pList->Add(*pPackageInfo.release());
1210 _PackageManagerImpl::PackageAppInfoHandler(const pkgmgrinfo_appinfo_h handle, void* pUserData)
1212 SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null.");
1213 SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null.");
1215 result r = E_SUCCESS;
1216 int res = PMINFO_R_OK;
1217 char* pAppId = null;
1218 ArrayList* pList = (ArrayList*)pUserData;
1220 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
1221 SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appid is failed. [%d]", res);
1223 SysLog(NID_APP, "app = [%s]", pAppId);
1225 std::unique_ptr<PackageAppInfo> pPackageAppInfo(new (std::nothrow) PackageAppInfo);
1226 SysTryReturn(NID_APP, pPackageAppInfo, 0, E_OUT_OF_MEMORY, "pPackageAppInfo instance must not be null.");
1228 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
1229 r = pPackageAppInfoImpl->Construct(pAppId);
1230 SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pAppId);
1232 pList->Add(*pPackageAppInfo.release());
1238 _PackageManagerImpl::PackageAppInfoMetadataHandler(const pkgmgrinfo_appinfo_h handle, void* pUserData)
1240 SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null.");
1241 SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null.");
1243 result r = E_SUCCESS;
1244 int res = PMINFO_R_OK;
1245 char* pAppId = null;
1246 ArrayList* pList = (ArrayList*)pUserData;
1248 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
1249 SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appid is failed. [%d]", res);
1251 SysLog(NID_APP, "app = [%s]", pAppId);
1253 std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
1254 SysTryReturn(NID_APP, pPackageAppInfo, 0, E_OUT_OF_MEMORY, "pPackageAppInfo instance must not be null.");
1256 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
1257 r = pPackageAppInfoImpl->Construct(pAppId);
1258 SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pAppId);
1260 pList->Add(*pPackageAppInfo.release());
1265 _PackageManagerImpl*
1266 _PackageManagerImpl::GetInstance(void)
1268 return PackageManager::GetInstance()->__pPackageManagerImpl;
1272 _PackageManagerImpl::Construct(void)
1276 result r = __installationList.Construct();
1277 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "The memory is insufficient.");
1282 _PackageManagerImpl::_PackageManagerImpl(void)
1283 :__pRequestClient(null),
1284 __pListeningClient(null)
1288 _PackageManagerImpl::~_PackageManagerImpl(void)
1293 _PackageManagerImpl::SendPackageEvent(PackageType type, const PackageId& packageId, const char* pEventKey, const char* pEventValue)
1295 result r = E_SUCCESS;
1296 bool install = true;
1298 if (strcmp(pEventKey, "start") == 0)
1300 if ((strcmp(pEventValue, "install") == 0) || (strcmp(pEventValue, "uninstall") == 0))
1302 String* pAppId = new (std::nothrow) String(packageId);
1303 SysTryReturnVoidResult(NID_APP, pAppId != null, E_OUT_OF_MEMORY, "pAppId instance must not be null.");
1305 String* pOperation = new (std::nothrow) String(pEventValue);
1306 SysTryReturnVoidResult(NID_APP, pOperation != null, E_OUT_OF_MEMORY, "pOperation instance must not be null.");
1308 r = __installationList.Add(*pAppId, *pOperation);
1313 SysLog(NID_APP, "Failed to add installation condition.");
1314 SetLastResult(E_SYSTEM);
1319 else if (strcmp(pEventKey, "end") == 0)
1321 String* pOperation = static_cast <String*>(__installationList.GetValue(packageId));
1324 if (pOperation->Equals("uninstall", true) == true)
1329 r = __installationList.Remove(packageId, true);
1332 SysLogException(NID_APP, r, "[%s] Remove Element [%ls] is failed from installing list.", GetErrorMessage(r), packageId.GetPointer());
1337 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
1338 SysTryReturnVoidResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
1340 while (pEnum->MoveNext() == E_SUCCESS)
1342 _PackageManagerEvent* pEvent = null;
1343 pEnum->GetCurrent(pEvent);
1346 _PackageManagerEventArg* pEventArg= new (std::nothrow) _PackageManagerEventArg();
1347 SysTryReturnVoidResult(NID_APP, pEventArg, E_OUT_OF_MEMORY, "The memory is insufficient.");
1349 String eventKey(pEventKey);
1350 String eventValue(pEventValue);
1352 pEventArg->__packageId = packageId;
1353 pEventArg->__eventKey = eventKey;
1354 pEventArg->__eventValue = eventValue;
1355 pEventArg->__install = install;
1357 r = pEvent->Fire(*pEventArg);
1360 SysLog(NID_APP, "pEvent->Fire(*pEventArg) failed. [%s]", GetErrorMessage(r));
1363 SysLog(NID_APP, "Package = [%ls], Key = [%ls], Value = [%ls], install = [%d]", pEventArg->__packageId.GetPointer(), pEventArg->__eventKey.GetPointer(), pEventArg->__eventValue.GetPointer(), pEventArg->__install);
1367 SysLog(NID_APP, "pEvent is null.");
1373 _PackageManagerImpl::GetPackageInfoN(PackageType packageType, const String& packageName) const
1375 SysTryReturn(NID_APP, packageName.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] packageName is empty.");
1377 result r = E_SUCCESS;
1379 DbStatement* pStmt = null;
1380 DbEnumerator* pEnum = null;
1382 PackageInfo *pPackageInfo = null;
1384 query.Format( 1024, L"SELECT PkgInfo.*, AppInfo.APP_MAINMENU_ICON FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.PACKAGE_NAME = '%ls'", packageName.GetPointer());
1386 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1387 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1389 pStmt = CreateStatementN(db, query);
1391 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1393 pEnum = ExecuteStatementN(db, pStmt);
1396 if (pEnum->MoveNext() == E_SUCCESS)
1398 pPackageInfo = new (std::nothrow) PackageInfo;
1399 SysTryReturn(NID_APP, pPackageInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
1401 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
1407 String appApiVersion;
1410 String appDescription;
1414 int appStorageType = 0;
1415 DateTime appInstallationTime;
1418 pEnum->GetStringAt(1, id);
1419 pEnum->GetStringAt(3, appVersion);
1420 pEnum->GetStringAt(4, appType);
1421 pEnum->GetStringAt(5, appMimeType);
1422 pEnum->GetStringAt(6, appApiVersion);
1423 pEnum->GetStringAt(7, appName);
1424 pEnum->GetStringAt(8, appVendor);
1425 pEnum->GetStringAt(9, appDescription);
1426 pEnum->GetStringAt(10, appUrl);
1427 pEnum->GetStringAt(11, appCid);
1428 pEnum->GetStringAt(16, appRootPath);
1429 pEnum->GetIntAt(17, appStorageType);
1430 pEnum->GetDateTimeAt(18, appInstallationTime);
1431 pEnum->GetStringAt(21, appIconPath);
1433 pPackageInfoImpl->SetAppId(id);
1434 pPackageInfoImpl->SetAppVersion(appVersion);
1435 pPackageInfoImpl->SetAppMimeType(appMimeType);
1436 pPackageInfoImpl->SetAppApiVersion(appApiVersion);
1437 pPackageInfoImpl->SetAppName(appName);
1438 pPackageInfoImpl->SetAppVendor(appVendor);
1439 pPackageInfoImpl->SetAppDescription(appDescription);
1440 pPackageInfoImpl->SetAppUrl(appUrl);
1441 pPackageInfoImpl->SetAppCid(appCid);
1442 pPackageInfoImpl->SetAppRootPath(appRootPath);
1443 pPackageInfoImpl->SetAppStorageType(appStorageType);
1444 pPackageInfoImpl->SetAppInstallationTime(appInstallationTime);
1445 pPackageInfoImpl->SetAppIconPath(appIconPath);
1452 r = E_OBJ_NOT_FOUND;
1457 return pPackageInfo;
1461 _PackageManagerImpl::PackageInfoEventHandler(const pkgmgrinfo_pkginfo_h handle, void* pUserData)
1463 SysTryReturn(NID_APP, handle != null, 0, E_SYSTEM, "[E_SYSTEM] handle must not be null.");
1465 result r = E_SUCCESS;
1467 char* pPackage = null;
1468 ArrayList* pList = (ArrayList*)pUserData;
1470 std::unique_ptr< PackageInfo > pPackageInfo(new (std::nothrow) PackageInfo);
1471 SysTryReturn(NID_APP, pPackageInfo, null, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
1473 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
1475 result = pkgmgrinfo_pkginfo_get_pkgname(handle, &pPackage);
1478 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname(): package = [%s]", pPackage);
1482 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname() is failed. result = [%d]", result);
1485 r = pPackageInfoImpl->Construct(pPackage);
1486 SysTryReturn(NID_APP, r == E_SUCCESS, -1, E_SYSTEM, "pPackageInfoImpl->Construct() failed.");
1488 r = pList->Add(*pPackageInfo.release());
1489 SysTryReturn(NID_APP, r == E_SUCCESS, -1, E_SYSTEM, "pList->Add() failed.");
1495 _PackageManagerImpl::GetFilteredAppIdListN(const String& feature, const String& value) const
1497 result r = E_SUCCESS;
1499 DbStatement* pStmt = null;
1500 DbEnumerator* pEnum = null;
1502 ArrayList* pList = null;
1504 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, AppFeature WHERE AppFeature.ID = AppInfo.UNIQUE_ID and AppFeature.NAME = '%ls' and AppFeature.VALUE = '%ls' COLLATE NOCASE", feature.GetPointer(), value.GetPointer());
1506 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1507 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1509 pStmt = CreateStatementN(db, query);
1510 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1512 pEnum = ExecuteStatementN(db, pStmt);
1516 pList = new (std::nothrow) ArrayList();
1517 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
1520 while (pEnum->MoveNext() == E_SUCCESS)
1522 String* pPackageName = new (std::nothrow) String;
1523 SysTryReturn(NID_APP, pPackageName != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageName instance must not be null.");
1525 pEnum->GetStringAt(0, *pPackageName);
1527 pList->Add(*pPackageName);
1535 r = E_OBJ_NOT_FOUND;
1544 _PackageManagerImpl::GetDataControlInfoN(const String& providerId, const String& type) const
1546 result r = E_SUCCESS;
1548 DbStatement* pStmt = null;
1549 DbEnumerator* pEnum = null;
1551 ArrayList* pList = null;
1553 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME, DataControl.ACCESS FROM AppInfo, DataControl WHERE DataControl.ID = AppInfo.UNIQUE_ID and DataControl.PROVIDER_ID = '%ls' and DataControl.TYPE = '%ls' COLLATE NOCASE", providerId.GetPointer(), type.GetPointer());
1555 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1556 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1558 pStmt = CreateStatementN(db, query);
1559 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1561 pEnum = ExecuteStatementN(db, pStmt);
1565 pList = new (std::nothrow) ArrayList();
1566 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
1569 while (pEnum->MoveNext() == E_SUCCESS)
1571 String* pPackageName = new (std::nothrow) String;
1572 SysTryReturn(NID_APP, pPackageName != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageName instance must not be null.");
1574 String* pAccess = new (std::nothrow) String;
1575 SysTryReturn(NID_APP, pAccess != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pAccess instance must not be null.");
1577 pEnum->GetStringAt(0, *pPackageName);
1578 pList->Add(*pPackageName);
1580 pEnum->GetStringAt(1, *pAccess);
1581 pList->Add(*pAccess);
1589 r = E_OBJ_NOT_FOUND;
1598 _PackageManagerImpl::GetUiThemeListN(const PackageId& packageId) const
1600 result r = E_SUCCESS;
1602 DbStatement* pStmt = null;
1603 DbEnumerator* pEnum = null;
1605 HashMap* pList = null;
1607 query.Format(1024, L"SELECT AppFeature.NAME, AppFeature.VALUE FROM PkgInfo, AppInfo, AppFeature WHERE (AppFeature.ID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID and PkgInfo.PKG_ID = '%ls') and (AppFeature.NAME = 'SystemTheme' or AppFeature.NAME = 'UserDefinedTheme')"
1608 , packageId.GetPointer());
1610 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1611 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1613 pStmt = CreateStatementN(db, query);
1614 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1616 pEnum = ExecuteStatementN(db, pStmt);
1620 pList = new (std::nothrow) HashMap();
1621 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "HashMap creation failure.");
1624 while (pEnum->MoveNext() == E_SUCCESS)
1626 String* pName = new (std::nothrow) String;
1627 SysTryCatch(NID_APP, pName != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pName instance must not be null.");
1629 String* pValue = new (std::nothrow) String;
1630 SysTryCatch(NID_APP, pValue != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pValue instance must not be null.");
1632 pEnum->GetStringAt(0, *pName);
1633 pEnum->GetStringAt(1, *pValue);
1635 pList->Add(*pName, *pValue);
1643 r = E_OBJ_NOT_FOUND;
1652 _PackageManagerImpl::IsAppInstalled(const AppId& appId)
1654 if (appId == _AppInfo::GetPackageId())
1660 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
1662 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(appId));
1663 SysTryReturn(NID_APP, pPackageId, false, E_OUT_OF_MEMORY, "pPackageId is null");
1665 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
1666 SysTryReturn(NID_APP, result == 0, false, E_APP_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", result, pPackageId.get());
1668 if(pPackageInfoHandle)
1670 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
1677 _PackageManagerImpl::PackageEventHandler(int req_id, const char* pkg_type, const char* pkg_name,
1678 const char* key, const char* val, const void* pmsg, void* data)
1680 SysLog(NID_APP, "PackageEventHandler - req_id: %d, pkg_type: %s, pkg_name: %s, key: %s, val: %s", req_id, pkg_type,
1681 pkg_name, key, val);
1683 PackageType type = PACKAGE_TYPE_TPK;
1684 PackageId packageId(pkg_name);
1686 if (strcmp(pkg_type, "tpk") == 0)
1688 type = PACKAGE_TYPE_TPK;
1690 else if (strcmp(pkg_type, "wgt") == 0)
1692 type = PACKAGE_TYPE_WGT;
1696 SysLog(NID_APP, "Invalid type - pkg_type: %s", pkg_type);
1700 _PackageManagerImpl* pThis = _PackageManagerImpl::GetInstance();
1701 pThis->SendPackageEvent(type, packageId, key, val);
1707 _PackageManagerImpl::GetAppIdOfDataControlN(const String& providerId)
1709 result r = E_SUCCESS;
1711 DbStatement* pStmt = null;
1712 DbEnumerator* pEnum = null;
1714 String* pAppId = null;
1716 query.Format(1024, L"SELECT PkgInfo.PKG_ID FROM PkgInfo, AppInfo, DataControl WHERE DataControl.PROVIDER_ID = '%ls' and DataControl.ID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID",
1717 providerId.GetPointer());
1719 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1720 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1722 pStmt = CreateStatementN(db, query);
1723 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1725 pEnum = ExecuteStatementN(db, pStmt);
1729 if (pEnum->MoveNext() == E_SUCCESS)
1731 pAppId = new (std::nothrow) String;
1732 SysTryReturn(NID_APP, pAppId != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
1734 pEnum->GetStringAt(0, *pAppId);
1746 _PackageManagerImpl::GetPackageInfoN(const String& providerId, const String& operationId) const
1748 result r = E_SUCCESS;
1749 PackageInfo* pPkgInfo = null;
1751 DbStatement* pStmt = null;
1752 DbEnumerator* pEnum = null;
1755 query.Format(1024, L"SELECT PkgInfo.PKG_ID FROM PkgInfo, AppInfo, AppInfoLookup, AppControl, Capability "
1756 "WHERE AppControl.PROVIDER_ID ='%ls' and Capability.OPERATION_ID ='%ls' and AppControl.ID = AppInfoLookup.AppControlID "
1757 "and Capability.ID = AppInfoLookup.CapabilityID and AppInfoLookup.AppInfoID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID "
1758 "GROUP BY AppInfoID"
1759 , providerId.GetPointer(), operationId.GetPointer());
1761 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1762 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1764 pStmt = CreateStatementN(db, query);
1765 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1767 pEnum = ExecuteStatementN(db, pStmt);
1770 if (pEnum->MoveNext() == E_SUCCESS)
1772 PackageId packageId;
1773 pEnum->GetStringAt(0, packageId);
1775 pPkgInfo = GetPackageInfoN(packageId);
1782 r = E_OBJ_NOT_FOUND;
1791 _PackageManagerImpl::GetPackageAppInfoImplListN(const String& packageId) const
1793 result r = E_SUCCESS;
1795 DbStatement* pStmt = null;
1796 DbEnumerator* pEnum = null;
1799 PackageInfo* pPkgInfo = null;
1800 _PackageInfoImpl* pPackageInfoImpl = null;
1801 ArrayList* pList = null;
1803 pPkgInfo = GetPackageInfoN(packageId);
1804 SysTryCatch(NID_APP, pPkgInfo != null, , r, "[%s] GetPackageInfoN() is failed", GetErrorMessage(r));
1806 pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPkgInfo);
1807 query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", pPackageInfoImpl->GetUniqueId());
1809 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1810 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1812 pStmt = CreateStatementN(db, query);
1813 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1814 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1816 pEnum = ExecuteStatementN(db, pStmt);
1820 pList = new (std::nothrow) ArrayList;
1821 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Container allocation failure.");
1825 while (pEnum->MoveNext() == E_SUCCESS)
1827 _PackageAppInfoImpl* pPackageAppInfoImpl = new (std::nothrow) _PackageAppInfoImpl;
1828 SysTryReturn(NID_APP, pPackageAppInfoImpl != null, null, E_OUT_OF_MEMORY, "pPackageAppInfoImpl instance must not be null.");
1834 String mainmenuIcon;
1836 String quickpanelIcon;
1840 pEnum->GetIntAt(0, uniqueId);
1841 pEnum->GetIntAt(1, pkgId);
1842 pEnum->GetStringAt(2, name);
1843 pEnum->GetStringAt(3, defaultapp);
1844 pEnum->GetStringAt(4, mainmenuIcon);
1845 pEnum->GetStringAt(5, settingIcon);
1846 pEnum->GetStringAt(7, quickpanelIcon);
1847 pEnum->GetIntAt(9, appFeature);
1848 pEnum->GetStringAt(10, packageName);
1850 pPackageAppInfoImpl->SetUniqueId(uniqueId);
1851 pPackageAppInfoImpl->SetPkgId(pkgId);
1852 pPackageAppInfoImpl->SetName(name);
1853 pPackageAppInfoImpl->SetDefault(defaultapp);
1854 pPackageAppInfoImpl->SetMainmenuIcon(mainmenuIcon);
1855 pPackageAppInfoImpl->SetSettingIcon(settingIcon);
1856 pPackageAppInfoImpl->SetQuickpanelIcon(quickpanelIcon);
1857 pPackageAppInfoImpl->SetAppFeature(appFeature);
1858 pPackageAppInfoImpl->SetPackageName(packageName);
1860 pList->Add(*pPackageAppInfoImpl);
1873 _PackageManagerImpl::GetPackageAppFeatureListN(const PackageId& packageId, const Tizen::Base::String& appExecutableName) const
1875 ArrayList* pAppInfoList = GetPackageAppInfoImplListN(packageId);
1876 SysTryReturn(NID_APP, pAppInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppInfo list instance must not be null.");
1878 ArrayList* pResult = null;
1880 for (int i = 0; i < pAppInfoList->GetCount(); i++)
1882 const _PackageAppInfoImpl* pAppInfoImpl = static_cast<const _PackageAppInfoImpl*>(pAppInfoList->GetAt(i));
1883 if (pAppInfoImpl == null)
1888 if (pAppInfoImpl->GetName() == appExecutableName)
1890 pResult = pAppInfoImpl->GetAppFeatureListN();
1896 pAppInfoList->RemoveAll(true);
1897 delete pAppInfoList;
1902 HashMapT<String, _AppFeatureInfoImpl*>*
1903 _PackageManagerImpl::GetPackageAppFeatureMapN(const PackageId& packageId, const Tizen::Base::String& appExecutableName) const
1905 ArrayList* pAppInfoList = GetPackageAppInfoImplListN(packageId);
1906 SysTryReturn(NID_APP, pAppInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppInfo list instance must not be null.");
1908 HashMapT<String, _AppFeatureInfoImpl*>* pResult = null;
1910 std::auto_ptr<IEnumerator> pEnum(pAppInfoList->GetEnumeratorN());
1912 while (pEnum->MoveNext() == E_SUCCESS)
1914 const _PackageAppInfoImpl* pAppInfoImpl = static_cast<const _PackageAppInfoImpl*>(pEnum->GetCurrent());
1915 if (pAppInfoImpl == null)
1920 if (pAppInfoImpl->GetName() == appExecutableName)
1922 pResult = pAppInfoImpl->GetAppFeatureMapN();
1928 pAppInfoList->RemoveAll(true);
1929 delete pAppInfoList;
1935 _PackageManagerImpl::GetAppLaunchConditionListN(const String& packageName) const
1937 result r = E_SUCCESS;
1939 DbStatement* pStmt = null;
1940 DbEnumerator* pEnum = null;
1942 ArrayList* pList = null;
1944 query.Format(1024, L"SELECT LaunchCondition.* FROM LaunchCondition, AppInfo WHERE AppInfo.UNIQUE_ID = LaunchCondition.ID and AppInfo.PACKAGE_NAME = '%ls'", packageName.GetPointer());
1946 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1947 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1949 pStmt = CreateStatementN(db, query);
1950 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1951 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1953 pEnum = ExecuteStatementN(db, pStmt);
1956 pList = new (std::nothrow) ArrayList;
1957 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Container allocation failure.");
1961 while (pEnum->MoveNext() == E_SUCCESS)
1963 _LaunchConditionInfoImpl* pLaunchCondtion = new (std::nothrow) _LaunchConditionInfoImpl;
1964 SysTryReturn(NID_APP, pLaunchCondtion != null, null, E_OUT_OF_MEMORY, "pLaunchCondtion instance must not be null.");
1969 pEnum->GetStringAt(1, name);
1970 pEnum->GetStringAt(2, value);
1972 pLaunchCondtion->SetName(name);
1973 pLaunchCondtion->SetValue(value);
1975 pList->Add(*pLaunchCondtion);
1977 SysLog(NID_APP, "Name[%ls], Value[%ls]", name.GetPointer(), value.GetPointer());
1989 _PackageManagerImpl::GetPackageName(const PackageId& packageId, const String* pName, char* pPackageName, int bufferSize)
1991 result r = E_SUCCESS;
1993 DbStatement* pStmt = null;
1994 DbEnumerator* pEnum = null;
1996 Tizen::Base::String packageName;
2002 L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = '%s' and PkgInfo.PKG_ID = '%ls'",
2003 "True", packageId.GetPointer());
2009 L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and APP_NAME = '%ls' and PkgInfo.PKG_ID = '%ls'",
2010 pName->GetPointer(), packageId.GetPointer());
2013 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2014 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2016 pStmt = CreateStatementN(db, query);
2017 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2018 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2020 pEnum = ExecuteStatementN(db, pStmt);
2023 if (pEnum->MoveNext() == E_SUCCESS)
2025 pEnum->GetStringAt(0, packageName);
2026 snprintf(pPackageName, bufferSize, "%ls", packageName.GetPointer());
2032 r = E_OBJ_NOT_FOUND;
2042 _PackageManagerImpl::GetDefaultAppExecutableName(const PackageId& packageId)
2044 result r = E_SUCCESS;
2046 DbStatement* pStmt = null;
2047 DbEnumerator* pEnum = null;
2049 String executableName;
2053 L"SELECT AppInfo.APP_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = '%s' and PkgInfo.PKG_ID = '%ls'",
2054 "True", packageId.GetPointer());
2056 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2057 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2059 pStmt = CreateStatementN(db, query);
2060 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2061 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2063 pEnum = ExecuteStatementN(db, pStmt);
2066 if (pEnum->MoveNext() == E_SUCCESS)
2068 pEnum->GetStringAt(0, executableName);
2074 r = E_OBJ_NOT_FOUND;
2081 return executableName;
2085 _PackageManagerImpl::CreateStatementN(Database& db, const String& query)
2087 result r = E_SUCCESS;
2088 DbStatement* pStmt = null;
2090 for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
2092 pStmt = db.CreateStatementN(query);
2093 r = GetLastResult();
2095 if (r != E_OBJECT_LOCKED)
2101 SysLog(NID_APP, "RetryCount[%d] CreateStatementN - E_OBJECT_LOCKED", i);
2112 _PackageManagerImpl::ExecuteStatementN(Database& db, const DbStatement* pStmt)
2114 result r = E_SUCCESS;
2115 DbEnumerator* pEnum = null;
2117 for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
2119 pEnum = db.ExecuteStatementN(*pStmt);
2120 r = GetLastResult();
2122 if (r != E_OBJECT_LOCKED)
2128 SysLog(NID_APP, "RetryCount[%d] ExecuteStatementN - E_OBJECT_LOCKED", i);
2138 } } } // Tizen::App::Package