2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FAppPkg_PackageInfoImpl.cpp
19 * @brief This is the implementation for the _PackageInfoImpl class.
25 #include <unique_ptr.h>
27 #include <FAppPkgPackageManager.h>
28 #include <FAppPkgPackageAppInfo.h>
29 #include <FAppPkgPackageInfo.h>
30 #include <FIoDatabase.h>
31 #include <FIoDbEnumerator.h>
32 #include <FIoDbStatement.h>
33 #include <FBaseSysLog.h>
34 #include <FSecPrivilegeInfo.h>
36 #include <FBase_StringConverter.h>
37 #include <FBaseUtilStringTokenizer.h>
39 #include "FAppPkg_PackageManagerImpl.h"
40 #include "FAppPkg_PackageInfoImpl.h"
41 #include "FAppPkg_PackageAppInfoImpl.h"
43 using namespace Tizen::Base;
44 using namespace Tizen::Base::Collection;
45 using namespace Tizen::Base::Utility;
46 using namespace Tizen::Io;
47 using namespace Tizen::Security;
49 namespace Tizen { namespace App { namespace Package
53 _PackageInfoImpl::GetId(void) const
59 _PackageInfoImpl::SetId(const PackageId& id)
66 _PackageInfoImpl::GetVersion(void) const
72 _PackageInfoImpl::SetVersion(const String& version)
79 _PackageInfoImpl::GetType(void) const
85 _PackageInfoImpl::SetType(PackageType packageType)
87 __packageType = packageType;
92 _PackageInfoImpl::GetDisplayName(void) const
98 _PackageInfoImpl::SetDisplayName(const String& displayName)
100 __displayName = displayName;
105 _PackageInfoImpl::GetDescription(void) const
107 return __description;
111 _PackageInfoImpl::SetDescription(const String& description)
113 __description = description;
118 _PackageInfoImpl::GetAuthor(void) const
124 _PackageInfoImpl::SetAuthor(const String& author)
131 _PackageInfoImpl::GetUrl(void) const
137 _PackageInfoImpl::SetUrl(const String& url)
144 _PackageInfoImpl::GetInstallationTime(void) const
150 _PackageInfoImpl::SetInstallationTime(const DateTime& installationTime)
152 __dateTime = installationTime;
157 _PackageInfoImpl::IsInstalledInExternalStorage(void) const
159 return __externalStorage;
163 _PackageInfoImpl::SetInstalledInExternalStorage(bool externalStorage)
165 __externalStorage = externalStorage;
170 _PackageInfoImpl::IsUninstallable(void) const
172 return __uninstallable;
176 _PackageInfoImpl::SetUninstallable(bool uninstallable)
178 __uninstallable = uninstallable;
183 _PackageInfoImpl::IsMovable(void) const
189 _PackageInfoImpl::SetMovable(bool movable)
196 _PackageInfoImpl::IsDownloaded(void) const
202 _PackageInfoImpl::SetDownloaded(bool downloaded)
204 __downloaded = downloaded;
209 _PackageInfoImpl::GetSize(void) const
215 SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
217 int result = PMINFO_R_OK;
219 result = pkgmgrinfo_pkginfo_get_total_size(__packageInfoHandle, &size);
220 if (result == PMINFO_R_OK)
222 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size(): size = [%d]", size);
226 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size() is failed. result = [%d]", result);
231 SysLog(NID_APP, "GetSize() is not available.");
234 return (long long) size;
238 _PackageInfoImpl::GetDataSize(void) const
244 SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
246 int result = PMINFO_R_OK;
248 result = pkgmgrinfo_pkginfo_get_data_size(__packageInfoHandle, &dataSize);
249 if (result == PMINFO_R_OK)
251 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size(): dataSize = [%d]", dataSize);
255 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size() is failed. result = [%d]", result);
260 SysLog(NID_APP, "GetDataSize() is not available.");
263 return (long long) dataSize;
267 _PackageInfoImpl::GetMainAppId(void) const
273 _PackageInfoImpl::SetMainAppId(const AppId& appId)
280 _PackageInfoImpl::GetStoreClientId(void) const
282 return __storeClientId;
286 _PackageInfoImpl::SetStoreClientId(const PackageId& packageId)
288 __storeClientId = packageId;
293 _PackageInfoImpl::GetPackageAppInfoListN(void)
295 ArrayList* pList = null;
299 SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
303 pList = new (std::nothrow) ArrayList;
304 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
307 res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_UI_APP, PackageAppInfoListHandler, (void *)pList);
308 res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_SVC_APP, PackageAppInfoListHandler, (void *)pList);
312 SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
314 result r = E_SUCCESS;
316 pList = new (std::nothrow) ArrayList;
317 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList must not be null.");
320 for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
322 PackageAppInfo* pPackageAppInfo = dynamic_cast <PackageAppInfo*>(__pPackageAppInfoList->GetAt(i));
325 PackageAppInfo* pInfo = new (std::nothrow) PackageAppInfo;
326 SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
328 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo);
329 SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
331 AppId appId = pPackageAppInfo->GetAppId();
332 String appName = pPackageAppInfo->GetAppName();
333 String appDisplayName = pPackageAppInfo->GetAppDisplayName();
334 bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
335 bool mainApp = pPackageAppInfo->IsMainApp();
337 pPackageAppInfoImpl->SetAppId(appId);
338 pPackageAppInfoImpl->SetAppName(appName);
339 pPackageAppInfoImpl->SetAppDisplayName(appDisplayName);
340 pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
341 pPackageAppInfoImpl->SetMainApp(mainApp);
343 r = pList->Add(*pInfo);
352 _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const
356 SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
359 pkgmgrinfo_appinfo_h appInfoHandle = null;
361 std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
362 SysTryReturn(NID_APP, pAppId, null, E_OUT_OF_MEMORY, "pAppId is null");
364 res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &appInfoHandle);
367 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): appId = [%s]", pAppId.get());
369 PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
370 SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
372 GetPackageAppInfo(appInfoHandle, pPackageAppInfo);
374 return pPackageAppInfo;
378 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo() is failed. result = [%d]", res);
383 SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
385 result r = E_SUCCESS;
387 for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
389 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(__pPackageAppInfoList->GetAt(i));
392 if (appId != pPackageAppInfo->GetAppId())
397 PackageAppInfo* pInfo = new (std::nothrow) PackageAppInfo;
398 SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
400 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo);
401 SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
403 String appName = pPackageAppInfo->GetAppName();
404 String appDisplayName = pPackageAppInfo->GetAppDisplayName();
405 bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
406 bool mainApp = pPackageAppInfo->IsMainApp();
408 pPackageAppInfoImpl->SetAppId(appId);
409 pPackageAppInfoImpl->SetAppName(appName);
410 pPackageAppInfoImpl->SetAppDisplayName(appDisplayName);
411 pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
412 pPackageAppInfoImpl->SetMainApp(mainApp);
423 _PackageInfoImpl::PackageAppInfoListHandler(const pkgmgrinfo_appinfo_h handle, void* pUser_data)
425 ArrayList* pList = (ArrayList*) pUser_data;
427 PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
428 SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
430 GetPackageAppInfo(handle, pPackageAppInfo);
432 pList->Add(*pPackageAppInfo);
438 _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAppInfo* pPackageAppInfo)
440 SysTryReturn(NID_APP, pPackageAppInfo, false, E_INVALID_ARG, "[E_INVALID_ARG] pPackageAppInfo is null.");
445 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
447 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
450 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid(): appId = [%s]", pAppId);
451 pPackageAppInfoImpl->Construct(pAppId);
455 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid() is failed. result = [%d]", res);
462 _PackageInfoImpl::GetPrivilegeListN(void) const
464 SysTryReturn(NID_APP, __pPrivilegeList, null, E_SYSTEM, "__pPrivilegeList must not be null.");
466 result r = E_SUCCESS;
468 ArrayList* pPrivilegeList = new (std::nothrow) ArrayList;
469 SysTryReturn(NID_APP, pPrivilegeList, null, E_OUT_OF_MEMORY, "pPrivilegeList must not be null.");
470 pPrivilegeList->Construct();
472 for (int i = 0; i < __pPrivilegeList->GetCount(); i++)
474 String* pPrivilege = dynamic_cast <String*>(__pPrivilegeList->GetAt(i));
477 PrivilegeInfo* pPrivilegeInfo = new (std::nothrow) PrivilegeInfo;
478 SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null.");
480 pPrivilegeInfo->Construct(*pPrivilege);
482 r = pPrivilegeList->Add(*pPrivilegeInfo);
486 return pPrivilegeList;
490 _PackageInfoImpl::AddPrivilege(const String& privilege)
492 result r = E_SUCCESS;
494 r = __pPrivilegeList->Add(privilege);
495 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPrivilegeList->Add() is failed.");
501 _PackageInfoImpl::AddPackageAppInfo(const PackageAppInfo& packageAppInfo)
503 result r = E_SUCCESS;
504 r = __pPackageAppInfoList->Add(packageAppInfo);
505 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPackageAppInfoList->Add() is failed.");
511 _PackageInfoImpl::_PackageInfoImpl(void)
512 : __appReadOnlySize(0)
514 , __appStorageType(0)
517 , __pPrivilegeList(null)
518 , __pAppInfoImplList(null)
519 , __pPackageAppInfoList(null)
520 , __packageInfoHandle(null)
521 , __uninstallable(true)
523 , __downloaded(false)
524 , __iconAvailable(false)
525 , __externalStorage(false)
526 , __fromDatabase(false)
527 , __packageType(PACKAGE_TYPE_TPK)
528 , __pPackageInfo(null)
530 __pAppInfoImplList = new (std::nothrow) ArrayList;
531 SysTryReturnVoidResult(NID_APP, __pAppInfoImplList != null, E_OUT_OF_MEMORY, "__pAppInfoImplList instance must not be null.");
532 __pAppInfoImplList->Construct();
534 __pPackageAppInfoList = new (std::nothrow) ArrayList;
535 SysTryReturnVoidResult(NID_APP, __pPackageAppInfoList != null, E_OUT_OF_MEMORY, "__pPackageAppInfoList instance must not be null.");
536 __pPackageAppInfoList->Construct();
538 __pPrivilegeList = new (std::nothrow) ArrayList;
539 SysTryReturnVoidResult(NID_APP, __pPrivilegeList != null, E_OUT_OF_MEMORY, "__pPrivilegeList must not be null.");
540 __pPrivilegeList->Construct();
543 _PackageInfoImpl::~_PackageInfoImpl(void)
545 __pAppInfoImplList->RemoveAll(true);
546 delete __pAppInfoImplList;
548 __pPackageAppInfoList->RemoveAll(true);
549 delete __pPackageAppInfoList;
551 __pPrivilegeList->RemoveAll(true);
552 delete __pPrivilegeList;
554 if (__packageInfoHandle)
556 pkgmgrinfo_pkginfo_destroy_pkginfo(__packageInfoHandle);
561 _PackageInfoImpl::GetAppId(void) const
567 _PackageInfoImpl::SetAppId(const String& id)
574 _PackageInfoImpl::GetAppVersion(void) const
580 _PackageInfoImpl::SetAppVersion(const String& appVersion)
582 __version = appVersion;
587 _PackageInfoImpl::GetAppType(void) const
593 _PackageInfoImpl::SetAppType(const String& appType)
600 _PackageInfoImpl::GetAppMimeType(void) const
602 return __appMimeType;
606 _PackageInfoImpl::SetAppMimeType(const String& appMimeType)
608 __appMimeType = appMimeType;
613 _PackageInfoImpl::GetAppApiVersion(void) const
615 return __appApiVersion;
619 _PackageInfoImpl::SetAppApiVersion(const String& appApiVersion)
621 __appApiVersion = appApiVersion;
626 _PackageInfoImpl::GetAppName(void) const
628 return __displayName;
632 _PackageInfoImpl::SetAppName(const String& appName)
634 __displayName = appName;
639 _PackageInfoImpl::GetAppDescription(void) const
641 return __description;
645 _PackageInfoImpl::SetAppDescription(const String& appDescription)
647 __description = appDescription;
652 _PackageInfoImpl::GetAppVendor(void) const
658 _PackageInfoImpl::SetAppVendor(const String& appVendor)
660 __author = appVendor;
665 _PackageInfoImpl::GetAppUrl(void) const
671 _PackageInfoImpl::SetAppUrl(const String& appUrl)
678 _PackageInfoImpl::GetAppCid(void) const
684 _PackageInfoImpl::SetAppCid(const String& appCid)
691 _PackageInfoImpl::GetAppRootPath(void) const
693 return __appRootPath;
697 _PackageInfoImpl::SetAppRootPath(const String& appRootPath)
699 __appRootPath = appRootPath;
704 _PackageInfoImpl::GetAppStorageType(void) const
706 return __appStorageType;
710 _PackageInfoImpl::SetAppStorageType(int appStorageType)
712 __appStorageType = appStorageType;
717 _PackageInfoImpl::GetCertType(void) const
723 _PackageInfoImpl::SetCertType(int certType)
725 __certType = certType;
730 _PackageInfoImpl::GetAppInfoListN(void) const
732 result r = E_SUCCESS;
734 DbStatement* pStmt = null;
735 DbEnumerator* pEnum = null;
738 ArrayList* pList = null;
740 query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", GetUniqueId());
742 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
743 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
745 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
746 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
748 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
751 pList = new (std::nothrow) ArrayList;
752 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
755 while (pEnum->MoveNext() == E_SUCCESS)
757 _PackageAppInfoImpl* pPackageAppInfoImpl = new (std::nothrow) _PackageAppInfoImpl;
758 SysTryReturn(NID_APP, pPackageAppInfoImpl != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
768 String quickpanelIcon;
769 //String launchImageIcon;
773 pEnum->GetIntAt(0, uniqueId);
774 pEnum->GetIntAt(1, pkgId);
775 pEnum->GetStringAt(2, name);
776 pEnum->GetStringAt(3, type);
777 pEnum->GetStringAt(4, defaultapp);
778 pEnum->GetStringAt(5, mainmenuIcon);
779 pEnum->GetStringAt(6, settingIcon);
780 //pEnum->GetStringAt(7, tickerIcon);
781 pEnum->GetStringAt(8, quickpanelIcon);
782 //pEnum->GetStringAt(9, launchImageIcon);
783 pEnum->GetIntAt(10, appFeature);
784 pEnum->GetStringAt(11, packageName);
786 pPackageAppInfoImpl->SetUniqueId(uniqueId);
787 pPackageAppInfoImpl->SetPkgId(pkgId);
788 pPackageAppInfoImpl->SetName(name);
789 pPackageAppInfoImpl->SetType(type);
790 pPackageAppInfoImpl->SetDefault(defaultapp);
791 pPackageAppInfoImpl->SetMainmenuIcon(mainmenuIcon);
792 pPackageAppInfoImpl->SetSettingIcon(settingIcon);
793 //pPackageAppInfoImpl->SetTickerIcon(tickerIcon);
794 pPackageAppInfoImpl->SetQuickpanelIcon(quickpanelIcon);
795 //pPackageAppInfoImpl->SetLaunchImageIcon(launchImageIcon);
796 pPackageAppInfoImpl->SetAppFeature(appFeature);
797 pPackageAppInfoImpl->SetPackageName(packageName);
799 pList->Add(*pPackageAppInfoImpl);
811 _PackageInfoImpl::GetAppInfoList(void)
813 if (__pAppInfoImplList == null)
815 __pAppInfoImplList = GetAppInfoListN();
818 return __pAppInfoImplList;
822 _PackageInfoImpl::AddAppInfo(const _PackageAppInfoImpl& appInfoImpl)
824 result r = E_SUCCESS;
825 r = __pAppInfoImplList->Add(appInfoImpl);
826 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pAppInfoImplList->Add() is failed.");
832 _PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges, ArrayList& privilegeList)
834 result r = E_SUCCESS;
836 DbStatement* pStmt = null;
837 DbEnumerator* pEnum = null;
840 String privilegeListString;
842 String privilegeToken;
845 query.Format(1024, L"SELECT * FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
847 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
848 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
850 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
851 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
853 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
856 if (pEnum->MoveNext() == E_SUCCESS)
858 pEnum->GetStringAt(1, privileges);
859 pEnum->GetStringAt(2, hmacPrivileges);
860 pEnum->GetStringAt(4, privilegeListString);
863 StringTokenizer strTok(privilegeListString, delim);
865 while (strTok.HasMoreTokens())
867 strTok.GetNextToken(privilegeToken);
868 privilegeList.Add(new String(privilegeToken));
882 _PackageInfoImpl::GetPrivilegesValue(String& privileges, String& hmacPrivileges) const
884 privileges = __privileges;
885 hmacPrivileges = __hmacPrivileges;
891 _PackageInfoImpl::SetPrivilegesValue(const String& privileges, const String& hmacPrivileges)
893 __privileges = privileges;
894 __hmacPrivileges = hmacPrivileges;
900 _PackageInfoImpl::GetApiVisibility() const
902 result r = E_SUCCESS;
903 int apiVisibility = 0;
905 DbStatement* pStmt = null;
906 DbEnumerator* pEnum = null;
909 query.Format(1024, L"SELECT CERTIFICATE_TYPE FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
911 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
912 SysTryCatch(NID_APP, r == E_SUCCESS, apiVisibility = -1, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
914 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
915 SysTryCatch(NID_APP, pStmt != null, apiVisibility = -1, GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
917 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
920 if (pEnum->MoveNext() == E_SUCCESS)
922 if (pEnum->GetColumnType(0) != DB_COLUMNTYPE_NULL)
924 r = pEnum->GetIntAt(0, apiVisibility);
925 SysTryCatch(NID_APP, r == E_SUCCESS, apiVisibility = -1, r, "[%s] GetIntAt() is failed.", GetErrorMessage(r));
936 return apiVisibility;
940 _PackageInfoImpl::GetAppIconPath(void) const
942 return __appIconPath;
946 _PackageInfoImpl::SetAppIconPath(const Tizen::Base::String& appIconPath)
948 __appIconPath = appIconPath;
954 _PackageInfoImpl::GetAppInstallationTime(void) const
960 _PackageInfoImpl::SetAppInstallationTime(const DateTime& installationTime)
962 __dateTime = installationTime;
968 _PackageInfoImpl::Construct(const PackageId& packageId)
970 result r = E_SUCCESS;
972 char* pPackage = null;
973 char* pVersion = null;
975 char* pIconPath = null;
977 char* pDescription = null;
978 char* pAuthor = null;
980 char* pMainAppId = null;
981 char* pStoreClientId = null;
982 int installedTime = 0;
983 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
984 bool removable = true;
988 DbStatement* pStmt = null;
989 DbEnumerator* pEnum = null;
992 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
993 SysTryReturnResult(NID_APP, pPackageId, E_OUT_OF_MEMORY, "pPackageId is null");
995 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &__packageInfoHandle);
996 SysTryReturnResult(NID_APP, result == PMINFO_R_OK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], packageId=[%s]", result, pPackageId.get());
998 __fromDatabase = true;
1000 result = pkgmgrinfo_pkginfo_get_pkgname(__packageInfoHandle, &pPackage);
1001 if (result == PMINFO_R_OK)
1003 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname(): package = [%s]", pPackage);
1004 String package(pPackage);
1009 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname() is failed. result = [%d]", result);
1012 result = pkgmgrinfo_pkginfo_get_version(__packageInfoHandle, &pVersion);
1013 if (result == PMINFO_R_OK)
1015 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_version(): version = [%s]", pVersion);
1016 String version(pVersion);
1017 __version = version;
1021 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_version() is failed. result = [%d]", result);
1024 result = pkgmgrinfo_pkginfo_get_type(__packageInfoHandle, &pType);
1025 if (result == PMINFO_R_OK)
1027 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type(): type = [%s]", pType);
1033 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type() is failed. result = [%d]", result);
1036 result = pkgmgrinfo_pkginfo_get_label(__packageInfoHandle, &pName);
1037 if (result == PMINFO_R_OK)
1039 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_label(): name = [%s]", pName);
1041 __displayName = Name;
1045 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_label() is failed. result = [%d]", result);
1048 result = pkgmgrinfo_pkginfo_get_icon(__packageInfoHandle, &pIconPath);
1049 if (result == PMINFO_R_OK)
1051 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_icon(): iconpath = [%s]", pIconPath);
1052 String path(pIconPath);
1053 __appIconPath = path;
1057 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_icon() is failed. result = [%d]", result);
1060 result = pkgmgrinfo_pkginfo_is_removable(__packageInfoHandle, &removable);
1061 if (result == PMINFO_R_OK)
1063 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable(): removable = [%d]", removable);
1065 if (removable == false)
1067 __uninstallable = false;
1072 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable() is failed. result = [%d]", result);
1075 result = pkgmgrinfo_pkginfo_get_description(__packageInfoHandle, &pDescription);
1076 if (result == PMINFO_R_OK)
1078 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_description(): description = [%s]", pDescription);
1079 String description(pDescription);
1080 __description = description;
1084 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_description() is failed. result = [%d]", result);
1087 result = pkgmgrinfo_pkginfo_get_author_name(__packageInfoHandle, &pAuthor);
1088 if (result == PMINFO_R_OK)
1090 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_author_name(): author = [%s]", pAuthor);
1091 String author(pAuthor);
1096 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_author_name() is failed. result = [%d]", result);
1099 result = pkgmgrinfo_pkginfo_get_installed_time(__packageInfoHandle, &installedTime);
1100 if (result == PMINFO_R_OK)
1102 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_time(): installedTime = [%d]", installedTime);
1104 time_t dateTime = (time_t) installedTime;
1105 struct tm* pGmTime = null;
1107 pGmTime = gmtime(&dateTime);
1111 tempTime.SetValue(pGmTime->tm_year + 1900, pGmTime->tm_mon + 1, pGmTime->tm_mday, pGmTime->tm_hour, pGmTime->tm_min, pGmTime->tm_sec);
1112 __dateTime = tempTime;
1113 SysLog(NID_APP, "Time %d %d/%d, %d:%d:%d", tempTime.GetYear(), tempTime.GetMonth(), tempTime.GetDay(), tempTime.GetHour(), tempTime.GetMinute(), tempTime.GetSecond());
1118 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_time() is failed. result = [%d]", result);
1121 result = pkgmgrinfo_pkginfo_get_installed_storage(__packageInfoHandle, &storage);
1122 if (result == PMINFO_R_OK)
1124 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d]", storage);
1125 if (storage == PMINFO_EXTERNAL_STORAGE)
1127 __externalStorage = true;
1132 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage() is failed. result = [%d]", result);
1135 result = pkgmgrinfo_pkginfo_get_url(__packageInfoHandle, &pUrl);
1136 if (result == PMINFO_R_OK)
1138 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_url(): url = [%s]", pUrl);
1144 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_url() is failed. result = [%d]", result);
1147 result = pkgmgrinfo_pkginfo_get_mainappid(__packageInfoHandle, &pMainAppId);
1148 if (result == PMINFO_R_OK)
1150 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_mainappid(): mainAppId = [%s]", pMainAppId);
1151 AppId mainAppId(pMainAppId);
1152 __mainAppId = mainAppId;
1156 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_mainappid() is failed. result = [%d]", result);
1159 result = pkgmgrinfo_pkginfo_get_storeclientid(__packageInfoHandle, &pStoreClientId);
1160 if (result == PMINFO_R_OK)
1162 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid(): storeClientId = [%s]", pStoreClientId);
1163 String storeClientId(pStoreClientId);
1164 __storeClientId = storeClientId;
1168 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid() is failed. result = [%d]", result);
1172 query.Format(1024, L"SELECT PkgInfo.*, AppInfo.APP_MAINMENU_ICON FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = 'True' and PkgInfo.PKG_ID = '%ls'", packageId.GetPointer());
1174 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1175 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1177 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1178 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1180 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1183 if (pEnum->MoveNext() == E_SUCCESS)
1186 int storageType = 0;
1188 if (pEnum->GetColumnType(16) != DB_COLUMNTYPE_NULL)
1190 pEnum->GetStringAt(16, rootPath);
1192 if (pEnum->GetColumnType(17) != DB_COLUMNTYPE_NULL)
1194 pEnum->GetIntAt(17, storageType);
1197 SetAppRootPath(rootPath);
1198 SetAppStorageType(storageType);
1210 _PackageInfoImpl::GetUniqueId(void) const
1212 result r = E_SUCCESS;
1214 DbStatement* pStmt = null;
1215 DbEnumerator* pEnum = null;
1219 query.Format(1024, L"SELECT UNIQUE_ID FROM PkgInfo WHERE PKG_ID = '%ls'", __id.GetPointer());
1221 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1222 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1224 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1225 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1227 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1230 if (pEnum->MoveNext() == E_SUCCESS)
1232 pEnum->GetIntAt(0, uniqueId);
1239 r = E_OBJ_NOT_FOUND;
1249 _PackageInfoImpl::GetUiScalabilityInfo(String& baseScreenSize, String& coordinateSystem, String& logicalCoordinate) const
1251 result r = E_SUCCESS;
1253 DbStatement* pStmt = null;
1254 DbEnumerator* pEnum = null;
1258 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());
1260 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1261 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1263 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1264 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1265 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1267 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1270 while (pEnum->MoveNext() == E_SUCCESS)
1275 pEnum->GetStringAt(0, name);
1276 pEnum->GetStringAt(1, value);
1278 if (name == L"CoordinateSystem")
1280 coordinateSystem = value;
1282 else if (name == L"BaseScreenSize")
1284 baseScreenSize = value;
1286 else if (name == L"LogicalCoordinate")
1288 logicalCoordinate = value;
1295 r = E_OBJ_NOT_FOUND;
1307 _PackageInfoImpl::GetAppPackageName(void)
1309 if (__appPackageName.IsEmpty() == false)
1311 return __appPackageName;
1314 result r = E_SUCCESS;
1316 DbStatement* pStmt = null;
1317 DbEnumerator* pEnum = null;
1320 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo WHERE AppInfo.APP_DEFAULT = 'True' and ID = %d", GetUniqueId());
1322 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1323 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1325 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1326 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1328 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1331 if (pEnum->MoveNext() == E_SUCCESS)
1333 pEnum->GetStringAt(0, __appPackageName);
1344 return __appPackageName;
1348 _PackageInfoImpl::GetApiVersion(void) const
1350 return __appApiVersion;
1354 _PackageInfoImpl::GetName(void) const
1356 return __displayName;
1360 _PackageInfoImpl::GetInstance(PackageInfo* pPackageInfo)
1364 return pPackageInfo->__pPackageInfoImpl;
1370 const _PackageInfoImpl*
1371 _PackageInfoImpl::GetInstance(const PackageInfo* pPackageInfo)
1375 return pPackageInfo->__pPackageInfoImpl;
1381 } } } // Tizen::App::Package