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_PackageInfoImpl.cpp
18 * @brief This is the implementation for the _PackageInfoImpl class.
24 #include <unique_ptr.h>
26 #include <FAppPkgPackageManager.h>
27 #include <FAppPkgPackageAppInfo.h>
28 #include <FAppPkgPackageInfo.h>
29 #include <FIoDatabase.h>
30 #include <FIoDbEnumerator.h>
31 #include <FIoDbStatement.h>
32 #include <FBaseSysLog.h>
33 #include <FBaseUtilStringTokenizer.h>
34 #include <FSecPrivilegeInfo.h>
36 #include <FBase_StringConverter.h>
37 #include <FSec_PrivilegeManager.h>
39 #include "FApp_PackageManagerProxy.h"
40 #include "FAppPkg_PackageManagerImpl.h"
41 #include "FAppPkg_PackageInfoImpl.h"
42 #include "FAppPkg_PackageAppInfoImpl.h"
44 using namespace Tizen::Base;
45 using namespace Tizen::Base::Collection;
46 using namespace Tizen::Base::Utility;
47 using namespace Tizen::Io;
48 using namespace Tizen::Security;
50 namespace Tizen { namespace App { namespace Package
54 _PackageInfoImpl::GetId(void) const
60 _PackageInfoImpl::SetId(const PackageId& id)
67 _PackageInfoImpl::GetVersion(void) const
73 _PackageInfoImpl::SetVersion(const String& version)
80 _PackageInfoImpl::GetType(void) const
82 SysTryReturn(NID_APP, __id.IsEmpty() == false, PACKAGE_TYPE_TPK, E_SYSTEM, "[E_SYSTEM] id.IsEmpty() is empty.");
85 PackageType type = PACKAGE_TYPE_TPK;
87 _PackageManagerProxy packageManagerProxy;
88 r = packageManagerProxy.Construct();
89 SysTryReturn(NID_APP, r == E_SUCCESS, PACKAGE_TYPE_TPK, E_SYSTEM, "packageManagerProxy.Construct() failed.");
91 type = packageManagerProxy.GetType(__id);
92 SysTryReturn(NID_APP, r == E_SUCCESS, PACKAGE_TYPE_TPK, r, "packageManagerProxy.GetType(%ls) failed.", __id.GetPointer());
98 _PackageInfoImpl::SetType(PackageType packageType)
100 __packageType = packageType;
105 _PackageInfoImpl::GetDisplayName(void) const
107 return __displayName;
111 _PackageInfoImpl::SetDisplayName(const String& displayName)
113 __displayName = displayName;
118 _PackageInfoImpl::GetDescription(void) const
120 return __description;
124 _PackageInfoImpl::SetDescription(const String& description)
126 __description = description;
131 _PackageInfoImpl::GetAuthor(void) const
137 _PackageInfoImpl::SetAuthor(const String& author)
144 _PackageInfoImpl::GetUrl(void) const
150 _PackageInfoImpl::SetUrl(const String& url)
157 _PackageInfoImpl::GetInstallationTime(void) const
163 _PackageInfoImpl::SetInstallationTime(const DateTime& installationTime)
165 __dateTime = installationTime;
170 _PackageInfoImpl::IsInstalledInExternalStorage(void) const
172 return __externalStorage;
176 _PackageInfoImpl::SetInstalledInExternalStorage(bool externalStorage)
178 __externalStorage = externalStorage;
183 _PackageInfoImpl::IsUninstallable(void) const
185 return __uninstallable;
189 _PackageInfoImpl::SetUninstallable(bool uninstallable)
191 __uninstallable = uninstallable;
196 _PackageInfoImpl::IsMovable(void) const
202 _PackageInfoImpl::SetMovable(bool movable)
209 _PackageInfoImpl::IsDownloaded(void) const
215 _PackageInfoImpl::SetDownloaded(bool downloaded)
217 __downloaded = downloaded;
222 _PackageInfoImpl::GetSize(void) const
228 SysTryReturn(NID_APP, __id.IsEmpty() == false, 0, E_SYSTEM, "id is IsEmpty.");
230 std::unique_ptr<char[]> pPackage(_StringConverter::CopyToCharArrayN(__id));
231 SysTryReturn(NID_APP, pPackage, 0, E_OUT_OF_MEMORY, "pPackage is null.");
233 void* pClient = pkgmgr_client_new(PC_REQUEST);
234 SysTryReturn(NID_APP, pClient, 0, E_SYSTEM, "pkgmgr_client_new() failed.");
236 SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, %s)", pPackage.get());
237 size = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, 0, pClient, null, pPackage.get(), null, null, null);
239 pkgmgr_client_free(pClient);
243 SysLog(NID_APP, "GetSize() is not available.");
246 SysLog(NID_APP, "size = [%d]", size);
248 return (long long) size;
252 _PackageInfoImpl::GetDataSize(void) const
258 SysTryReturn(NID_APP, __id.IsEmpty() == false, 0, E_SYSTEM, "id is IsEmpty.");
260 std::unique_ptr<char[]> pPackage(_StringConverter::CopyToCharArrayN(__id));
261 SysTryReturn(NID_APP, pPackage, 0, E_OUT_OF_MEMORY, "pPackage is null.");
263 void* pClient = pkgmgr_client_new(PC_REQUEST);
264 SysTryReturn(NID_APP, pClient, 0, E_SYSTEM, "pkgmgr_client_new() failed.");
266 SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, %s)", pPackage.get());
267 dataSize = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, 1, pClient, null, pPackage.get(), null, null, null);
269 pkgmgr_client_free(pClient);
273 SysLog(NID_APP, "GetDataSize() is not available.");
276 SysLog(NID_APP, "dataSize = [%d]", dataSize);
278 return (long long) dataSize;
282 _PackageInfoImpl::GetMainAppId(void) const
288 _PackageInfoImpl::SetMainAppId(const AppId& appId)
295 _PackageInfoImpl::GetStoreClientId(void) const
297 return __storeClientId;
301 _PackageInfoImpl::SetStoreClientId(const PackageId& packageId)
303 __storeClientId = packageId;
308 _PackageInfoImpl::GetPackageAppInfoListN(void)
310 ArrayList* pList = null;
314 SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
318 pList = new (std::nothrow) ArrayList;
319 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
322 res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_UI_APP, PackageAppInfoListHandler, (void *)pList);
323 res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_SVC_APP, PackageAppInfoListHandler, (void *)pList);
327 SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
329 result r = E_SUCCESS;
331 pList = new (std::nothrow) ArrayList;
332 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList must not be null.");
335 for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
337 PackageAppInfo* pPackageAppInfo = dynamic_cast <PackageAppInfo*>(__pPackageAppInfoList->GetAt(i));
340 std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo);
341 SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
343 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo.get());
344 SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
346 AppId appId = pPackageAppInfo->GetAppId();
347 String appName = pPackageAppInfo->GetAppName();
348 String appDisplayName = pPackageAppInfo->GetAppDisplayName();
349 bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
350 bool mainApp = pPackageAppInfo->IsMainApp();
352 pPackageAppInfoImpl->SetAppId(appId);
353 pPackageAppInfoImpl->SetAppName(appName);
354 pPackageAppInfoImpl->SetAppDisplayName(appDisplayName);
355 pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
356 pPackageAppInfoImpl->SetMainApp(mainApp);
358 r = pList->Add(*pInfo.release());
367 _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const
371 SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
374 pkgmgrinfo_appinfo_h appInfoHandle = null;
376 std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
377 SysTryReturn(NID_APP, pAppId, null, E_OUT_OF_MEMORY, "pAppId is null");
379 res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &appInfoHandle);
382 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): app = [%s]", pAppId.get());
384 PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
385 SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
387 GetPackageAppInfo(appInfoHandle, pPackageAppInfo);
389 return pPackageAppInfo;
393 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo() is failed. result = [%d]", res);
398 SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
400 for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
402 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(__pPackageAppInfoList->GetAt(i));
405 if (appId != pPackageAppInfo->GetAppId())
410 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
411 SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
413 std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo);
414 SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
416 _PackageAppInfoImpl* pImpl = _PackageAppInfoImpl::GetInstance(pInfo.get());
417 SysTryReturn(NID_APP, pImpl, null, E_SYSTEM, "pImpl is null.");
419 String appName = pPackageAppInfo->GetAppName();
420 String appDisplayName = pPackageAppInfo->GetAppDisplayName();
421 bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
422 bool mainApp = pPackageAppInfo->IsMainApp();
423 String tempIconPath = pPackageAppInfoImpl->GetAppTempIconPath();
425 pImpl->SetAppId(appId);
426 pImpl->SetAppName(appName);
427 pImpl->SetAppDisplayName(appDisplayName);
428 pImpl->SetMenuIconVisible(menuIconVisible);
429 pImpl->SetMainApp(mainApp);
430 pImpl->SetAppTempIconPath(tempIconPath);
432 return pInfo.release();
441 _PackageInfoImpl::PackageAppInfoListHandler(const pkgmgrinfo_appinfo_h handle, void* pUser_data)
443 ArrayList* pList = (ArrayList*) pUser_data;
445 PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
446 SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
448 GetPackageAppInfo(handle, pPackageAppInfo);
450 pList->Add(*pPackageAppInfo);
456 _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAppInfo* pPackageAppInfo)
458 SysTryReturn(NID_APP, pPackageAppInfo, false, E_INVALID_ARG, "[E_INVALID_ARG] pPackageAppInfo is null.");
463 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
465 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
468 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid(): app = [%s]", pAppId);
469 pPackageAppInfoImpl->Construct(pAppId);
473 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid() is failed. result = [%d]", res);
480 _PackageInfoImpl::GetPrivilegeListN(void) const
482 result r = E_SUCCESS;
484 std::unique_ptr< ArrayList > pPrivilegeList(new (std::nothrow) ArrayList);
485 SysTryReturn(NID_APP, pPrivilegeList, null, E_OUT_OF_MEMORY, "pPrivilegeList must not be null.");
486 pPrivilegeList->Construct();
490 SysTryReturn(NID_APP, __id.IsEmpty() == false, null, E_SYSTEM, "__id is empty.");
492 std::unique_ptr< IList > pList(_PrivilegeManager::GetPrivilegeListN(__id));
495 SysLog(NID_APP, "_PrivilegeManager::GetPrivilegeListN() is null.");
499 for (int i = 0; i < pList->GetCount(); i++)
501 String* pPrivilege = dynamic_cast < String* >(pList->GetAt(i));
504 std::unique_ptr< PrivilegeInfo > pPrivilegeInfo(new (std::nothrow) PrivilegeInfo);
505 SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null.");
507 r = pPrivilegeInfo->Construct(*pPrivilege);
508 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed.");
510 r = pPrivilegeList->Add(*pPrivilegeInfo.release());
511 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed.");
517 if (__pPrivilegeList)
519 for (int i = 0; i < __pPrivilegeList->GetCount(); i++)
521 String* pPrivilege = dynamic_cast < String* >(__pPrivilegeList->GetAt(i));
524 std::unique_ptr< PrivilegeInfo > pPrivilegeInfo(new (std::nothrow) PrivilegeInfo);
525 SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null.");
527 r = pPrivilegeInfo->Construct(*pPrivilege);
528 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed.");
530 r = pPrivilegeList->Add(*pPrivilegeInfo.release());
531 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed.");
537 if (pPrivilegeList->GetCount() <= 0)
539 SysLog(NID_APP, "pPrivilegeList->GetCount() is invalid.");
543 return pPrivilegeList.release();
547 _PackageInfoImpl::AddPrivilege(const String& privilege)
549 result r = E_SUCCESS;
551 r = __pPrivilegeList->Add(privilege);
552 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPrivilegeList->Add() is failed.");
558 _PackageInfoImpl::AddPackageAppInfo(const PackageAppInfo& packageAppInfo)
560 result r = E_SUCCESS;
561 r = __pPackageAppInfoList->Add(packageAppInfo);
562 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPackageAppInfoList->Add() is failed.");
568 _PackageInfoImpl::_PackageInfoImpl(void)
569 : __appReadOnlySize(0)
571 , __appStorageType(0)
574 , __pPrivilegeList(null)
575 , __pAppInfoImplList(null)
576 , __pPackageAppInfoList(null)
577 , __packageInfoHandle(null)
578 , __uninstallable(true)
580 , __downloaded(false)
581 , __iconAvailable(false)
582 , __externalStorage(false)
583 , __fromDatabase(false)
584 , __packageType(PACKAGE_TYPE_TPK)
585 , __pPackageInfo(null)
587 __pAppInfoImplList = new (std::nothrow) ArrayList;
588 SysTryReturnVoidResult(NID_APP, __pAppInfoImplList != null, E_OUT_OF_MEMORY, "__pAppInfoImplList instance must not be null.");
589 __pAppInfoImplList->Construct();
591 __pPackageAppInfoList = new (std::nothrow) ArrayList;
592 SysTryReturnVoidResult(NID_APP, __pPackageAppInfoList != null, E_OUT_OF_MEMORY, "__pPackageAppInfoList instance must not be null.");
593 __pPackageAppInfoList->Construct();
595 __pPrivilegeList = new (std::nothrow) ArrayList;
596 SysTryReturnVoidResult(NID_APP, __pPrivilegeList != null, E_OUT_OF_MEMORY, "__pPrivilegeList must not be null.");
597 __pPrivilegeList->Construct();
600 _PackageInfoImpl::~_PackageInfoImpl(void)
602 __pAppInfoImplList->RemoveAll(true);
603 delete __pAppInfoImplList;
605 __pPackageAppInfoList->RemoveAll(true);
606 delete __pPackageAppInfoList;
608 __pPrivilegeList->RemoveAll(true);
609 delete __pPrivilegeList;
611 if (__packageInfoHandle)
613 pkgmgrinfo_pkginfo_destroy_pkginfo(__packageInfoHandle);
618 _PackageInfoImpl::GetAppId(void) const
624 _PackageInfoImpl::SetAppId(const String& id)
631 _PackageInfoImpl::GetAppVersion(void) const
637 _PackageInfoImpl::SetAppVersion(const String& appVersion)
639 __version = appVersion;
644 _PackageInfoImpl::GetAppType(void) const
650 _PackageInfoImpl::SetAppType(const String& appType)
657 _PackageInfoImpl::GetAppMimeType(void) const
659 return __appMimeType;
663 _PackageInfoImpl::SetAppMimeType(const String& appMimeType)
665 __appMimeType = appMimeType;
670 _PackageInfoImpl::GetAppApiVersion(void) const
672 return __appApiVersion;
676 _PackageInfoImpl::SetAppApiVersion(const String& appApiVersion)
678 __appApiVersion = appApiVersion;
683 _PackageInfoImpl::GetAppName(void) const
685 return __displayName;
689 _PackageInfoImpl::SetAppName(const String& appName)
691 __displayName = appName;
696 _PackageInfoImpl::GetAppDescription(void) const
698 return __description;
702 _PackageInfoImpl::SetAppDescription(const String& appDescription)
704 __description = appDescription;
709 _PackageInfoImpl::GetAppVendor(void) const
715 _PackageInfoImpl::SetAppVendor(const String& appVendor)
717 __author = appVendor;
722 _PackageInfoImpl::GetAppUrl(void) const
728 _PackageInfoImpl::SetAppUrl(const String& appUrl)
735 _PackageInfoImpl::GetAppCid(void) const
741 _PackageInfoImpl::SetAppCid(const String& appCid)
748 _PackageInfoImpl::GetAppRootPath(void) const
750 return __appRootPath;
754 _PackageInfoImpl::SetAppRootPath(const String& appRootPath)
756 __appRootPath = appRootPath;
761 _PackageInfoImpl::GetAppStorageType(void) const
763 return __appStorageType;
767 _PackageInfoImpl::SetAppStorageType(int appStorageType)
769 __appStorageType = appStorageType;
774 _PackageInfoImpl::GetCertType(void) const
780 _PackageInfoImpl::SetCertType(int certType)
782 __certType = certType;
787 _PackageInfoImpl::GetAppInfoListN(void) const
789 result r = E_SUCCESS;
791 DbStatement* pStmt = null;
792 DbEnumerator* pEnum = null;
795 ArrayList* pList = null;
797 query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", GetUniqueId());
799 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
800 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
802 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
803 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
805 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
808 pList = new (std::nothrow) ArrayList;
809 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
812 while (pEnum->MoveNext() == E_SUCCESS)
814 _PackageAppInfoImpl* pPackageAppInfoImpl = new (std::nothrow) _PackageAppInfoImpl;
815 SysTryReturn(NID_APP, pPackageAppInfoImpl != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
825 String quickpanelIcon;
826 //String launchImageIcon;
830 pEnum->GetIntAt(0, uniqueId);
831 pEnum->GetIntAt(1, pkgId);
832 pEnum->GetStringAt(2, name);
833 pEnum->GetStringAt(3, type);
834 pEnum->GetStringAt(4, defaultapp);
835 pEnum->GetStringAt(5, mainmenuIcon);
836 pEnum->GetStringAt(6, settingIcon);
837 //pEnum->GetStringAt(7, tickerIcon);
838 pEnum->GetStringAt(8, quickpanelIcon);
839 //pEnum->GetStringAt(9, launchImageIcon);
840 pEnum->GetIntAt(10, appFeature);
841 pEnum->GetStringAt(11, packageName);
843 pPackageAppInfoImpl->SetUniqueId(uniqueId);
844 pPackageAppInfoImpl->SetPkgId(pkgId);
845 pPackageAppInfoImpl->SetName(name);
846 pPackageAppInfoImpl->SetType(type);
847 pPackageAppInfoImpl->SetDefault(defaultapp);
848 pPackageAppInfoImpl->SetMainmenuIcon(mainmenuIcon);
849 pPackageAppInfoImpl->SetSettingIcon(settingIcon);
850 //pPackageAppInfoImpl->SetTickerIcon(tickerIcon);
851 pPackageAppInfoImpl->SetQuickpanelIcon(quickpanelIcon);
852 //pPackageAppInfoImpl->SetLaunchImageIcon(launchImageIcon);
853 pPackageAppInfoImpl->SetAppFeature(appFeature);
854 pPackageAppInfoImpl->SetPackageName(packageName);
856 pList->Add(*pPackageAppInfoImpl);
868 _PackageInfoImpl::GetAppInfoList(void)
870 if (__pAppInfoImplList == null)
872 __pAppInfoImplList = GetAppInfoListN();
875 return __pAppInfoImplList;
879 _PackageInfoImpl::AddAppInfo(const _PackageAppInfoImpl& appInfoImpl)
881 result r = E_SUCCESS;
882 r = __pAppInfoImplList->Add(appInfoImpl);
883 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pAppInfoImplList->Add() is failed.");
889 _PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges, ArrayList& privilegeList)
891 result r = E_SUCCESS;
893 DbStatement* pStmt = null;
894 DbEnumerator* pEnum = null;
897 String privilegeListString;
899 String privilegeToken;
902 query.Format(1024, L"SELECT * FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
904 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
905 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
907 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
908 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
910 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
913 if (pEnum->MoveNext() == E_SUCCESS)
915 pEnum->GetStringAt(1, privileges);
916 pEnum->GetStringAt(2, hmacPrivileges);
917 pEnum->GetStringAt(4, privilegeListString);
920 StringTokenizer strTok(privilegeListString, delim);
922 while (strTok.HasMoreTokens())
924 strTok.GetNextToken(privilegeToken);
925 privilegeList.Add(new String(privilegeToken));
939 _PackageInfoImpl::GetPrivilegesValue(String& privileges, String& hmacPrivileges) const
941 privileges = __privileges;
942 hmacPrivileges = __hmacPrivileges;
948 _PackageInfoImpl::SetPrivilegesValue(const String& privileges, const String& hmacPrivileges)
950 __privileges = privileges;
951 __hmacPrivileges = hmacPrivileges;
957 _PackageInfoImpl::GetApiVisibility() const
959 result r = E_SUCCESS;
960 int apiVisibility = 0;
962 DbStatement* pStmt = null;
963 DbEnumerator* pEnum = null;
966 query.Format(1024, L"SELECT CERTIFICATE_TYPE FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
968 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
969 SysTryCatch(NID_APP, r == E_SUCCESS, apiVisibility = -1, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
971 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
972 SysTryCatch(NID_APP, pStmt != null, apiVisibility = -1, GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
974 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
977 if (pEnum->MoveNext() == E_SUCCESS)
979 if (pEnum->GetColumnType(0) != DB_COLUMNTYPE_NULL)
981 r = pEnum->GetIntAt(0, apiVisibility);
982 SysTryCatch(NID_APP, r == E_SUCCESS, apiVisibility = -1, r, "[%s] GetIntAt() is failed.", GetErrorMessage(r));
993 return apiVisibility;
997 _PackageInfoImpl::GetAppIconPath(void) const
999 return __appIconPath;
1003 _PackageInfoImpl::SetAppIconPath(const Tizen::Base::String& appIconPath)
1005 __appIconPath = appIconPath;
1011 _PackageInfoImpl::GetAppInstallationTime(void) const
1017 _PackageInfoImpl::SetAppInstallationTime(const DateTime& installationTime)
1019 __dateTime = installationTime;
1025 _PackageInfoImpl::Construct(const PackageId& packageId)
1027 result r = E_SUCCESS;
1029 char* pPackage = null;
1030 char* pVersion = null;
1032 char* pIconPath = null;
1034 char* pDescription = null;
1035 char* pAuthor = null;
1037 char* pMainAppId = null;
1038 char* pStoreClientId = null;
1039 char* pRootPath = null;
1040 int installedTime = 0;
1041 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
1042 bool removable = true;
1043 bool movable = true;
1044 bool preloaded = true;
1045 bool updated = true;
1047 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
1048 SysTryReturnResult(NID_APP, pPackageId, E_OUT_OF_MEMORY, "pPackageId is null");
1050 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &__packageInfoHandle);
1051 SysTryReturnResult(NID_APP, result == PMINFO_R_OK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", result, pPackageId.get());
1053 __fromDatabase = true;
1055 result = pkgmgrinfo_pkginfo_get_pkgname(__packageInfoHandle, &pPackage);
1056 if (result == PMINFO_R_OK)
1058 String package(pPackage);
1063 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname() is failed. result = [%d]", result);
1066 result = pkgmgrinfo_pkginfo_get_version(__packageInfoHandle, &pVersion);
1067 if (result == PMINFO_R_OK)
1069 String version(pVersion);
1070 __version = version;
1074 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_version() is failed. result = [%d]", result);
1077 result = pkgmgrinfo_pkginfo_get_type(__packageInfoHandle, &pType);
1078 if (result == PMINFO_R_OK)
1085 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type() is failed. result = [%d]", result);
1088 result = pkgmgrinfo_pkginfo_get_label(__packageInfoHandle, &pName);
1089 if (result == PMINFO_R_OK)
1092 __displayName = Name;
1096 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_label() is failed. result = [%d]", result);
1099 result = pkgmgrinfo_pkginfo_get_icon(__packageInfoHandle, &pIconPath);
1100 if (result == PMINFO_R_OK)
1102 String path(pIconPath);
1103 __appIconPath = path;
1107 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_icon() is failed. result = [%d]", result);
1110 result = pkgmgrinfo_pkginfo_is_removable(__packageInfoHandle, &removable);
1111 if (result == PMINFO_R_OK)
1113 if (removable == false)
1115 __uninstallable = false;
1120 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable() is failed. result = [%d]", result);
1123 result = pkgmgrinfo_pkginfo_is_movable(__packageInfoHandle, &movable);
1124 if (result == PMINFO_R_OK)
1126 __movable = movable;
1130 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_movable() is failed. result = [%d]", result);
1133 result = pkgmgrinfo_pkginfo_is_update(__packageInfoHandle, &updated);
1134 if (result == PMINFO_R_OK)
1136 if (updated == true)
1138 __downloaded = true;
1142 result = pkgmgrinfo_pkginfo_is_preload(__packageInfoHandle, &preloaded);
1143 if (result == PMINFO_R_OK)
1145 if (preloaded == true)
1147 __downloaded = false;
1151 __downloaded = true;
1156 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_preload() is failed. result = [%d]", result);
1162 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_update() is failed. result = [%d]", result);
1165 result = pkgmgrinfo_pkginfo_get_description(__packageInfoHandle, &pDescription);
1166 if (result == PMINFO_R_OK)
1168 String description(pDescription);
1169 __description = description;
1173 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_description() is failed. result = [%d]", result);
1176 result = pkgmgrinfo_pkginfo_get_author_name(__packageInfoHandle, &pAuthor);
1177 if (result == PMINFO_R_OK)
1179 String author(pAuthor);
1184 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_author_name() is failed. result = [%d]", result);
1187 result = pkgmgrinfo_pkginfo_get_installed_time(__packageInfoHandle, &installedTime);
1188 if (result == PMINFO_R_OK)
1190 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_time(): installedTime = [%d]", installedTime);
1192 time_t dateTime = (time_t) installedTime;
1193 struct tm* pGmTime = null;
1195 pGmTime = gmtime(&dateTime);
1199 tempTime.SetValue(pGmTime->tm_year + 1900, pGmTime->tm_mon + 1, pGmTime->tm_mday, pGmTime->tm_hour, pGmTime->tm_min, pGmTime->tm_sec);
1200 __dateTime = tempTime;
1201 SysLog(NID_APP, "Time %d %d/%d, %d:%d:%d", tempTime.GetYear(), tempTime.GetMonth(), tempTime.GetDay(), tempTime.GetHour(), tempTime.GetMinute(), tempTime.GetSecond());
1206 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_time() is failed. result = [%d]", result);
1209 result = pkgmgrinfo_pkginfo_get_installed_storage(__packageInfoHandle, &storage);
1210 if (result == PMINFO_R_OK)
1212 if (storage == PMINFO_EXTERNAL_STORAGE)
1214 __externalStorage = true;
1219 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage() is failed. result = [%d]", result);
1222 result = pkgmgrinfo_pkginfo_get_url(__packageInfoHandle, &pUrl);
1223 if (result == PMINFO_R_OK)
1230 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_url() is failed. result = [%d]", result);
1233 result = pkgmgrinfo_pkginfo_get_mainappid(__packageInfoHandle, &pMainAppId);
1234 if (result == PMINFO_R_OK)
1236 AppId mainAppId(pMainAppId);
1237 __mainAppId = mainAppId;
1241 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_mainappid() is failed. result = [%d]", result);
1244 result = pkgmgrinfo_pkginfo_get_storeclientid(__packageInfoHandle, &pStoreClientId);
1245 if (result == PMINFO_R_OK)
1247 String storeClientId(pStoreClientId);
1248 __storeClientId = storeClientId;
1252 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid() is failed. result = [%d]", result);
1255 result = pkgmgrinfo_pkginfo_get_root_path(__packageInfoHandle, &pRootPath);
1256 if (result == PMINFO_R_OK)
1258 String rootPath(pRootPath);
1259 __appRootPath = rootPath;
1263 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_root_path() is failed. result = [%d]", result);
1266 SysLog(NID_APP, "package(%ls), version(%ls), type(%ls), displayName(%ls), uninstallable(%d), downloaded(%d), updated(%d), preloaded(%d)"
1267 "movable(%d), externalStorage(%d), mainApp(%ls), storeClient(%ls), appRootPath(%ls)",
1268 __id.GetPointer(), __version.GetPointer(), __type.GetPointer(), __displayName.GetPointer(), __uninstallable, __downloaded, updated, preloaded,
1269 __movable, __externalStorage, __mainAppId.GetPointer(), __storeClientId.GetPointer(), __appRootPath.GetPointer());
1275 _PackageInfoImpl::GetUniqueId(void) const
1277 result r = E_SUCCESS;
1279 DbStatement* pStmt = null;
1280 DbEnumerator* pEnum = null;
1284 query.Format(1024, L"SELECT UNIQUE_ID FROM PkgInfo WHERE PKG_ID = '%ls'", __id.GetPointer());
1286 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1287 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1289 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1290 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1292 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1295 if (pEnum->MoveNext() == E_SUCCESS)
1297 pEnum->GetIntAt(0, uniqueId);
1304 r = E_OBJ_NOT_FOUND;
1314 _PackageInfoImpl::GetUiScalabilityInfo(String& baseScreenSize, String& coordinateSystem, String& logicalCoordinate) const
1316 result r = E_SUCCESS;
1318 DbStatement* pStmt = null;
1319 DbEnumerator* pEnum = null;
1323 L"SELECT AppFeature.NAME, AppFeature.VALUE FROM AppFeature, AppInfo WHERE AppFeature.ID = AppInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = 'True' and AppInfo.ID = %d", GetUniqueId());
1325 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1326 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1328 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1329 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1330 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1332 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1335 while (pEnum->MoveNext() == E_SUCCESS)
1340 pEnum->GetStringAt(0, name);
1341 pEnum->GetStringAt(1, value);
1343 if (name == L"CoordinateSystem")
1345 coordinateSystem = value;
1347 else if (name == L"BaseScreenSize")
1349 baseScreenSize = value;
1351 else if (name == L"LogicalCoordinate")
1353 logicalCoordinate = value;
1360 r = E_OBJ_NOT_FOUND;
1372 _PackageInfoImpl::GetAppPackageName(void)
1374 if (__appPackageName.IsEmpty() == false)
1376 return __appPackageName;
1379 result r = E_SUCCESS;
1381 DbStatement* pStmt = null;
1382 DbEnumerator* pEnum = null;
1385 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo WHERE AppInfo.APP_DEFAULT = 'True' and ID = %d", GetUniqueId());
1387 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1388 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1390 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1391 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1393 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1396 if (pEnum->MoveNext() == E_SUCCESS)
1398 pEnum->GetStringAt(0, __appPackageName);
1409 return __appPackageName;
1413 _PackageInfoImpl::GetApiVersion(void) const
1415 return __appApiVersion;
1419 _PackageInfoImpl::GetName(void) const
1421 return __displayName;
1425 _PackageInfoImpl::GetInstance(PackageInfo* pPackageInfo)
1429 return pPackageInfo->__pPackageInfoImpl;
1435 const _PackageInfoImpl*
1436 _PackageInfoImpl::GetInstance(const PackageInfo* pPackageInfo)
1440 return pPackageInfo->__pPackageInfoImpl;
1446 } } } // Tizen::App::Package