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 <FSecPrivilegeInfo.h>
35 #include <FBase_StringConverter.h>
36 #include <FBaseUtilStringTokenizer.h>
38 #include "FAppPkg_PackageManagerImpl.h"
39 #include "FAppPkg_PackageInfoImpl.h"
40 #include "FAppPkg_PackageAppInfoImpl.h"
42 using namespace Tizen::Base;
43 using namespace Tizen::Base::Collection;
44 using namespace Tizen::Base::Utility;
45 using namespace Tizen::Io;
46 using namespace Tizen::Security;
48 namespace Tizen { namespace App { namespace Package
52 _PackageInfoImpl::GetId(void) const
58 _PackageInfoImpl::SetId(const PackageId& id)
65 _PackageInfoImpl::GetVersion(void) const
71 _PackageInfoImpl::SetVersion(const String& version)
78 _PackageInfoImpl::GetType(void) const
84 _PackageInfoImpl::SetType(PackageType packageType)
86 __packageType = packageType;
91 _PackageInfoImpl::GetDisplayName(void) const
97 _PackageInfoImpl::SetDisplayName(const String& displayName)
99 __displayName = displayName;
104 _PackageInfoImpl::GetDescription(void) const
106 return __description;
110 _PackageInfoImpl::SetDescription(const String& description)
112 __description = description;
117 _PackageInfoImpl::GetAuthor(void) const
123 _PackageInfoImpl::SetAuthor(const String& author)
130 _PackageInfoImpl::GetUrl(void) const
136 _PackageInfoImpl::SetUrl(const String& url)
143 _PackageInfoImpl::GetInstallationTime(void) const
149 _PackageInfoImpl::SetInstallationTime(const DateTime& installationTime)
151 __dateTime = installationTime;
156 _PackageInfoImpl::IsInstalledInExternalStorage(void) const
158 return __externalStorage;
162 _PackageInfoImpl::SetInstalledInExternalStorage(bool externalStorage)
164 __externalStorage = externalStorage;
169 _PackageInfoImpl::IsUninstallable(void) const
171 return __uninstallable;
175 _PackageInfoImpl::SetUninstallable(bool uninstallable)
177 __uninstallable = uninstallable;
182 _PackageInfoImpl::IsMovable(void) const
188 _PackageInfoImpl::SetMovable(bool movable)
195 _PackageInfoImpl::IsDownloaded(void) const
201 _PackageInfoImpl::SetDownloaded(bool downloaded)
203 __downloaded = downloaded;
208 _PackageInfoImpl::GetSize(void) const
214 SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
216 int result = PMINFO_R_OK;
218 result = pkgmgrinfo_pkginfo_get_total_size(__packageInfoHandle, &size);
219 if (result == PMINFO_R_OK)
221 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size(): size = [%d]", size);
225 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size() is failed. result = [%d]", result);
230 SysLog(NID_APP, "GetSize() is not available.");
233 return (long long) size;
237 _PackageInfoImpl::GetDataSize(void) const
243 SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
245 int result = PMINFO_R_OK;
247 result = pkgmgrinfo_pkginfo_get_data_size(__packageInfoHandle, &dataSize);
248 if (result == PMINFO_R_OK)
250 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size(): dataSize = [%d]", dataSize);
254 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size() is failed. result = [%d]", result);
259 SysLog(NID_APP, "GetDataSize() is not available.");
262 return (long long) dataSize;
266 _PackageInfoImpl::GetMainAppId(void) const
272 _PackageInfoImpl::SetMainAppId(const AppId& appId)
279 _PackageInfoImpl::GetStoreClientId(void) const
281 return __storeClientId;
285 _PackageInfoImpl::SetStoreClientId(const PackageId& packageId)
287 __storeClientId = packageId;
292 _PackageInfoImpl::GetPackageAppInfoListN(void)
294 ArrayList* pList = null;
298 SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
302 pList = new (std::nothrow) ArrayList;
303 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
306 res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_UI_APP, PackageAppInfoListHandler, (void *)pList);
307 res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_SVC_APP, PackageAppInfoListHandler, (void *)pList);
311 SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
313 result r = E_SUCCESS;
315 pList = new (std::nothrow) ArrayList;
316 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList must not be null.");
319 for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
321 PackageAppInfo* pPackageAppInfo = dynamic_cast <PackageAppInfo*>(__pPackageAppInfoList->GetAt(i));
324 std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo);
325 SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
327 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo.get());
328 SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
330 AppId appId = pPackageAppInfo->GetAppId();
331 String appName = pPackageAppInfo->GetAppName();
332 String appDisplayName = pPackageAppInfo->GetAppDisplayName();
333 bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
334 bool mainApp = pPackageAppInfo->IsMainApp();
336 pPackageAppInfoImpl->SetAppId(appId);
337 pPackageAppInfoImpl->SetAppName(appName);
338 pPackageAppInfoImpl->SetAppDisplayName(appDisplayName);
339 pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
340 pPackageAppInfoImpl->SetMainApp(mainApp);
342 r = pList->Add(*pInfo.release());
351 _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const
355 SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
358 pkgmgrinfo_appinfo_h appInfoHandle = null;
360 std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
361 SysTryReturn(NID_APP, pAppId, null, E_OUT_OF_MEMORY, "pAppId is null");
363 res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &appInfoHandle);
366 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): app = [%s]", pAppId.get());
368 PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
369 SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
371 GetPackageAppInfo(appInfoHandle, pPackageAppInfo);
373 return pPackageAppInfo;
377 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo() is failed. result = [%d]", res);
382 SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
384 for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
386 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(__pPackageAppInfoList->GetAt(i));
389 if (appId != pPackageAppInfo->GetAppId())
394 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
395 SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
397 std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo);
398 SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
400 _PackageAppInfoImpl* pImpl = _PackageAppInfoImpl::GetInstance(pInfo.get());
401 SysTryReturn(NID_APP, pImpl, null, E_SYSTEM, "pImpl is null.");
403 String appName = pPackageAppInfo->GetAppName();
404 String appDisplayName = pPackageAppInfo->GetAppDisplayName();
405 bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
406 bool mainApp = pPackageAppInfo->IsMainApp();
407 String tempIconPath = pPackageAppInfoImpl->GetAppTempIconPath();
409 pImpl->SetAppId(appId);
410 pImpl->SetAppName(appName);
411 pImpl->SetAppDisplayName(appDisplayName);
412 pImpl->SetMenuIconVisible(menuIconVisible);
413 pImpl->SetMainApp(mainApp);
414 pImpl->SetAppTempIconPath(tempIconPath);
416 return pInfo.release();
425 _PackageInfoImpl::PackageAppInfoListHandler(const pkgmgrinfo_appinfo_h handle, void* pUser_data)
427 ArrayList* pList = (ArrayList*) pUser_data;
429 PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
430 SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
432 GetPackageAppInfo(handle, pPackageAppInfo);
434 pList->Add(*pPackageAppInfo);
440 _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAppInfo* pPackageAppInfo)
442 SysTryReturn(NID_APP, pPackageAppInfo, false, E_INVALID_ARG, "[E_INVALID_ARG] pPackageAppInfo is null.");
447 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
449 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
452 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid(): app = [%s]", pAppId);
453 pPackageAppInfoImpl->Construct(pAppId);
457 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid() is failed. result = [%d]", res);
464 _PackageInfoImpl::GetPrivilegeListN(void) const
466 SysTryReturn(NID_APP, __pPrivilegeList, null, E_SYSTEM, "__pPrivilegeList must not be null.");
468 result r = E_SUCCESS;
470 std::unique_ptr< ArrayList > pPrivilegeList(new (std::nothrow) ArrayList);
471 SysTryReturn(NID_APP, pPrivilegeList, null, E_OUT_OF_MEMORY, "pPrivilegeList must not be null.");
472 pPrivilegeList->Construct();
474 for (int i = 0; i < __pPrivilegeList->GetCount(); i++)
476 String* pPrivilege = dynamic_cast < String* >(__pPrivilegeList->GetAt(i));
479 std::unique_ptr< PrivilegeInfo > pPrivilegeInfo(new (std::nothrow) PrivilegeInfo);
480 SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null.");
482 r = pPrivilegeInfo->Construct(*pPrivilege);
483 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed.");
485 r = pPrivilegeList->Add(*pPrivilegeInfo.release());
486 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed.");
490 if (pPrivilegeList->GetCount() <= 0)
492 SysLog(NID_APP, "pPrivilegeList->GetCount() is invalid.");
496 return pPrivilegeList.release();
500 _PackageInfoImpl::AddPrivilege(const String& privilege)
502 result r = E_SUCCESS;
504 r = __pPrivilegeList->Add(privilege);
505 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPrivilegeList->Add() is failed.");
511 _PackageInfoImpl::AddPackageAppInfo(const PackageAppInfo& packageAppInfo)
513 result r = E_SUCCESS;
514 r = __pPackageAppInfoList->Add(packageAppInfo);
515 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPackageAppInfoList->Add() is failed.");
521 _PackageInfoImpl::_PackageInfoImpl(void)
522 : __appReadOnlySize(0)
524 , __appStorageType(0)
527 , __pPrivilegeList(null)
528 , __pAppInfoImplList(null)
529 , __pPackageAppInfoList(null)
530 , __packageInfoHandle(null)
531 , __uninstallable(true)
533 , __downloaded(false)
534 , __iconAvailable(false)
535 , __externalStorage(false)
536 , __fromDatabase(false)
537 , __packageType(PACKAGE_TYPE_TPK)
538 , __pPackageInfo(null)
540 __pAppInfoImplList = new (std::nothrow) ArrayList;
541 SysTryReturnVoidResult(NID_APP, __pAppInfoImplList != null, E_OUT_OF_MEMORY, "__pAppInfoImplList instance must not be null.");
542 __pAppInfoImplList->Construct();
544 __pPackageAppInfoList = new (std::nothrow) ArrayList;
545 SysTryReturnVoidResult(NID_APP, __pPackageAppInfoList != null, E_OUT_OF_MEMORY, "__pPackageAppInfoList instance must not be null.");
546 __pPackageAppInfoList->Construct();
548 __pPrivilegeList = new (std::nothrow) ArrayList;
549 SysTryReturnVoidResult(NID_APP, __pPrivilegeList != null, E_OUT_OF_MEMORY, "__pPrivilegeList must not be null.");
550 __pPrivilegeList->Construct();
553 _PackageInfoImpl::~_PackageInfoImpl(void)
555 __pAppInfoImplList->RemoveAll(true);
556 delete __pAppInfoImplList;
558 __pPackageAppInfoList->RemoveAll(true);
559 delete __pPackageAppInfoList;
561 __pPrivilegeList->RemoveAll(true);
562 delete __pPrivilegeList;
564 if (__packageInfoHandle)
566 pkgmgrinfo_pkginfo_destroy_pkginfo(__packageInfoHandle);
571 _PackageInfoImpl::GetAppId(void) const
577 _PackageInfoImpl::SetAppId(const String& id)
584 _PackageInfoImpl::GetAppVersion(void) const
590 _PackageInfoImpl::SetAppVersion(const String& appVersion)
592 __version = appVersion;
597 _PackageInfoImpl::GetAppType(void) const
603 _PackageInfoImpl::SetAppType(const String& appType)
610 _PackageInfoImpl::GetAppMimeType(void) const
612 return __appMimeType;
616 _PackageInfoImpl::SetAppMimeType(const String& appMimeType)
618 __appMimeType = appMimeType;
623 _PackageInfoImpl::GetAppApiVersion(void) const
625 return __appApiVersion;
629 _PackageInfoImpl::SetAppApiVersion(const String& appApiVersion)
631 __appApiVersion = appApiVersion;
636 _PackageInfoImpl::GetAppName(void) const
638 return __displayName;
642 _PackageInfoImpl::SetAppName(const String& appName)
644 __displayName = appName;
649 _PackageInfoImpl::GetAppDescription(void) const
651 return __description;
655 _PackageInfoImpl::SetAppDescription(const String& appDescription)
657 __description = appDescription;
662 _PackageInfoImpl::GetAppVendor(void) const
668 _PackageInfoImpl::SetAppVendor(const String& appVendor)
670 __author = appVendor;
675 _PackageInfoImpl::GetAppUrl(void) const
681 _PackageInfoImpl::SetAppUrl(const String& appUrl)
688 _PackageInfoImpl::GetAppCid(void) const
694 _PackageInfoImpl::SetAppCid(const String& appCid)
701 _PackageInfoImpl::GetAppRootPath(void) const
703 return __appRootPath;
707 _PackageInfoImpl::SetAppRootPath(const String& appRootPath)
709 __appRootPath = appRootPath;
714 _PackageInfoImpl::GetAppStorageType(void) const
716 return __appStorageType;
720 _PackageInfoImpl::SetAppStorageType(int appStorageType)
722 __appStorageType = appStorageType;
727 _PackageInfoImpl::GetCertType(void) const
733 _PackageInfoImpl::SetCertType(int certType)
735 __certType = certType;
740 _PackageInfoImpl::GetAppInfoListN(void) const
742 result r = E_SUCCESS;
744 DbStatement* pStmt = null;
745 DbEnumerator* pEnum = null;
748 ArrayList* pList = null;
750 query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", GetUniqueId());
752 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
753 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
755 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
756 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
758 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
761 pList = new (std::nothrow) ArrayList;
762 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
765 while (pEnum->MoveNext() == E_SUCCESS)
767 _PackageAppInfoImpl* pPackageAppInfoImpl = new (std::nothrow) _PackageAppInfoImpl;
768 SysTryReturn(NID_APP, pPackageAppInfoImpl != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
778 String quickpanelIcon;
779 //String launchImageIcon;
783 pEnum->GetIntAt(0, uniqueId);
784 pEnum->GetIntAt(1, pkgId);
785 pEnum->GetStringAt(2, name);
786 pEnum->GetStringAt(3, type);
787 pEnum->GetStringAt(4, defaultapp);
788 pEnum->GetStringAt(5, mainmenuIcon);
789 pEnum->GetStringAt(6, settingIcon);
790 //pEnum->GetStringAt(7, tickerIcon);
791 pEnum->GetStringAt(8, quickpanelIcon);
792 //pEnum->GetStringAt(9, launchImageIcon);
793 pEnum->GetIntAt(10, appFeature);
794 pEnum->GetStringAt(11, packageName);
796 pPackageAppInfoImpl->SetUniqueId(uniqueId);
797 pPackageAppInfoImpl->SetPkgId(pkgId);
798 pPackageAppInfoImpl->SetName(name);
799 pPackageAppInfoImpl->SetType(type);
800 pPackageAppInfoImpl->SetDefault(defaultapp);
801 pPackageAppInfoImpl->SetMainmenuIcon(mainmenuIcon);
802 pPackageAppInfoImpl->SetSettingIcon(settingIcon);
803 //pPackageAppInfoImpl->SetTickerIcon(tickerIcon);
804 pPackageAppInfoImpl->SetQuickpanelIcon(quickpanelIcon);
805 //pPackageAppInfoImpl->SetLaunchImageIcon(launchImageIcon);
806 pPackageAppInfoImpl->SetAppFeature(appFeature);
807 pPackageAppInfoImpl->SetPackageName(packageName);
809 pList->Add(*pPackageAppInfoImpl);
821 _PackageInfoImpl::GetAppInfoList(void)
823 if (__pAppInfoImplList == null)
825 __pAppInfoImplList = GetAppInfoListN();
828 return __pAppInfoImplList;
832 _PackageInfoImpl::AddAppInfo(const _PackageAppInfoImpl& appInfoImpl)
834 result r = E_SUCCESS;
835 r = __pAppInfoImplList->Add(appInfoImpl);
836 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pAppInfoImplList->Add() is failed.");
842 _PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges, ArrayList& privilegeList)
844 result r = E_SUCCESS;
846 DbStatement* pStmt = null;
847 DbEnumerator* pEnum = null;
850 String privilegeListString;
852 String privilegeToken;
855 query.Format(1024, L"SELECT * FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
857 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
858 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
860 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
861 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
863 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
866 if (pEnum->MoveNext() == E_SUCCESS)
868 pEnum->GetStringAt(1, privileges);
869 pEnum->GetStringAt(2, hmacPrivileges);
870 pEnum->GetStringAt(4, privilegeListString);
873 StringTokenizer strTok(privilegeListString, delim);
875 while (strTok.HasMoreTokens())
877 strTok.GetNextToken(privilegeToken);
878 privilegeList.Add(new String(privilegeToken));
892 _PackageInfoImpl::GetPrivilegesValue(String& privileges, String& hmacPrivileges) const
894 privileges = __privileges;
895 hmacPrivileges = __hmacPrivileges;
901 _PackageInfoImpl::SetPrivilegesValue(const String& privileges, const String& hmacPrivileges)
903 __privileges = privileges;
904 __hmacPrivileges = hmacPrivileges;
910 _PackageInfoImpl::GetApiVisibility() const
912 result r = E_SUCCESS;
913 int apiVisibility = 0;
915 DbStatement* pStmt = null;
916 DbEnumerator* pEnum = null;
919 query.Format(1024, L"SELECT CERTIFICATE_TYPE FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
921 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
922 SysTryCatch(NID_APP, r == E_SUCCESS, apiVisibility = -1, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
924 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
925 SysTryCatch(NID_APP, pStmt != null, apiVisibility = -1, GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
927 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
930 if (pEnum->MoveNext() == E_SUCCESS)
932 if (pEnum->GetColumnType(0) != DB_COLUMNTYPE_NULL)
934 r = pEnum->GetIntAt(0, apiVisibility);
935 SysTryCatch(NID_APP, r == E_SUCCESS, apiVisibility = -1, r, "[%s] GetIntAt() is failed.", GetErrorMessage(r));
946 return apiVisibility;
950 _PackageInfoImpl::GetAppIconPath(void) const
952 return __appIconPath;
956 _PackageInfoImpl::SetAppIconPath(const Tizen::Base::String& appIconPath)
958 __appIconPath = appIconPath;
964 _PackageInfoImpl::GetAppInstallationTime(void) const
970 _PackageInfoImpl::SetAppInstallationTime(const DateTime& installationTime)
972 __dateTime = installationTime;
978 _PackageInfoImpl::Construct(const PackageId& packageId)
980 result r = E_SUCCESS;
982 char* pPackage = null;
983 char* pVersion = null;
985 char* pIconPath = null;
987 char* pDescription = null;
988 char* pAuthor = null;
990 char* pMainAppId = null;
991 char* pStoreClientId = null;
992 char* pRootPath = null;
993 int installedTime = 0;
994 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
995 bool removable = true;
996 bool preloaded = true;
998 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
999 SysTryReturnResult(NID_APP, pPackageId, E_OUT_OF_MEMORY, "pPackageId is null");
1001 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &__packageInfoHandle);
1002 SysTryReturnResult(NID_APP, result == PMINFO_R_OK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", result, pPackageId.get());
1004 __fromDatabase = true;
1006 result = pkgmgrinfo_pkginfo_get_pkgname(__packageInfoHandle, &pPackage);
1007 if (result == PMINFO_R_OK)
1009 String package(pPackage);
1014 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname() is failed. result = [%d]", result);
1017 result = pkgmgrinfo_pkginfo_get_version(__packageInfoHandle, &pVersion);
1018 if (result == PMINFO_R_OK)
1020 String version(pVersion);
1021 __version = version;
1025 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_version() is failed. result = [%d]", result);
1028 result = pkgmgrinfo_pkginfo_get_type(__packageInfoHandle, &pType);
1029 if (result == PMINFO_R_OK)
1036 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type() is failed. result = [%d]", result);
1039 result = pkgmgrinfo_pkginfo_get_label(__packageInfoHandle, &pName);
1040 if (result == PMINFO_R_OK)
1043 __displayName = Name;
1047 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_label() is failed. result = [%d]", result);
1050 result = pkgmgrinfo_pkginfo_get_icon(__packageInfoHandle, &pIconPath);
1051 if (result == PMINFO_R_OK)
1053 String path(pIconPath);
1054 __appIconPath = path;
1058 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_icon() is failed. result = [%d]", result);
1061 result = pkgmgrinfo_pkginfo_is_removable(__packageInfoHandle, &removable);
1062 if (result == PMINFO_R_OK)
1064 if (removable == false)
1066 __uninstallable = false;
1071 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable() is failed. result = [%d]", result);
1074 result = pkgmgrinfo_pkginfo_is_preload(__packageInfoHandle, &preloaded);
1075 if (result == PMINFO_R_OK)
1077 if (preloaded == false)
1079 __downloaded = true;
1084 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_preload() is failed. result = [%d]", result);
1087 result = pkgmgrinfo_pkginfo_get_description(__packageInfoHandle, &pDescription);
1088 if (result == PMINFO_R_OK)
1090 String description(pDescription);
1091 __description = description;
1095 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_description() is failed. result = [%d]", result);
1098 result = pkgmgrinfo_pkginfo_get_author_name(__packageInfoHandle, &pAuthor);
1099 if (result == PMINFO_R_OK)
1101 String author(pAuthor);
1106 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_author_name() is failed. result = [%d]", result);
1109 result = pkgmgrinfo_pkginfo_get_installed_time(__packageInfoHandle, &installedTime);
1110 if (result == PMINFO_R_OK)
1112 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_time(): installedTime = [%d]", installedTime);
1114 time_t dateTime = (time_t) installedTime;
1115 struct tm* pGmTime = null;
1117 pGmTime = gmtime(&dateTime);
1121 tempTime.SetValue(pGmTime->tm_year + 1900, pGmTime->tm_mon + 1, pGmTime->tm_mday, pGmTime->tm_hour, pGmTime->tm_min, pGmTime->tm_sec);
1122 __dateTime = tempTime;
1123 SysLog(NID_APP, "Time %d %d/%d, %d:%d:%d", tempTime.GetYear(), tempTime.GetMonth(), tempTime.GetDay(), tempTime.GetHour(), tempTime.GetMinute(), tempTime.GetSecond());
1128 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_time() is failed. result = [%d]", result);
1131 result = pkgmgrinfo_pkginfo_get_installed_storage(__packageInfoHandle, &storage);
1132 if (result == PMINFO_R_OK)
1134 if (storage == PMINFO_EXTERNAL_STORAGE)
1136 __externalStorage = true;
1141 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage() is failed. result = [%d]", result);
1144 result = pkgmgrinfo_pkginfo_get_url(__packageInfoHandle, &pUrl);
1145 if (result == PMINFO_R_OK)
1152 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_url() is failed. result = [%d]", result);
1155 result = pkgmgrinfo_pkginfo_get_mainappid(__packageInfoHandle, &pMainAppId);
1156 if (result == PMINFO_R_OK)
1158 AppId mainAppId(pMainAppId);
1159 __mainAppId = mainAppId;
1163 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_mainappid() is failed. result = [%d]", result);
1166 result = pkgmgrinfo_pkginfo_get_storeclientid(__packageInfoHandle, &pStoreClientId);
1167 if (result == PMINFO_R_OK)
1169 String storeClientId(pStoreClientId);
1170 __storeClientId = storeClientId;
1174 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid() is failed. result = [%d]", result);
1177 result = pkgmgrinfo_pkginfo_get_root_path(__packageInfoHandle, &pRootPath);
1178 if (result == PMINFO_R_OK)
1180 String rootPath(pRootPath);
1181 __appRootPath = rootPath;
1185 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_root_path() is failed. result = [%d]", result);
1188 SysLog(NID_APP, "package(%ls), version(%ls), type(%ls), displayName(%ls), uninstallable(%d), downloaded(%d), "
1189 "externalStorage(%d), mainApp(%ls), storeClient(%ls), appRootPath(%ls)",
1190 __id.GetPointer(), __version.GetPointer(), __type.GetPointer(), __displayName.GetPointer(), __uninstallable, __downloaded,
1191 __externalStorage, __mainAppId.GetPointer(), __storeClientId.GetPointer(), __appRootPath.GetPointer());
1197 _PackageInfoImpl::GetUniqueId(void) const
1199 result r = E_SUCCESS;
1201 DbStatement* pStmt = null;
1202 DbEnumerator* pEnum = null;
1206 query.Format(1024, L"SELECT UNIQUE_ID FROM PkgInfo WHERE PKG_ID = '%ls'", __id.GetPointer());
1208 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1209 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1211 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1212 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1214 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1217 if (pEnum->MoveNext() == E_SUCCESS)
1219 pEnum->GetIntAt(0, uniqueId);
1226 r = E_OBJ_NOT_FOUND;
1236 _PackageInfoImpl::GetUiScalabilityInfo(String& baseScreenSize, String& coordinateSystem, String& logicalCoordinate) const
1238 result r = E_SUCCESS;
1240 DbStatement* pStmt = null;
1241 DbEnumerator* pEnum = null;
1245 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());
1247 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1248 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1250 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1251 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1252 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1254 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1257 while (pEnum->MoveNext() == E_SUCCESS)
1262 pEnum->GetStringAt(0, name);
1263 pEnum->GetStringAt(1, value);
1265 if (name == L"CoordinateSystem")
1267 coordinateSystem = value;
1269 else if (name == L"BaseScreenSize")
1271 baseScreenSize = value;
1273 else if (name == L"LogicalCoordinate")
1275 logicalCoordinate = value;
1282 r = E_OBJ_NOT_FOUND;
1294 _PackageInfoImpl::GetAppPackageName(void)
1296 if (__appPackageName.IsEmpty() == false)
1298 return __appPackageName;
1301 result r = E_SUCCESS;
1303 DbStatement* pStmt = null;
1304 DbEnumerator* pEnum = null;
1307 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo WHERE AppInfo.APP_DEFAULT = 'True' and ID = %d", GetUniqueId());
1309 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1310 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1312 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1313 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1315 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1318 if (pEnum->MoveNext() == E_SUCCESS)
1320 pEnum->GetStringAt(0, __appPackageName);
1331 return __appPackageName;
1335 _PackageInfoImpl::GetApiVersion(void) const
1337 return __appApiVersion;
1341 _PackageInfoImpl::GetName(void) const
1343 return __displayName;
1347 _PackageInfoImpl::GetInstance(PackageInfo* pPackageInfo)
1351 return pPackageInfo->__pPackageInfoImpl;
1357 const _PackageInfoImpl*
1358 _PackageInfoImpl::GetInstance(const PackageInfo* pPackageInfo)
1362 return pPackageInfo->__pPackageInfoImpl;
1368 } } } // Tizen::App::Package