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.
17 * @file FAppPkg_PackageManagerImpl.cpp
18 * @brief This is the implementation for the _PackageManagerImpl class.
26 #include <unique_ptr.h>
28 #include <package-manager-types.h>
30 #include <FAppPkgPackageManager.h>
31 #include <FAppPkgPackageAppInfo.h>
32 #include <FAppPkgPackageInfo.h>
33 #include <FAppPkgIPackageInstallationEventListener.h>
34 #include <FAppPkgIPackageInstallationResponseListener.h>
35 #include <FAppPkgIPackageUninstallationResponseListener.h>
36 #include <FBaseSysLog.h>
38 #include <FIoRegistry.h>
39 #include <FSecPrivilegeInfo.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::Base::Utility;
54 using namespace Tizen::Io;
55 using namespace Tizen::Security;
56 using namespace Tizen::System;
58 namespace Tizen { namespace App { namespace Package
61 PackageManager* pPackageManagerInstance = null;
63 Tizen::Base::Collection::HashMap _PackageManagerImpl::__installationList;
66 _PackageManagerEvent::FireImpl(IEventListener& listener, const IEventArg& arg)
68 IPackageInstallationEventListener* pListener = dynamic_cast<IPackageInstallationEventListener*> (&listener);
69 SysTryReturnVoidResult(NID_APP, pListener != null, E_OUT_OF_MEMORY, "pListener instance must not be null.");
71 const _PackageManagerEventArg* pArg = dynamic_cast<const _PackageManagerEventArg*>(&arg);
72 SysTryReturnVoidResult(NID_APP, pArg != null, E_OUT_OF_MEMORY, "pArg instance must not be null.");
74 if (pArg->__eventKey == L"end")
76 if (pArg->__eventValue == L"ok")
80 SysLog(NID_APP, "Installation is Completed. [Package = %ls]", pArg->__packageId.GetPointer());
81 pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_SUCCESS);
85 SysLog(NID_APP, "Uninstallation is Completed. [Package = %ls]", pArg->__packageId.GetPointer());
86 pListener->OnPackageUninstallationCompleted(pArg->__packageId, true);
93 SysLog(NID_APP, "Installation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer());
94 pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
98 SysLog(NID_APP, "Uninstallation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer());
99 pListener->OnPackageUninstallationCompleted(pArg->__packageId, false);
103 else if (pArg->__eventKey == L"install_percent")
105 std::unique_ptr<char[]> pProgress(_StringConverter::CopyToCharArrayN(pArg->__eventValue));
108 sscanf(pProgress.get(), "%d", &progress);
110 SysLog(NID_APP, "InstallationInProgress [%d]", progress);
111 pListener->OnPackageInstallationInProgress(pArg->__packageId, progress);
116 _PackageManagerImpl::GetPackageIdByAppId(const AppId& appId)
118 SysTryReturn(NID_APP, appId.IsEmpty() == false, L"", E_INVALID_ARG, "appId is empty");
122 if (appId.StartsWith(L".", 10) == true)
124 appId.SubString(0, 10, packageId);
129 char* pPackageId = null;
130 pkgmgrinfo_appinfo_h pAppInfoHandle = null;
132 std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
133 SysTryReturn(NID_APP, pAppId, L"", E_OUT_OF_MEMORY, "pAppId is null");
135 result = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &pAppInfoHandle);
136 SysTryReturn(NID_APP, result == 0, L"", E_PKG_NOT_INSTALLED, "pkgmgrinfo_appinfo_get_appinfo() failed. result=[%d], app=[%s]", result, pAppId.get());
138 result = pkgmgrinfo_appinfo_get_pkgname(pAppInfoHandle, &pPackageId);
140 packageId.Append(pPackageId);
144 pkgmgrinfo_appinfo_destroy_appinfo(pAppInfoHandle);
148 SysLog(NID_APP, "app = [%ls], package = [%ls]", appId.GetPointer(), packageId.GetPointer());
154 _PackageManagerImpl::AddEventListener(IPackageInstallationEventListener* pListener, int priority)
156 SysTryReturnResult(NID_APP, (priority < 3) && (priority >= 0), E_INVALID_ARG, "priority is invalid.");
158 result r = E_SUCCESS;
161 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
162 SysTryReturnResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
164 while (pEnum->MoveNext() == E_SUCCESS)
166 _PackageManagerEvent* pEvent = null;
167 pEnum->GetCurrent(pEvent);
170 if (pEvent->__pListener == pListener)
172 SysLog(NID_APP, "The event listener already exist. listener = [0x%x]", pListener);
173 return E_OBJ_ALREADY_EXIST;
178 if (__pListeningClient == null)
180 __pListeningClient = pkgmgr_client_new(PC_LISTENING);
181 SysTryReturnResult(NID_APP, __pListeningClient != null, E_SYSTEM, "pkgmgr_client_new(PC_LISTENING) failed");
183 res = pkgmgr_client_listen_status(__pListeningClient, PackageEventHandler, this);
184 if (res < PKGMGR_R_OK)
186 pkgmgr_client_free(__pListeningClient);
187 __pListeningClient = null;
189 if (res == PKGMGR_R_EINVAL)
191 SysLog(NID_APP, "pkgmgr_client_listen_status() returns ARGV error");
192 return E_INVALID_ARG;
194 else if (res == PKGMGR_R_ECOMM)
196 SysLog(NID_APP, "pkgmgr_client_listen_status() returns COMM error");
198 else if (res == PKGMGR_R_ETIMEOUT)
200 SysLog(NID_APP, "pkgmgr_client_listen_status() returns TIME_OUT error");
202 else if (res == PKGMGR_R_ERROR)
204 SysLog(NID_APP, "pkgmgr_client_listen_status() returns Unknown error");
208 SysLog(NID_APP, "pkgmgr_client_listen_status() returns Unknown error, res = %d", res);
215 _PackageManagerEvent* pEvent = new (std::nothrow) _PackageManagerEvent();
216 SysTryReturnResult(NID_APP, pEvent != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
218 r = pEvent->Construct();
219 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "pEvent->Construct() failed.");
221 pEvent->__pListener = pListener;
223 r = pEvent->AddListener(*pListener, true);
224 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "pEvent->AddListener() failed. [%s]", GetErrorMessage(r));
226 r = __packageEventListenerList.Add(pEvent);
227 SysTryReturnResult(NID_APP, !IsFailed(r), r, "[%s] Propagating.", GetErrorMessage(r));
229 SysLog(NID_APP, "Add PackageInstallationEventListener = [0x%x]", pListener);
234 _PackageManagerImpl::RemoveEventListener(IPackageInstallationEventListener* pListener)
236 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
237 SysTryReturnResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
239 result r = E_SUCCESS;
241 while (pEnum->MoveNext() == E_SUCCESS)
243 _PackageManagerEvent* pEvent = null;
244 pEnum->GetCurrent(pEvent);
247 if (pEvent->__pListener == pListener)
249 r = __packageEventListenerList.Remove(pEvent);
250 SysTryReturnResult(NID_APP, !IsFailed(r), r, "[%s] Propagating.", GetErrorMessage(r));
254 SysLog(NID_APP, "Remove PackageInstallationEventListener = [0x%x]", pListener);
260 return E_OBJ_NOT_FOUND;
264 _PackageManagerImpl::GetPackageInfoN(const PackageId& packageId) const
266 SysTryReturn(NID_APP, packageId.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] packageId is empty.");
267 SysTryReturn(NID_APP, packageId.GetLength() < NATIVE_APP_MAX_APPID_LENGTH, null, E_INVALID_ARG, "packageId is invalid.(length)");
269 result r = E_SUCCESS;
270 PackageInfo* pPackageInfo = null;
272 pPackageInfo = new (std::nothrow) PackageInfo;
273 SysTryReturn(NID_APP, pPackageInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
275 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
276 r = pPackageInfoImpl->Construct(packageId);
277 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[E_PKG_NOT_INSTALLED] package (%ls) is not found.", packageId.GetPointer());
287 _PackageManagerImpl::GetPackageAppInfoN(const AppId& appId) const
289 SysTryReturn(NID_APP, appId.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] appId is empty.");
291 result r = E_SUCCESS;
292 PackageAppInfo* pPackageAppInfo = null;
294 pPackageAppInfo = new (std::nothrow) PackageAppInfo;
295 SysTryReturn(NID_APP, pPackageAppInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageAppInfo instance must not be null.");
297 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
298 r = pPackageAppInfoImpl->Construct(appId);
299 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[E_PKG_NOT_INSTALLED] app (%ls) is not found.", appId.GetPointer());
301 return pPackageAppInfo;
304 delete pPackageAppInfo;
309 _PackageManagerImpl::GetPackageInfoListN(void) const
311 result r = E_SUCCESS;
313 ArrayList* pList = null;
315 pList = new (std::nothrow) ArrayList();
316 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
319 res = pkgmgrinfo_pkginfo_get_list(PackageInfoEventHandler, pList);
322 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_list() is failed. result = [%d]", res);
324 pList->RemoveAll(true);
333 _PackageManagerImpl::IsPackageInstalled(const PackageId& packageId) const
335 SysTryReturn(NID_APP, packageId.IsEmpty() == false, false, E_INVALID_ARG, "packageId is empty");
338 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
340 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
341 SysTryReturn(NID_APP, pPackageId, false, E_OUT_OF_MEMORY, "pPackageId is null");
343 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
346 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", result, pPackageId.get());
350 if(pPackageInfoHandle)
352 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
355 SysLog(NID_APP, "package = [%ls] is installed.", packageId.GetPointer());
361 _PackageManagerImpl::InstallPackage(const PackageId& packageId, const String& packagePath, IPackageInstallationResponseListener* pListener)
363 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty.");
364 SysTryReturnResult(NID_APP, packagePath.IsEmpty() == false, E_INVALID_ARG, "packagePath is empty.");
365 SysTryReturnResult(NID_APP, File::IsFileExist(packagePath) == true, E_INVALID_ARG, "packagePath is not existed.");
367 String extension = File::GetFileExtension(packagePath);
368 SysTryReturnResult(NID_APP, extension.IsEmpty() == false, E_INVALID_ARG, "extension is empty.");
370 std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(packagePath));
371 SysTryReturnResult(NID_APP, pPackagePath, E_OUT_OF_MEMORY, "pPackagePath is null.");
373 std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
374 SysTryReturnResult(NID_APP, pExtension, E_OUT_OF_MEMORY, "pExtension is null.");
376 if ((strcasecmp(pExtension.get(), "tpk") == 0) || (strcasecmp(pExtension.get(), "wgt") == 0))
378 SysLog(NID_APP, "package = [%ls], packagePath = [%s], extension = [%s]", packageId.GetPointer(), pPackagePath.get(), pExtension.get());
382 SysLog(NID_APP, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
386 // optionalData = 12345abcde
388 optionalData.Append(packageId);
390 std::unique_ptr<char[]> pOptionalData(_StringConverter::CopyToCharArrayN(optionalData));
391 SysTryReturnResult(NID_APP, pOptionalData, E_OUT_OF_MEMORY, "pOptionalData is null.");
393 SysLog(NID_APP, "optionalData = [%s]", pOptionalData.get());
395 result r = E_SUCCESS;
396 _PackageManagerProxy packageManagerProxy;
397 r = packageManagerProxy.Construct();
398 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "packageManagerProxy.Construct() failed.");
400 r = packageManagerProxy.InstallPackage(packageId, packagePath, null);
401 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "packageManagerProxy.InstallPackage() failed.");
403 if (__pRequestClient == null)
405 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
406 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
409 int res = pkgmgr_client_install(__pRequestClient, pExtension.get(), null, pPackagePath.get(), pOptionalData.get(), PM_QUIET, InstallationEventHandler, pListener);
411 if (res < PKGMGR_R_OK)
413 pkgmgr_client_free(__pRequestClient);
414 __pRequestClient = null;
416 if (res == PKGMGR_R_EINVAL)
418 SysLog(NID_APP, "pkgmgr_client_install() returns ARGV error");
419 return E_INVALID_ARG;
421 else if (res == PKGMGR_R_ECOMM)
423 SysLog(NID_APP, "pkgmgr_client_install() returns COMM error");
425 else if (res == PKGMGR_R_ETIMEOUT)
427 SysLog(NID_APP, "pkgmgr_client_install() returns TIME_OUT error");
429 else if (res == PKGMGR_R_ERROR)
431 SysLog(NID_APP, "pkgmgr_client_install() returns Unknown error");
435 SysLog(NID_APP, "pkgmgr_client_install() returns Unknown error, res = %d", res);
445 _PackageManagerImpl::UninstallPackage(const PackageId& packageId, IPackageUninstallationResponseListener* pListener)
447 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty.");
448 SysTryReturnResult(NID_APP, packageId.GetLength() < NATIVE_APP_MAX_APPID_LENGTH, E_INVALID_ARG, "The packageId is invalid.(length)");
449 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
451 result r = E_SUCCESS;
454 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
456 _PackageManagerProxy packageManagerProxy;
457 r = packageManagerProxy.Construct();
458 SysTryReturnResult(NID_APP, r == E_SUCCESS, E_SYSTEM, "packageManagerProxy.Construct() failed.");
460 r = packageManagerProxy.UninstallPackage(packageId, pListener);
461 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "packageManagerProxy.UninstallPackage() failed.");
463 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
464 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
466 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
467 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", res, pPackageId.get());
469 res = pkgmgrinfo_pkginfo_get_type(pPackageInfoHandle, &pType);
470 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], package=[%s]", res, pPackageId.get());
472 if (__pRequestClient == null)
474 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
475 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
478 res = pkgmgr_client_uninstall(__pRequestClient, pType, pPackageId.get(), PM_QUIET, UninstallationEventHandler, pListener);
479 SysLog(NID_APP, "pkgmgr_client_uninstall - req=[%d], package=[%s], type=[%s]", res, pPackageId.get(), pType);
481 if(pPackageInfoHandle)
483 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
486 if (res < PKGMGR_R_OK)
488 pkgmgr_client_free(__pRequestClient);
489 __pRequestClient = null;
491 if (res == PKGMGR_R_EINVAL)
493 SysLog(NID_APP, "pkgmgr_client_uninstall() returns ARGV error");
494 return E_INVALID_ARG;
496 else if (res == PKGMGR_R_ECOMM)
498 SysLog(NID_APP, "pkgmgr_client_uninstall() returns COMM error");
500 else if (res == PKGMGR_R_ETIMEOUT)
502 SysLog(NID_APP, "pkgmgr_client_uninstall() returns TIME_OUT error");
504 else if (res == PKGMGR_R_ERROR)
506 SysLog(NID_APP, "pkgmgr_client_uninstall() returns Unknown error");
510 SysLog(NID_APP, "pkgmgr_client_uninstall() returns Unknown error, res = %d", res);
520 _PackageManagerImpl::MoveToExternalStorage(const PackageId& packageId)
522 SysTryReturnResult(NID_APP, packageId.IsEmpty() == false, E_INVALID_ARG, "packageId is empty");
523 SysTryReturnResult(NID_APP, IsPackageInstalled(packageId) == true, E_PKG_NOT_INSTALLED, "package is not installed.");
527 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
528 pkgmgrinfo_pkginfo_h packageInfoHandle = null;
530 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
531 SysTryReturnResult(NID_APP, pPackageId != null, E_OUT_OF_MEMORY, "pPackageId is null");
533 res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &packageInfoHandle);
534 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", res, pPackageId.get());
536 res = pkgmgrinfo_pkginfo_get_type(packageInfoHandle, &pType);
537 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_type() failed. result=[%d], package=[%s]", res, pPackageId.get());
539 res = pkgmgrinfo_pkginfo_get_installed_storage(packageInfoHandle, &storage);
540 SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_installed_storage() failed. result=[%d], package=[%s]", res, pPackageId.get());
542 if (storage == PMINFO_EXTERNAL_STORAGE)
544 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d][E_INVALID_OPERATION]", storage);
545 return E_INVALID_OPERATION;
548 if (__pRequestClient == null)
550 __pRequestClient = pkgmgr_client_new(PC_REQUEST);
551 SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed");
554 SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_MOVE, 1, %s, %s)", pType, pPackageId.get());
555 res = pkgmgr_client_request_service(PM_REQUEST_MOVE, 1, __pRequestClient, pType, pPackageId.get(), null, null, null);
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 SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_MOVE, 0, %s, %s)", pType, pPackageId.get());
623 res = pkgmgr_client_request_service(PM_REQUEST_MOVE, 0, __pRequestClient, pType, pPackageId.get(), null, null, null);
625 if (packageInfoHandle)
627 pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle);
630 if (res < PKGMGR_R_OK)
632 pkgmgr_client_free(__pRequestClient);
633 __pRequestClient = null;
635 if (res == PKGMGR_R_EINVAL)
637 SysLog(NID_APP, "pkgmgr_client_move() returns ARGV error");
638 return E_INVALID_ARG;
640 else if (res == PKGMGR_R_ERROR)
642 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error");
646 SysLog(NID_APP, "pkgmgr_client_move() returns Unknown error, res = %d", res);
656 _PackageManagerImpl::InstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData)
658 SysLog(NID_APP, "reqId[%d], Type[%s], Package[%s], Key[%s], Val[%s]", reqId, pType, pPackageId, pKey, pVal);
662 IPackageInstallationResponseListener* pListener = (IPackageInstallationResponseListener*) pData;
664 if (strcmp(pKey, "end") == 0)
666 if (strcmp(pVal, "ok") == 0)
668 pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_SUCCESS);
669 SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_SUCCESS)");
673 pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
674 SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE)");
679 else if (strcmp(pKey, "install_percent") == 0)
682 sscanf(pVal, "%d", &progress);
684 pListener->OnPackageInstallationInProgressResponseReceived(pPackageId, progress);
685 SysLog(NID_APP, "OnPackageInstallationInProgressResponseReceived(%s, %d)", pPackageId, progress);
693 _PackageManagerImpl::UninstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData)
695 SysLog(NID_APP, "reqId[%d], Type[%s], Package[%s], Key[%s], Val[%s]", reqId, pType, pPackageId, pKey, pVal);
699 if (strcmp(pKey, "end") == 0)
701 IPackageUninstallationResponseListener* pListener = (IPackageUninstallationResponseListener*) pData;
703 if (strcmp(pVal, "ok") == 0)
705 SysLog(NID_APP, "OnPackageUninstallationResponseReceived(true)");
706 pListener->OnPackageUninstallationResponseReceived(pPackageId, true);
710 SysLog(NID_APP, "OnPackageUninstallationResponseReceived(false)");
711 pListener->OnPackageUninstallationResponseReceived(pPackageId, false);
722 _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const
724 SysTryReturn(NID_APP, filePath.IsEmpty() == false, null, E_INVALID_ARG, "filePath is empty.");
725 SysTryReturn(NID_APP, File::IsFileExist(filePath) == true, null, E_FILE_NOT_FOUND, "package is not existed.");
727 String extension = File::GetFileExtension(filePath);
728 SysTryReturn(NID_APP, extension.IsEmpty() == false, null, E_INVALID_ARG, "extension is empty.");
730 std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(filePath));
731 SysTryReturn(NID_APP, pPackagePath, null, E_OUT_OF_MEMORY, "pPackagePath is null.");
733 std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
734 SysTryReturn(NID_APP, pExtension, null, E_OUT_OF_MEMORY, "pExtension is null.");
736 std::unique_ptr< PackageInfo > pPackageInfo(new (std::nothrow) PackageInfo);
737 SysTryReturn(NID_APP, pPackageInfo, null, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
739 SysLog(NID_APP, "packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
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, "package(%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 (IsHybridPackage(filePath) == true)
776 PackageInfo hybridServiceInfo;
777 _PackageParser packageParser;
779 res = packageParser.Construct(&hybridServiceInfo);
780 SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Construct() is failed. [%s]", pPackagePath.get());
782 res = packageParser.Parse(filePath);
783 SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Parse() is failed. [%s]", pPackagePath.get());
785 IList* pList = hybridServiceInfo.GetPrivilegeListN();
788 for (int i = 0; i < pList->GetCount(); i++)
790 PrivilegeInfo* pPrivilegeInfo = dynamic_cast < PrivilegeInfo* >(pList->GetAt(i));
793 String privilege = pPrivilegeInfo->GetId();
794 pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(privilege));
795 SysLog(NID_APP, "privilege[%ls] is added for hybrid.", privilege.GetPointer());
801 if (pPkgInfo->privilege_list)
804 pList = g_list_first(pPkgInfo->privilege_list);
807 char* pPrivilege = (char*)pList->data;
810 pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(pPrivilege));
813 pList = g_list_next(pList);
815 g_list_free(pPkgInfo->privilege_list);
818 std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
821 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
823 pPackageAppInfoImpl->SetAppId(pPkgInfo->pkg_name);
824 pPackageAppInfoImpl->SetAppName(pPkgInfo->label);
825 pPackageAppInfoImpl->SetAppDisplayName(pPkgInfo->label);
826 pPackageAppInfoImpl->SetMainApp(true);
827 if ((pPkgInfo->icon_buf) && (pPkgInfo->icon_size > 0))
829 pPackageAppInfoImpl->SetAppMenuIconBuffer(pPkgInfo->icon_buf, pPkgInfo->icon_size);
832 pPackageInfoImpl->AddPackageAppInfo(*pPackageAppInfo.release());
836 SysLog(NID_APP, "pPackageAppInfo instance must not be null.");
837 pkgmgr_client_free_pkginfo(pPkgmgrInfo);
841 pkgmgr_client_free_pkginfo(pPkgmgrInfo);
845 SysTryReturn(NID_APP, false, null, E_UNSUPPORTED_FORMAT, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
848 return pPackageInfo.release();
852 _PackageManagerImpl::GetPackageInfoListN(const IMap& packageFilterMap) const
854 SysTryReturn(NID_APP, packageFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageFilterMap.GetCount() is invalid.");
856 std::unique_ptr<IMapEnumerator> pEnum(packageFilterMap.GetMapEnumeratorN());
857 SysTryReturn(NID_APP, pEnum, null, E_INVALID_ARG, "GetMapEnumeratorN() is failed.");
859 std::unique_ptr< ArrayList > pList(new (std::nothrow) ArrayList());
860 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList is null.");
864 int res = PMINFO_R_OK;
865 pkgmgrinfo_pkginfo_filter_h handle = null;
867 res = pkgmgrinfo_pkginfo_filter_create(&handle);
868 SysTryReturn(NID_APP, res == PMINFO_R_OK, null, E_SYSTEM, "pkgmgrinfo_pkginfo_filter_create() is failed. [%d]", res);
870 while(pEnum->MoveNext() == E_SUCCESS)
872 String* pKey = static_cast< String* >(pEnum->GetKey());
873 SysTryCatch(NID_APP, pKey, , E_INVALID_ARG, "GetKey() is failed.");
875 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
876 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
878 bool value = pVal->ToBool();
880 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value);
882 if ((*pKey) == PACKAGE_FILTER_UNINSTALLABLE)
884 res = pkgmgrinfo_pkginfo_filter_add_bool(handle, PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE, value);
885 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(REMOVABLE, %d) is failed. [%d]", value, res);
887 else if ((*pKey) == PACKAGE_FILTER_DOWNLOADED)
889 res = pkgmgrinfo_pkginfo_filter_add_bool(handle, PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD, !value);
890 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(PRELOAD, %d) is failed. [%d]", !value, res);
892 else if ((*pKey) == PACKAGE_FILTER_APP_SETTING)
894 res = pkgmgrinfo_pkginfo_filter_add_bool(handle, PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING, value);
895 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(APPSETTING, %d) is failed. [%d]", value, res);
897 else if ((*pKey) == PACKAGE_FILTER_TPK)
899 SysTryCatch(NID_APP, value == true, , E_SYSTEM, "Value(false) is invalid for PACKAGE_FILTER_TPK.");
901 res = pkgmgrinfo_pkginfo_filter_add_string(handle, PMINFO_PKGINFO_PROP_PACKAGE_TYPE, "tpk");
902 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_string(TYPE, tpk) is failed. [%d]", res);
904 else if ((*pKey) == PACKAGE_FILTER_EXTERNAL_STORAGE)
906 String installedStorage;
909 installedStorage = L"installed_external";
913 installedStorage = L"installed_internal";
916 std::unique_ptr<char[]> pInstalledStorage(_StringConverter::CopyToCharArrayN(installedStorage));
917 SysTryCatch(NID_APP, pInstalledStorage, , E_OUT_OF_MEMORY, "pInstalledStorage is null.");
919 SysLog(NID_APP, "Value[%d]->[%s]", value, pInstalledStorage.get());
921 res = pkgmgrinfo_pkginfo_filter_add_string(handle, PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE, pInstalledStorage.get());
922 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_string(STORAGE, %s) is failed. [%d]", pInstalledStorage.get(), res);
926 SysTryCatch(NID_APP, false, , E_INVALID_ARG, "Invalid key(%ls)", pKey->GetPointer());
930 res = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle, PackageInfoHandler, pList.get());
931 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_foreach_pkginfo() failed. [%d]", res);
936 pkgmgrinfo_pkginfo_filter_destroy(handle);
939 if (pList->GetCount() <= 0)
941 SysLog(NID_APP, "pList's count is 0.");
945 return pList.release();
949 _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) const
951 SysTryReturn(NID_APP, packageAppFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageAppFilterMap.GetCount() is invalid.");
953 std::unique_ptr< IMapEnumerator > pEnum(packageAppFilterMap.GetMapEnumeratorN());
954 SysTryReturn(NID_APP, pEnum, null, E_INVALID_ARG, "GetMapEnumeratorN() is failed.");
956 std::unique_ptr< ArrayList > pList(new (std::nothrow) ArrayList());
957 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList is null.");
962 bool definedKey = false;
963 bool metadataKey = false;
965 ArrayList metadataList;
967 pkgmgrinfo_appinfo_filter_h handle = null;
968 pkgmgrinfo_appinfo_metadata_filter_h metaHandle = null;
970 res = pkgmgrinfo_appinfo_filter_create(&handle);
971 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_filter_create() is failed. [%d]", res);
973 res = pkgmgrinfo_appinfo_metadata_filter_create(&metaHandle);
974 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_create() is failed. [%d]", res);
976 while(pEnum->MoveNext() == E_SUCCESS)
978 String* pKey = static_cast< String* >(pEnum->GetKey());
979 SysTryCatch(NID_APP, pKey, , E_INVALID_ARG, "GetKey() is failed.");
981 if ((*pKey) == PACKAGE_APP_FILTER_MENUICON_VISIBLE)
985 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
986 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
988 bool nodisplay = !(pVal->ToBool());
989 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), nodisplay);
991 res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, nodisplay);
992 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(NODISPLAY, %d) is failed. [%d]", nodisplay, res);
995 else if ((*pKey) == PACKAGE_APP_FILTER_LAUNCH_ONBOOT)
999 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
1000 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
1002 bool value = pVal->ToBool();
1003 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value);
1005 res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_ONBOOT, value);
1006 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(ONBOOT, %d) is failed. [%d]", value, res);
1008 else if ((*pKey) == PACKAGE_APP_FILTER_AUTO_RESTART)
1012 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
1013 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
1015 bool value = pVal->ToBool();
1016 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value);
1018 res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_AUTORESTART, value);
1019 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(AUTORESTART, %d) is failed. [%d]", value, res);
1022 else if ((*pKey) == PACKAGE_APP_FILTER_LAUNCHING_HISTORY_VISIBLE)
1026 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
1027 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
1029 bool value = pVal->ToBool();
1030 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value);
1032 res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_TASKMANAGE, value);
1033 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(TASKMANAGE, %d) is failed. [%d]", value, res);
1035 else if ((*pKey) == PACKAGE_APP_FILTER_LAUNCH_CONDITION)
1039 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
1040 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
1042 bool value = pVal->ToBool();
1043 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value);
1045 res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION, value);
1046 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(LAUNCHCONDITION, %d) is failed. [%d]", value, res);
1048 else if ((*pKey) == PACKAGE_APP_FILTER_CATEGORY_HOMEAPP || (*pKey) == PACKAGE_APP_FILTER_CATEGORY_LOCKAPP
1049 || (*pKey) == PACKAGE_APP_FILTER_CATEGORY_MENUAPP)
1053 std::unique_ptr<char[]> pDefinedKey(_StringConverter::CopyToCharArrayN(*pKey));
1054 SysTryCatch(NID_APP, pDefinedKey, , E_OUT_OF_MEMORY, "pDefinedKey is null.");
1056 Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
1057 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
1059 SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), pVal->ToBool());
1060 SysTryCatch(NID_APP, pVal->ToBool() == true, , E_INVALID_ARG, "Value(false) is not allowed.");
1062 res = pkgmgrinfo_appinfo_filter_add_string(handle, PMINFO_APPINFO_PROP_APP_CATEGORY, pDefinedKey.get());
1063 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_filter_add_string(CATEGORY, %s) is failed. [%d]", pDefinedKey.get(), res);
1069 String* pVal = static_cast< String* >(pEnum->GetValue());
1070 SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
1072 SysLog(NID_APP, "Key[%ls], Value[%ls]", pKey->GetPointer(), pVal->GetPointer());
1074 std::unique_ptr<char[]> pMetaKey(_StringConverter::CopyToCharArrayN(*pKey));
1075 SysTryCatch(NID_APP, pMetaKey, , E_OUT_OF_MEMORY, "pMetaKey is null.");
1077 std::unique_ptr<char[]> pValue(_StringConverter::CopyToCharArrayN(*pVal));
1078 SysTryCatch(NID_APP, pValue, , E_OUT_OF_MEMORY, "pValue is null.");
1080 if ((*pVal) == L"*")
1082 res = pkgmgrinfo_appinfo_metadata_filter_add(metaHandle, pMetaKey.get(), null);
1083 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_add(%s, null) is failed. [%d]", pMetaKey.get(), res);
1087 res = pkgmgrinfo_appinfo_metadata_filter_add(metaHandle, pMetaKey.get(), pValue.get());
1088 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_add(%s, %s) is failed. [%d]", pMetaKey.get(), pValue.get(), res);
1093 if ((definedKey == true) && (metadataKey == false))
1095 res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, pList.get());
1096 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_filter_foreach_appinfo() failed. [%d]", res);
1098 else if ((definedKey == false) && (metadataKey == true))
1100 res = pkgmgrinfo_appinfo_metadata_filter_foreach(metaHandle, PackageAppInfoMetadataHandler, pList.get());
1101 SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_foreach() failed. [%d]", res);
1107 res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, &list);
1108 if (res != PMINFO_R_OK)
1110 SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res);
1114 metadataList.Construct();
1116 res = pkgmgrinfo_appinfo_metadata_filter_foreach(metaHandle, PackageAppInfoMetadataHandler, &metadataList);
1117 if (res != PMINFO_R_OK)
1119 SysLog(NID_APP, "pkgmgrinfo_appinfo_metadata_filter_foreach() is failed. result = [%d]", res);
1123 for (int i = 0; i < list.GetCount(); i++)
1125 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(list.GetAt(i));
1126 if (pPackageAppInfo)
1128 SysLog(NID_APP, "PackageAppFilter - App [%ls]", pPackageAppInfo->GetAppId().GetPointer());
1130 std::unique_ptr< AppId > pAppId(new (std::nothrow) AppId(pPackageAppInfo->GetAppId()));
1131 appIdList.Add(pAppId.release());
1135 for (int j = 0; j < metadataList.GetCount(); j++)
1137 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(metadataList.GetAt(j));
1138 if (pPackageAppInfo)
1140 AppId appId = pPackageAppInfo->GetAppId();
1142 if (appIdList.Contains(appId) == true)
1144 SysLog(NID_APP, "App [%ls] is matched.", appId.GetPointer());
1146 std::unique_ptr< PackageAppInfo > pAppInfo(new (std::nothrow) PackageAppInfo);
1147 SysTryCatch(NID_APP, pAppInfo, , E_OUT_OF_MEMORY, "pAppInfo is null.");
1149 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pAppInfo.get());
1150 pPackageAppInfoImpl->Construct(appId);
1152 pList->Add(pAppInfo.release());
1156 SysLog(NID_APP, "App [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer());
1165 pkgmgrinfo_appinfo_filter_destroy(handle);
1170 pkgmgrinfo_appinfo_metadata_filter_destroy(metaHandle);
1173 if (pList->GetCount() <= 0)
1175 SysLog(NID_APP, "pList's count is 0.");
1179 return pList.release();
1183 _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageFilterMap, const IMap& packageAppFilterMap) const
1185 SysTryReturn(NID_APP, packageFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageFilterMap Count is invalid.");
1186 SysTryReturn(NID_APP, packageAppFilterMap.GetCount() > 0, null, E_INVALID_ARG, "packageAppFilterMap Count is invalid.");
1188 ArrayList appIdList;
1190 std::unique_ptr< IList > pPackageFilterList(GetPackageInfoListN(packageFilterMap));
1191 if (pPackageFilterList == null)
1193 SysLog(NID_APP, "GetPackageInfoListN(packageFilterMap) is null.");
1197 for (int i = 0; i < pPackageFilterList->GetCount(); i++)
1199 PackageInfo* pPackageInfo = dynamic_cast < PackageInfo* >(pPackageFilterList->GetAt(i));
1202 std::unique_ptr< IList > pPackageAppInfoList(pPackageInfo->GetPackageAppInfoListN());
1203 if (pPackageAppInfoList)
1205 for (int j = 0; j < pPackageAppInfoList->GetCount(); j++)
1207 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(pPackageAppInfoList->GetAt(j));
1208 if (pPackageAppInfo)
1210 SysLog(NID_APP, "PackageFilter - App [%ls]", pPackageAppInfo->GetAppId().GetPointer());
1212 std::unique_ptr< AppId > pAppId(new (std::nothrow) AppId(pPackageAppInfo->GetAppId()));
1213 appIdList.Add(pAppId.release());
1220 std::unique_ptr< ArrayList > pList(new (std::nothrow) ArrayList);
1221 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList is null.");
1223 std::unique_ptr< IList > pAppFilterList(GetPackageAppInfoListN(packageAppFilterMap));
1224 if (pAppFilterList == null)
1226 SysLog(NID_APP, "GetPackageAppInfoListN(packageAppFilterMap) is null.");
1230 for (int k = 0; k < pAppFilterList->GetCount(); k++)
1232 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(pAppFilterList->GetAt(k));
1233 if (pPackageAppInfo)
1235 AppId appId = pPackageAppInfo->GetAppId();
1236 SysLog(NID_APP, "AppFilter - App [%ls]", appId.GetPointer());
1238 if (appIdList.Contains(appId) == true)
1240 SysLog(NID_APP, "App [%ls] is matched.", appId.GetPointer());
1242 std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
1243 SysTryReturn(NID_APP, pPackageAppInfo, null, E_OUT_OF_MEMORY, "PackageAppInfo is null.");
1245 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
1246 pPackageAppInfoImpl->Construct(appId);
1248 pList->Add(pPackageAppInfo.release());
1252 SysLog(NID_APP, "App [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer());
1257 if (pList->GetCount() <= 0)
1259 SysLog(NID_APP, "pList's count is 0.");
1263 return pList.release();
1267 _PackageManagerImpl::PackageInfoHandler(const pkgmgrinfo_pkginfo_h handle, void* pUserData)
1269 SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null.");
1270 SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null.");
1272 result r = E_SUCCESS;
1273 int res = PMINFO_R_OK;
1274 char* pPackageId = null;
1275 ArrayList* pList = (ArrayList*)pUserData;
1277 res = pkgmgrinfo_pkginfo_get_pkgname(handle, &pPackageId);
1278 SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_pkginfo_get_pkgname() is failed. [%d]", res);
1280 std::unique_ptr<PackageInfo> pPackageInfo(new (std::nothrow) PackageInfo);
1281 SysTryReturn(NID_APP, pPackageInfo, 0, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
1283 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
1284 r = pPackageInfoImpl->Construct(pPackageId);
1285 SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pPackageId);
1287 pList->Add(*pPackageInfo.release());
1293 _PackageManagerImpl::PackageAppInfoHandler(const pkgmgrinfo_appinfo_h handle, void* pUserData)
1295 SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null.");
1296 SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null.");
1298 result r = E_SUCCESS;
1299 int res = PMINFO_R_OK;
1300 char* pAppId = null;
1301 ArrayList* pList = (ArrayList*)pUserData;
1303 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
1304 SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appid is failed. [%d]", res);
1306 SysLog(NID_APP, "app = [%s]", pAppId);
1308 std::unique_ptr<PackageAppInfo> pPackageAppInfo(new (std::nothrow) PackageAppInfo);
1309 SysTryReturn(NID_APP, pPackageAppInfo, 0, E_OUT_OF_MEMORY, "pPackageAppInfo instance must not be null.");
1311 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
1312 r = pPackageAppInfoImpl->Construct(pAppId);
1313 SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pAppId);
1315 pList->Add(*pPackageAppInfo.release());
1321 _PackageManagerImpl::PackageAppInfoMetadataHandler(const pkgmgrinfo_appinfo_h handle, void* pUserData)
1323 SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null.");
1324 SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null.");
1326 result r = E_SUCCESS;
1327 int res = PMINFO_R_OK;
1328 char* pAppId = null;
1329 ArrayList* pList = (ArrayList*)pUserData;
1331 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
1332 SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appid is failed. [%d]", res);
1334 SysLog(NID_APP, "app = [%s]", pAppId);
1336 std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
1337 SysTryReturn(NID_APP, pPackageAppInfo, 0, E_OUT_OF_MEMORY, "pPackageAppInfo instance must not be null.");
1339 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
1340 r = pPackageAppInfoImpl->Construct(pAppId);
1341 SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pAppId);
1343 pList->Add(*pPackageAppInfo.release());
1349 _PackageManagerImpl::IsHybridPackage(const String& filePath) const
1351 SysTryReturn(NID_APP, filePath.IsEmpty() == false, false, E_INVALID_ARG, "filePath is empty.");
1354 FileUnzipper unzipper;
1357 result r = unzipper.Construct(filePath);
1358 SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "unzipper.Construct() failed.");
1360 r = unzipper.GetEntry(L"info/manifest.xml", zipEntry);
1363 SysLog(NID_APP, "It's hybrid package. [%ls]", filePath.GetPointer());
1368 SysLog(NID_APP, "It's not hybrid package. [%ls]", filePath.GetPointer());
1375 _PackageManagerImpl*
1376 _PackageManagerImpl::GetInstance(void)
1378 return PackageManager::GetInstance()->__pPackageManagerImpl;
1382 _PackageManagerImpl::Construct(void)
1386 result r = __installationList.Construct();
1387 SysTryReturnResult(NID_APP, r == E_SUCCESS, r, "The memory is insufficient.");
1392 _PackageManagerImpl::_PackageManagerImpl(void)
1393 :__pRequestClient(null),
1394 __pListeningClient(null)
1398 _PackageManagerImpl::~_PackageManagerImpl(void)
1403 _PackageManagerImpl::SendPackageEvent(PackageType type, const PackageId& packageId, const char* pEventKey, const char* pEventValue)
1405 result r = E_SUCCESS;
1406 bool install = true;
1408 if (strcmp(pEventKey, "start") == 0)
1410 if ((strcmp(pEventValue, "install") == 0) || (strcmp(pEventValue, "uninstall") == 0))
1412 String* pAppId = new (std::nothrow) String(packageId);
1413 SysTryReturnVoidResult(NID_APP, pAppId != null, E_OUT_OF_MEMORY, "pAppId instance must not be null.");
1415 String* pOperation = new (std::nothrow) String(pEventValue);
1416 SysTryReturnVoidResult(NID_APP, pOperation != null, E_OUT_OF_MEMORY, "pOperation instance must not be null.");
1418 r = __installationList.Add(*pAppId, *pOperation);
1423 SysLog(NID_APP, "Failed to add installation condition.");
1424 SetLastResult(E_SYSTEM);
1429 else if (strcmp(pEventKey, "end") == 0)
1431 String* pOperation = static_cast <String*>(__installationList.GetValue(packageId));
1434 if (pOperation->Equals("uninstall", true) == true)
1439 r = __installationList.Remove(packageId, true);
1442 SysLogException(NID_APP, r, "[%s] Remove Element [%ls] is failed from installing list.", GetErrorMessage(r), packageId.GetPointer());
1447 std::unique_ptr< IEnumeratorT<_PackageManagerEvent*> > pEnum(__packageEventListenerList.GetEnumeratorN());
1448 SysTryReturnVoidResult(NID_APP, pEnum, E_OUT_OF_MEMORY, "The memory is insufficient.");
1450 while (pEnum->MoveNext() == E_SUCCESS)
1452 _PackageManagerEvent* pEvent = null;
1453 pEnum->GetCurrent(pEvent);
1456 _PackageManagerEventArg* pEventArg= new (std::nothrow) _PackageManagerEventArg();
1457 SysTryReturnVoidResult(NID_APP, pEventArg, E_OUT_OF_MEMORY, "The memory is insufficient.");
1459 String eventKey(pEventKey);
1460 String eventValue(pEventValue);
1462 pEventArg->__packageId = packageId;
1463 pEventArg->__eventKey = eventKey;
1464 pEventArg->__eventValue = eventValue;
1465 pEventArg->__install = install;
1467 r = pEvent->Fire(*pEventArg);
1470 SysLog(NID_APP, "pEvent->Fire(*pEventArg) failed. [%s]", GetErrorMessage(r));
1473 SysLog(NID_APP, "Package = [%ls], Key = [%ls], Value = [%ls], install = [%d]", pEventArg->__packageId.GetPointer(), pEventArg->__eventKey.GetPointer(), pEventArg->__eventValue.GetPointer(), pEventArg->__install);
1477 SysLog(NID_APP, "pEvent is null.");
1483 _PackageManagerImpl::GetPackageInfoN(PackageType packageType, const String& packageName) const
1485 SysTryReturn(NID_APP, packageName.IsEmpty() == false, null, E_INVALID_ARG, "[E_INVALID_ARG] packageName is empty.");
1487 result r = E_SUCCESS;
1489 DbStatement* pStmt = null;
1490 DbEnumerator* pEnum = null;
1492 PackageInfo *pPackageInfo = null;
1494 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());
1496 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1497 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1499 pStmt = CreateStatementN(db, query);
1501 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1503 pEnum = ExecuteStatementN(db, pStmt);
1506 if (pEnum->MoveNext() == E_SUCCESS)
1508 pPackageInfo = new (std::nothrow) PackageInfo;
1509 SysTryReturn(NID_APP, pPackageInfo != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageInfo instance must not be null.");
1511 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
1517 String appApiVersion;
1520 String appDescription;
1524 int appStorageType = 0;
1525 DateTime appInstallationTime;
1528 pEnum->GetStringAt(1, id);
1529 pEnum->GetStringAt(3, appVersion);
1530 pEnum->GetStringAt(4, appType);
1531 pEnum->GetStringAt(5, appMimeType);
1532 pEnum->GetStringAt(6, appApiVersion);
1533 pEnum->GetStringAt(7, appName);
1534 pEnum->GetStringAt(8, appVendor);
1535 pEnum->GetStringAt(9, appDescription);
1536 pEnum->GetStringAt(10, appUrl);
1537 pEnum->GetStringAt(11, appCid);
1538 pEnum->GetStringAt(16, appRootPath);
1539 pEnum->GetIntAt(17, appStorageType);
1540 pEnum->GetDateTimeAt(18, appInstallationTime);
1541 pEnum->GetStringAt(21, appIconPath);
1543 pPackageInfoImpl->SetAppId(id);
1544 pPackageInfoImpl->SetAppVersion(appVersion);
1545 pPackageInfoImpl->SetAppMimeType(appMimeType);
1546 pPackageInfoImpl->SetAppApiVersion(appApiVersion);
1547 pPackageInfoImpl->SetAppName(appName);
1548 pPackageInfoImpl->SetAppVendor(appVendor);
1549 pPackageInfoImpl->SetAppDescription(appDescription);
1550 pPackageInfoImpl->SetAppUrl(appUrl);
1551 pPackageInfoImpl->SetAppCid(appCid);
1552 pPackageInfoImpl->SetAppRootPath(appRootPath);
1553 pPackageInfoImpl->SetAppStorageType(appStorageType);
1554 pPackageInfoImpl->SetAppInstallationTime(appInstallationTime);
1555 pPackageInfoImpl->SetAppIconPath(appIconPath);
1562 r = E_OBJ_NOT_FOUND;
1567 return pPackageInfo;
1571 _PackageManagerImpl::PackageInfoEventHandler(const pkgmgrinfo_pkginfo_h handle, void* pUserData)
1573 SysTryReturn(NID_APP, handle != null, 0, E_SYSTEM, "[E_SYSTEM] handle must not be null.");
1575 result r = E_SUCCESS;
1577 char* pPackage = null;
1578 ArrayList* pList = (ArrayList*)pUserData;
1580 std::unique_ptr< PackageInfo > pPackageInfo(new (std::nothrow) PackageInfo);
1581 SysTryReturn(NID_APP, pPackageInfo, null, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
1583 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
1585 result = pkgmgrinfo_pkginfo_get_pkgname(handle, &pPackage);
1588 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname(): package = [%s]", pPackage);
1592 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname() is failed. result = [%d]", result);
1595 r = pPackageInfoImpl->Construct(pPackage);
1596 SysTryReturn(NID_APP, r == E_SUCCESS, -1, E_SYSTEM, "pPackageInfoImpl->Construct() failed.");
1598 r = pList->Add(*pPackageInfo.release());
1599 SysTryReturn(NID_APP, r == E_SUCCESS, -1, E_SYSTEM, "pList->Add() failed.");
1605 _PackageManagerImpl::GetFilteredAppIdListN(const String& feature, const String& value) const
1607 result r = E_SUCCESS;
1609 DbStatement* pStmt = null;
1610 DbEnumerator* pEnum = null;
1612 ArrayList* pList = null;
1614 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());
1616 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1617 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1619 pStmt = CreateStatementN(db, query);
1620 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1622 pEnum = ExecuteStatementN(db, pStmt);
1626 pList = new (std::nothrow) ArrayList();
1627 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
1630 while (pEnum->MoveNext() == E_SUCCESS)
1632 String* pPackageName = new (std::nothrow) String;
1633 SysTryReturn(NID_APP, pPackageName != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageName instance must not be null.");
1635 pEnum->GetStringAt(0, *pPackageName);
1637 pList->Add(*pPackageName);
1645 r = E_OBJ_NOT_FOUND;
1654 _PackageManagerImpl::GetDataControlInfoN(const String& providerId, const String& type) const
1656 result r = E_SUCCESS;
1658 DbStatement* pStmt = null;
1659 DbEnumerator* pEnum = null;
1661 ArrayList* pList = null;
1663 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());
1665 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1666 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1668 pStmt = CreateStatementN(db, query);
1669 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1671 pEnum = ExecuteStatementN(db, pStmt);
1675 pList = new (std::nothrow) ArrayList();
1676 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "ArrayList creation failure.");
1679 while (pEnum->MoveNext() == E_SUCCESS)
1681 String* pPackageName = new (std::nothrow) String;
1682 SysTryReturn(NID_APP, pPackageName != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageName instance must not be null.");
1684 String* pAccess = new (std::nothrow) String;
1685 SysTryReturn(NID_APP, pAccess != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pAccess instance must not be null.");
1687 pEnum->GetStringAt(0, *pPackageName);
1688 pList->Add(*pPackageName);
1690 pEnum->GetStringAt(1, *pAccess);
1691 pList->Add(*pAccess);
1699 r = E_OBJ_NOT_FOUND;
1708 _PackageManagerImpl::GetUiThemeListN(const PackageId& packageId) const
1710 result r = E_SUCCESS;
1712 DbStatement* pStmt = null;
1713 DbEnumerator* pEnum = null;
1715 HashMap* pList = null;
1717 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')"
1718 , packageId.GetPointer());
1720 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1721 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1723 pStmt = CreateStatementN(db, query);
1724 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1726 pEnum = ExecuteStatementN(db, pStmt);
1730 pList = new (std::nothrow) HashMap();
1731 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "HashMap creation failure.");
1734 while (pEnum->MoveNext() == E_SUCCESS)
1736 String* pName = new (std::nothrow) String;
1737 SysTryCatch(NID_APP, pName != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pName instance must not be null.");
1739 String* pValue = new (std::nothrow) String;
1740 SysTryCatch(NID_APP, pValue != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pValue instance must not be null.");
1742 pEnum->GetStringAt(0, *pName);
1743 pEnum->GetStringAt(1, *pValue);
1745 pList->Add(*pName, *pValue);
1753 r = E_OBJ_NOT_FOUND;
1762 _PackageManagerImpl::IsAppInstalled(const AppId& appId)
1764 if (appId == _AppInfo::GetPackageId())
1770 pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
1772 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(appId));
1773 SysTryReturn(NID_APP, pPackageId, false, E_OUT_OF_MEMORY, "pPackageId is null");
1775 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
1776 SysTryReturn(NID_APP, result == 0, false, E_APP_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", result, pPackageId.get());
1778 if(pPackageInfoHandle)
1780 pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
1787 _PackageManagerImpl::PackageEventHandler(int req_id, const char* pkg_type, const char* pkg_name,
1788 const char* key, const char* val, const void* pmsg, void* data)
1790 SysLog(NID_APP, "PackageEventHandler - req: %d, pkg_type: %s, pkg_name: %s, key: %s, val: %s", req_id, pkg_type,
1791 pkg_name, key, val);
1793 PackageType type = PACKAGE_TYPE_TPK;
1794 PackageId packageId(pkg_name);
1796 if (strcmp(pkg_type, "tpk") == 0)
1798 type = PACKAGE_TYPE_TPK;
1800 else if (strcmp(pkg_type, "wgt") == 0)
1802 type = PACKAGE_TYPE_WGT;
1806 SysLog(NID_APP, "Invalid type - pkg_type: %s", pkg_type);
1810 _PackageManagerImpl* pThis = _PackageManagerImpl::GetInstance();
1811 pThis->SendPackageEvent(type, packageId, key, val);
1817 _PackageManagerImpl::GetAppIdOfDataControlN(const String& providerId)
1819 result r = E_SUCCESS;
1821 DbStatement* pStmt = null;
1822 DbEnumerator* pEnum = null;
1824 String* pAppId = null;
1826 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, DataControl WHERE DataControl.PROVIDER_ID = '%ls' and DataControl.ID = AppInfo.UNIQUE_ID",
1827 providerId.GetPointer());
1829 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1830 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1832 pStmt = CreateStatementN(db, query);
1833 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1835 pEnum = ExecuteStatementN(db, pStmt);
1839 if (pEnum->MoveNext() == E_SUCCESS)
1841 pAppId = new (std::nothrow) String;
1842 SysTryReturn(NID_APP, pAppId != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
1844 pEnum->GetStringAt(0, *pAppId);
1856 _PackageManagerImpl::GetPackageInfoN(const String& providerId, const String& operationId) const
1858 result r = E_SUCCESS;
1859 PackageInfo* pPkgInfo = null;
1861 DbStatement* pStmt = null;
1862 DbEnumerator* pEnum = null;
1865 query.Format(1024, L"SELECT PkgInfo.PKG_ID FROM PkgInfo, AppInfo, AppInfoLookup, AppControl, Capability "
1866 "WHERE AppControl.PROVIDER_ID ='%ls' and Capability.OPERATION_ID ='%ls' and AppControl.ID = AppInfoLookup.AppControlID "
1867 "and Capability.ID = AppInfoLookup.CapabilityID and AppInfoLookup.AppInfoID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID "
1868 "GROUP BY AppInfoID"
1869 , providerId.GetPointer(), operationId.GetPointer());
1871 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1872 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1874 pStmt = CreateStatementN(db, query);
1875 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1877 pEnum = ExecuteStatementN(db, pStmt);
1880 if (pEnum->MoveNext() == E_SUCCESS)
1882 PackageId packageId;
1883 pEnum->GetStringAt(0, packageId);
1885 pPkgInfo = GetPackageInfoN(packageId);
1892 r = E_OBJ_NOT_FOUND;
1901 _PackageManagerImpl::GetPackageAppInfoImplListN(const String& packageId) const
1903 result r = E_SUCCESS;
1905 DbStatement* pStmt = null;
1906 DbEnumerator* pEnum = null;
1909 PackageInfo* pPkgInfo = null;
1910 _PackageInfoImpl* pPackageInfoImpl = null;
1911 ArrayList* pList = null;
1913 pPkgInfo = GetPackageInfoN(packageId);
1914 SysTryCatch(NID_APP, pPkgInfo != null, , r, "[%s] GetPackageInfoN() is failed", GetErrorMessage(r));
1916 pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPkgInfo);
1917 query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", pPackageInfoImpl->GetUniqueId());
1919 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1920 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1922 pStmt = CreateStatementN(db, query);
1923 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1924 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1926 pEnum = ExecuteStatementN(db, pStmt);
1930 pList = new (std::nothrow) ArrayList;
1931 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Container allocation failure.");
1935 while (pEnum->MoveNext() == E_SUCCESS)
1937 _PackageAppInfoImpl* pPackageAppInfoImpl = new (std::nothrow) _PackageAppInfoImpl;
1938 SysTryReturn(NID_APP, pPackageAppInfoImpl != null, null, E_OUT_OF_MEMORY, "pPackageAppInfoImpl instance must not be null.");
1944 String mainmenuIcon;
1946 String quickpanelIcon;
1950 pEnum->GetIntAt(0, uniqueId);
1951 pEnum->GetIntAt(1, pkgId);
1952 pEnum->GetStringAt(2, name);
1953 pEnum->GetStringAt(3, defaultapp);
1954 pEnum->GetStringAt(4, mainmenuIcon);
1955 pEnum->GetStringAt(5, settingIcon);
1956 pEnum->GetStringAt(7, quickpanelIcon);
1957 pEnum->GetIntAt(9, appFeature);
1958 pEnum->GetStringAt(10, packageName);
1960 pPackageAppInfoImpl->SetUniqueId(uniqueId);
1961 pPackageAppInfoImpl->SetPkgId(pkgId);
1962 pPackageAppInfoImpl->SetName(name);
1963 pPackageAppInfoImpl->SetDefault(defaultapp);
1964 pPackageAppInfoImpl->SetMainmenuIcon(mainmenuIcon);
1965 pPackageAppInfoImpl->SetSettingIcon(settingIcon);
1966 pPackageAppInfoImpl->SetQuickpanelIcon(quickpanelIcon);
1967 pPackageAppInfoImpl->SetAppFeature(appFeature);
1968 pPackageAppInfoImpl->SetPackageName(packageName);
1970 pList->Add(*pPackageAppInfoImpl);
1983 _PackageManagerImpl::GetPackageAppFeatureListN(const PackageId& packageId, const Tizen::Base::String& appExecutableName) const
1985 ArrayList* pAppInfoList = GetPackageAppInfoImplListN(packageId);
1986 SysTryReturn(NID_APP, pAppInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppInfo list instance must not be null.");
1988 ArrayList* pResult = null;
1990 for (int i = 0; i < pAppInfoList->GetCount(); i++)
1992 const _PackageAppInfoImpl* pAppInfoImpl = static_cast<const _PackageAppInfoImpl*>(pAppInfoList->GetAt(i));
1993 if (pAppInfoImpl == null)
1998 if (pAppInfoImpl->GetName() == appExecutableName)
2000 pResult = pAppInfoImpl->GetAppFeatureListN();
2006 pAppInfoList->RemoveAll(true);
2007 delete pAppInfoList;
2012 HashMapT<String, _AppFeatureInfoImpl*>*
2013 _PackageManagerImpl::GetPackageAppFeatureMapN(const PackageId& packageId, const Tizen::Base::String& appExecutableName) const
2015 ArrayList* pAppInfoList = GetPackageAppInfoImplListN(packageId);
2016 SysTryReturn(NID_APP, pAppInfoList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] AppInfo list instance must not be null.");
2018 HashMapT<String, _AppFeatureInfoImpl*>* pResult = null;
2020 std::auto_ptr<IEnumerator> pEnum(pAppInfoList->GetEnumeratorN());
2022 while (pEnum->MoveNext() == E_SUCCESS)
2024 const _PackageAppInfoImpl* pAppInfoImpl = static_cast<const _PackageAppInfoImpl*>(pEnum->GetCurrent());
2025 if (pAppInfoImpl == null)
2030 if (pAppInfoImpl->GetName() == appExecutableName)
2032 pResult = pAppInfoImpl->GetAppFeatureMapN();
2038 pAppInfoList->RemoveAll(true);
2039 delete pAppInfoList;
2045 _PackageManagerImpl::GetAppLaunchConditionListN(const String& packageName) const
2047 result r = E_SUCCESS;
2049 DbStatement* pStmt = null;
2050 DbEnumerator* pEnum = null;
2052 ArrayList* pList = null;
2054 query.Format(1024, L"SELECT LaunchCondition.* FROM LaunchCondition, AppInfo WHERE AppInfo.UNIQUE_ID = LaunchCondition.ID and AppInfo.PACKAGE_NAME = '%ls'", packageName.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 pList = new (std::nothrow) ArrayList;
2067 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Container allocation failure.");
2071 while (pEnum->MoveNext() == E_SUCCESS)
2073 _LaunchConditionInfoImpl* pLaunchCondtion = new (std::nothrow) _LaunchConditionInfoImpl;
2074 SysTryReturn(NID_APP, pLaunchCondtion != null, null, E_OUT_OF_MEMORY, "pLaunchCondtion instance must not be null.");
2079 pEnum->GetStringAt(1, name);
2080 pEnum->GetStringAt(2, value);
2082 pLaunchCondtion->SetName(name);
2083 pLaunchCondtion->SetValue(value);
2085 pList->Add(*pLaunchCondtion);
2087 SysLog(NID_APP, "Name[%ls], Value[%ls]", name.GetPointer(), value.GetPointer());
2099 _PackageManagerImpl::GetPackageName(const PackageId& packageId, const String* pName, char* pPackageName, int bufferSize)
2101 result r = E_SUCCESS;
2103 DbStatement* pStmt = null;
2104 DbEnumerator* pEnum = null;
2106 Tizen::Base::String packageName;
2112 L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = '%s' and PkgInfo.PKG_ID = '%ls'",
2113 "True", packageId.GetPointer());
2119 L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and APP_NAME = '%ls' and PkgInfo.PKG_ID = '%ls'",
2120 pName->GetPointer(), packageId.GetPointer());
2123 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2124 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2126 pStmt = CreateStatementN(db, query);
2127 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2128 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2130 pEnum = ExecuteStatementN(db, pStmt);
2133 if (pEnum->MoveNext() == E_SUCCESS)
2135 pEnum->GetStringAt(0, packageName);
2136 snprintf(pPackageName, bufferSize, "%ls", packageName.GetPointer());
2142 r = E_OBJ_NOT_FOUND;
2152 _PackageManagerImpl::GetDefaultAppExecutableName(const PackageId& packageId)
2154 result r = E_SUCCESS;
2156 DbStatement* pStmt = null;
2157 DbEnumerator* pEnum = null;
2159 String executableName;
2163 L"SELECT AppInfo.APP_NAME FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = '%s' and PkgInfo.PKG_ID = '%ls'",
2164 "True", packageId.GetPointer());
2166 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
2167 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
2169 pStmt = CreateStatementN(db, query);
2170 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
2171 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
2173 pEnum = ExecuteStatementN(db, pStmt);
2176 if (pEnum->MoveNext() == E_SUCCESS)
2178 pEnum->GetStringAt(0, executableName);
2184 r = E_OBJ_NOT_FOUND;
2191 return executableName;
2195 _PackageManagerImpl::CreateStatementN(Database& db, const String& query)
2197 result r = E_SUCCESS;
2198 DbStatement* pStmt = null;
2200 for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
2202 pStmt = db.CreateStatementN(query);
2203 r = GetLastResult();
2205 if (r != E_OBJECT_LOCKED)
2211 SysLog(NID_APP, "RetryCount[%d] CreateStatementN - E_OBJECT_LOCKED", i);
2222 _PackageManagerImpl::ExecuteStatementN(Database& db, const DbStatement* pStmt)
2224 result r = E_SUCCESS;
2225 DbEnumerator* pEnum = null;
2227 for (int i = 0; i < MAX_DATABASE_RETRY_COUNT; i++)
2229 pEnum = db.ExecuteStatementN(*pStmt);
2230 r = GetLastResult();
2232 if (r != E_OBJECT_LOCKED)
2238 SysLog(NID_APP, "RetryCount[%d] ExecuteStatementN - E_OBJECT_LOCKED", i);
2248 } } } // Tizen::App::Package