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>
33 #include <FBaseSysLog.h>
34 #include <FBaseUtilStringTokenizer.h>
35 #include <FSecPrivilegeInfo.h>
37 #include <FBase_StringConverter.h>
38 #include <FSec_PrivilegeManager.h>
40 #include "FApp_PackageManagerProxy.h"
41 #include "FAppPkg_PackageManagerImpl.h"
42 #include "FAppPkg_PackageInfoImpl.h"
43 #include "FAppPkg_PackageAppInfoImpl.h"
45 using namespace Tizen::Base;
46 using namespace Tizen::Base::Collection;
47 using namespace Tizen::Base::Utility;
48 using namespace Tizen::Io;
49 using namespace Tizen::Security;
51 namespace Tizen { namespace App { namespace Package
55 _PackageInfoImpl::GetId(void) const
61 _PackageInfoImpl::SetId(const PackageId& id)
68 _PackageInfoImpl::GetVersion(void) const
74 _PackageInfoImpl::SetVersion(const String& version)
81 _PackageInfoImpl::GetType(void) const
83 SysTryReturn(NID_APP, __id.IsEmpty() == false, PACKAGE_TYPE_TPK, E_SYSTEM, "[E_SYSTEM] id.IsEmpty() is empty.");
86 PackageType type = PACKAGE_TYPE_TPK;
88 _PackageManagerProxy packageManagerProxy;
89 r = packageManagerProxy.Construct();
90 SysTryReturn(NID_APP, r == E_SUCCESS, PACKAGE_TYPE_TPK, E_SYSTEM, "packageManagerProxy.Construct() failed.");
92 type = packageManagerProxy.GetType(__id);
93 SysTryReturn(NID_APP, r == E_SUCCESS, PACKAGE_TYPE_TPK, r, "packageManagerProxy.GetType(%ls) failed.", __id.GetPointer());
99 _PackageInfoImpl::SetType(PackageType packageType)
101 __packageType = packageType;
106 _PackageInfoImpl::GetDisplayName(void) const
108 return __displayName;
112 _PackageInfoImpl::SetDisplayName(const String& displayName)
114 __displayName = displayName;
119 _PackageInfoImpl::GetDescription(void) const
121 return __description;
125 _PackageInfoImpl::SetDescription(const String& description)
127 __description = description;
132 _PackageInfoImpl::GetAuthor(void) const
138 _PackageInfoImpl::SetAuthor(const String& author)
145 _PackageInfoImpl::GetUrl(void) const
151 _PackageInfoImpl::SetUrl(const String& url)
158 _PackageInfoImpl::GetInstallationTime(void) const
164 _PackageInfoImpl::SetInstallationTime(const DateTime& installationTime)
166 __dateTime = installationTime;
171 _PackageInfoImpl::IsInstalledInExternalStorage(void) const
173 return __externalStorage;
177 _PackageInfoImpl::SetInstalledInExternalStorage(bool externalStorage)
179 __externalStorage = externalStorage;
184 _PackageInfoImpl::IsUninstallable(void) const
186 return __uninstallable;
190 _PackageInfoImpl::SetUninstallable(bool uninstallable)
192 __uninstallable = uninstallable;
197 _PackageInfoImpl::IsMovable(void) const
203 _PackageInfoImpl::SetMovable(bool movable)
210 _PackageInfoImpl::IsDownloaded(void) const
216 _PackageInfoImpl::SetDownloaded(bool downloaded)
218 __downloaded = downloaded;
223 _PackageInfoImpl::GetSize(void) const
229 SysTryReturn(NID_APP, __id.IsEmpty() == false, 0, E_SYSTEM, "id is IsEmpty.");
230 SysTryReturn(NID_APP, __type.IsEmpty() == false, 0, E_SYSTEM, "type is IsEmpty.");
232 std::unique_ptr<char[]> pPackage(_StringConverter::CopyToCharArrayN(__id));
233 SysTryReturn(NID_APP, pPackage, 0, E_OUT_OF_MEMORY, "pPackage is null.");
235 std::unique_ptr<char[]> pType(_StringConverter::CopyToCharArrayN(__type));
236 SysTryReturn(NID_APP, pType, 0, E_OUT_OF_MEMORY, "pType is null.");
238 void* pClient = pkgmgr_client_new(PC_REQUEST);
239 SysTryReturn(NID_APP, pClient, 0, E_SYSTEM, "pkgmgr_client_new() failed.");
241 SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, %s, %s)", pType.get(), pPackage.get());
242 size = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, 0, pClient, pType.get(), pPackage.get(), null, null, null);
244 pkgmgr_client_free(pClient);
248 SysLog(NID_APP, "GetSize() is not available.");
251 SysLog(NID_APP, "size = [%d]", size);
253 return (long long) size;
257 _PackageInfoImpl::GetDataSize(void) const
263 SysTryReturn(NID_APP, __id.IsEmpty() == false, 0, E_SYSTEM, "id is IsEmpty.");
264 SysTryReturn(NID_APP, __type.IsEmpty() == false, 0, E_SYSTEM, "type is IsEmpty.");
266 std::unique_ptr<char[]> pPackage(_StringConverter::CopyToCharArrayN(__id));
267 SysTryReturn(NID_APP, pPackage, 0, E_OUT_OF_MEMORY, "pPackage is null.");
269 std::unique_ptr<char[]> pType(_StringConverter::CopyToCharArrayN(__type));
270 SysTryReturn(NID_APP, pType, 0, E_OUT_OF_MEMORY, "pType is null.");
272 void* pClient = pkgmgr_client_new(PC_REQUEST);
273 SysTryReturn(NID_APP, pClient, 0, E_SYSTEM, "pkgmgr_client_new() failed.");
275 SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, %s, %s)", pType.get(), pPackage.get());
276 dataSize = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, 1, pClient, pType.get(), pPackage.get(), null, null, null);
278 pkgmgr_client_free(pClient);
282 SysLog(NID_APP, "GetDataSize() is not available.");
285 SysLog(NID_APP, "dataSize = [%d]", dataSize);
287 return (long long) dataSize;
291 _PackageInfoImpl::GetMainAppId(void) const
297 _PackageInfoImpl::SetMainAppId(const AppId& appId)
304 _PackageInfoImpl::GetStoreClientId(void) const
306 return __storeClientId;
310 _PackageInfoImpl::SetStoreClientId(const PackageId& packageId)
312 __storeClientId = packageId;
317 _PackageInfoImpl::GetPackageAppInfoListN(void)
319 ArrayList* pList = null;
323 SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
327 pList = new (std::nothrow) ArrayList;
328 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
331 res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_UI_APP, PackageAppInfoListHandler, (void *)pList);
332 res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_SVC_APP, PackageAppInfoListHandler, (void *)pList);
336 SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
338 result r = E_SUCCESS;
340 pList = new (std::nothrow) ArrayList;
341 SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList must not be null.");
344 for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
346 PackageAppInfo* pPackageAppInfo = dynamic_cast <PackageAppInfo*>(__pPackageAppInfoList->GetAt(i));
349 std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo);
350 SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
352 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo.get());
353 SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
355 AppId appId = pPackageAppInfo->GetAppId();
356 String appName = pPackageAppInfo->GetAppName();
357 String appDisplayName = pPackageAppInfo->GetAppDisplayName();
358 bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
359 bool mainApp = pPackageAppInfo->IsMainApp();
361 pPackageAppInfoImpl->SetAppId(appId);
362 pPackageAppInfoImpl->SetAppName(appName);
363 pPackageAppInfoImpl->SetAppDisplayName(appDisplayName);
364 pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
365 pPackageAppInfoImpl->SetMainApp(mainApp);
367 r = pList->Add(*pInfo.release());
376 _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const
380 SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
383 pkgmgrinfo_appinfo_h appInfoHandle = null;
385 std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
386 SysTryReturn(NID_APP, pAppId, null, E_OUT_OF_MEMORY, "pAppId is null");
388 res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &appInfoHandle);
391 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): app = [%s]", pAppId.get());
393 PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
394 SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
396 GetPackageAppInfo(appInfoHandle, pPackageAppInfo);
398 return pPackageAppInfo;
402 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo() is failed. result = [%d]", res);
407 SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
409 for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
411 PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(__pPackageAppInfoList->GetAt(i));
414 if (appId != pPackageAppInfo->GetAppId())
419 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
420 SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
422 std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo);
423 SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
425 _PackageAppInfoImpl* pImpl = _PackageAppInfoImpl::GetInstance(pInfo.get());
426 SysTryReturn(NID_APP, pImpl, null, E_SYSTEM, "pImpl is null.");
428 String appName = pPackageAppInfo->GetAppName();
429 String appDisplayName = pPackageAppInfo->GetAppDisplayName();
430 bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
431 bool mainApp = pPackageAppInfo->IsMainApp();
434 char* pIcon = pPackageAppInfoImpl->GetAppMenuIconBufferN(size);
437 pImpl->SetAppMenuIconBuffer(pIcon, size);
441 pImpl->SetAppId(appId);
442 pImpl->SetAppName(appName);
443 pImpl->SetAppDisplayName(appDisplayName);
444 pImpl->SetMenuIconVisible(menuIconVisible);
445 pImpl->SetMainApp(mainApp);
447 return pInfo.release();
456 _PackageInfoImpl::PackageAppInfoListHandler(const pkgmgrinfo_appinfo_h handle, void* pUser_data)
458 ArrayList* pList = (ArrayList*) pUser_data;
460 PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
461 SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
463 GetPackageAppInfo(handle, pPackageAppInfo);
465 pList->Add(*pPackageAppInfo);
471 _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAppInfo* pPackageAppInfo)
473 SysTryReturn(NID_APP, pPackageAppInfo, false, E_INVALID_ARG, "[E_INVALID_ARG] pPackageAppInfo is null.");
478 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
480 res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
483 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid(): app = [%s]", pAppId);
484 pPackageAppInfoImpl->Construct(pAppId);
488 SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid() is failed. result = [%d]", res);
495 _PackageInfoImpl::GetPrivilegeListN(void) const
497 result r = E_SUCCESS;
499 std::unique_ptr< ArrayList > pPrivilegeList(new (std::nothrow) ArrayList);
500 SysTryReturn(NID_APP, pPrivilegeList, null, E_OUT_OF_MEMORY, "pPrivilegeList must not be null.");
501 pPrivilegeList->Construct();
505 SysTryReturn(NID_APP, __id.IsEmpty() == false, null, E_SYSTEM, "__id is empty.");
507 std::unique_ptr< IList > pList(_PrivilegeManager::GetPrivilegeListN(__id));
510 SysLog(NID_APP, "_PrivilegeManager::GetPrivilegeListN() is null.");
514 for (int i = 0; i < pList->GetCount(); i++)
516 String* pPrivilege = dynamic_cast < String* >(pList->GetAt(i));
519 std::unique_ptr< PrivilegeInfo > pPrivilegeInfo(new (std::nothrow) PrivilegeInfo);
520 SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null.");
522 r = pPrivilegeInfo->Construct(*pPrivilege);
523 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed.");
525 r = pPrivilegeList->Add(*pPrivilegeInfo.release());
526 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed.");
532 if (__pPrivilegeList)
534 for (int i = 0; i < __pPrivilegeList->GetCount(); i++)
536 String* pPrivilege = dynamic_cast < String* >(__pPrivilegeList->GetAt(i));
539 std::unique_ptr< PrivilegeInfo > pPrivilegeInfo(new (std::nothrow) PrivilegeInfo);
540 SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null.");
542 r = pPrivilegeInfo->Construct(*pPrivilege);
543 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed.");
545 r = pPrivilegeList->Add(*pPrivilegeInfo.release());
546 SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed.");
552 if (pPrivilegeList->GetCount() <= 0)
554 SysLog(NID_APP, "pPrivilegeList->GetCount() is invalid.");
558 return pPrivilegeList.release();
562 _PackageInfoImpl::AddPrivilege(const String& privilege)
564 result r = E_SUCCESS;
566 r = __pPrivilegeList->Add(privilege);
567 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPrivilegeList->Add() is failed.");
573 _PackageInfoImpl::IsPreloaded(void) const
579 _PackageInfoImpl::IsUpdated(void) const
585 _PackageInfoImpl::AddPackageAppInfo(const PackageAppInfo& packageAppInfo)
587 result r = E_SUCCESS;
588 r = __pPackageAppInfoList->Add(packageAppInfo);
589 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPackageAppInfoList->Add() is failed.");
595 _PackageInfoImpl::_PackageInfoImpl(void)
596 : __appReadOnlySize(0)
598 , __appStorageType(0)
601 , __pPrivilegeList(null)
602 , __pAppInfoImplList(null)
603 , __pPackageAppInfoList(null)
604 , __packageInfoHandle(null)
605 , __uninstallable(true)
607 , __downloaded(false)
610 , __iconAvailable(false)
611 , __externalStorage(false)
612 , __fromDatabase(false)
613 , __packageType(PACKAGE_TYPE_TPK)
614 , __pPackageInfo(null)
616 __pAppInfoImplList = new (std::nothrow) ArrayList;
617 SysTryReturnVoidResult(NID_APP, __pAppInfoImplList != null, E_OUT_OF_MEMORY, "__pAppInfoImplList instance must not be null.");
618 __pAppInfoImplList->Construct();
620 __pPackageAppInfoList = new (std::nothrow) ArrayList;
621 SysTryReturnVoidResult(NID_APP, __pPackageAppInfoList != null, E_OUT_OF_MEMORY, "__pPackageAppInfoList instance must not be null.");
622 __pPackageAppInfoList->Construct();
624 __pPrivilegeList = new (std::nothrow) ArrayList;
625 SysTryReturnVoidResult(NID_APP, __pPrivilegeList != null, E_OUT_OF_MEMORY, "__pPrivilegeList must not be null.");
626 __pPrivilegeList->Construct();
629 _PackageInfoImpl::~_PackageInfoImpl(void)
631 __pAppInfoImplList->RemoveAll(true);
632 delete __pAppInfoImplList;
634 __pPackageAppInfoList->RemoveAll(true);
635 delete __pPackageAppInfoList;
637 __pPrivilegeList->RemoveAll(true);
638 delete __pPrivilegeList;
640 if (__packageInfoHandle)
642 pkgmgrinfo_pkginfo_destroy_pkginfo(__packageInfoHandle);
647 _PackageInfoImpl::GetAppId(void) const
653 _PackageInfoImpl::SetAppId(const String& id)
660 _PackageInfoImpl::GetAppVersion(void) const
666 _PackageInfoImpl::SetAppVersion(const String& appVersion)
668 __version = appVersion;
673 _PackageInfoImpl::GetAppType(void) const
679 _PackageInfoImpl::SetAppType(const String& appType)
686 _PackageInfoImpl::GetAppMimeType(void) const
688 return __appMimeType;
692 _PackageInfoImpl::SetAppMimeType(const String& appMimeType)
694 __appMimeType = appMimeType;
699 _PackageInfoImpl::GetAppApiVersion(void) const
701 return __appApiVersion;
705 _PackageInfoImpl::SetAppApiVersion(const String& appApiVersion)
707 __appApiVersion = appApiVersion;
712 _PackageInfoImpl::GetAppName(void) const
714 return __displayName;
718 _PackageInfoImpl::SetAppName(const String& appName)
720 __displayName = appName;
725 _PackageInfoImpl::GetAppDescription(void) const
727 return __description;
731 _PackageInfoImpl::SetAppDescription(const String& appDescription)
733 __description = appDescription;
738 _PackageInfoImpl::GetAppVendor(void) const
744 _PackageInfoImpl::SetAppVendor(const String& appVendor)
746 __author = appVendor;
751 _PackageInfoImpl::GetAppUrl(void) const
757 _PackageInfoImpl::SetAppUrl(const String& appUrl)
764 _PackageInfoImpl::GetAppCid(void) const
770 _PackageInfoImpl::SetAppCid(const String& appCid)
777 _PackageInfoImpl::GetAppRootPath(void) const
779 return __appRootPath;
783 _PackageInfoImpl::SetAppRootPath(const String& appRootPath)
785 __appRootPath = appRootPath;
790 _PackageInfoImpl::GetAppStorageType(void) const
792 return __appStorageType;
796 _PackageInfoImpl::SetAppStorageType(int appStorageType)
798 __appStorageType = appStorageType;
803 _PackageInfoImpl::GetCertType(void) const
809 _PackageInfoImpl::SetCertType(int certType)
811 __certType = certType;
816 _PackageInfoImpl::GetAppInfoListN(void) const
818 result r = E_SUCCESS;
820 DbStatement* pStmt = null;
821 DbEnumerator* pEnum = null;
824 ArrayList* pList = null;
826 query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", GetUniqueId());
828 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
829 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
831 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
832 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
834 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
837 pList = new (std::nothrow) ArrayList;
838 SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
841 while (pEnum->MoveNext() == E_SUCCESS)
843 _PackageAppInfoImpl* pPackageAppInfoImpl = new (std::nothrow) _PackageAppInfoImpl;
844 SysTryReturn(NID_APP, pPackageAppInfoImpl != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
854 String quickpanelIcon;
855 //String launchImageIcon;
859 pEnum->GetIntAt(0, uniqueId);
860 pEnum->GetIntAt(1, pkgId);
861 pEnum->GetStringAt(2, name);
862 pEnum->GetStringAt(3, type);
863 pEnum->GetStringAt(4, defaultapp);
864 pEnum->GetStringAt(5, mainmenuIcon);
865 pEnum->GetStringAt(6, settingIcon);
866 //pEnum->GetStringAt(7, tickerIcon);
867 pEnum->GetStringAt(8, quickpanelIcon);
868 //pEnum->GetStringAt(9, launchImageIcon);
869 pEnum->GetIntAt(10, appFeature);
870 pEnum->GetStringAt(11, packageName);
872 pPackageAppInfoImpl->SetUniqueId(uniqueId);
873 pPackageAppInfoImpl->SetPkgId(pkgId);
874 pPackageAppInfoImpl->SetName(name);
875 pPackageAppInfoImpl->SetType(type);
876 pPackageAppInfoImpl->SetDefault(defaultapp);
877 pPackageAppInfoImpl->SetMainmenuIcon(mainmenuIcon);
878 pPackageAppInfoImpl->SetSettingIcon(settingIcon);
879 //pPackageAppInfoImpl->SetTickerIcon(tickerIcon);
880 pPackageAppInfoImpl->SetQuickpanelIcon(quickpanelIcon);
881 //pPackageAppInfoImpl->SetLaunchImageIcon(launchImageIcon);
882 pPackageAppInfoImpl->SetAppFeature(appFeature);
883 pPackageAppInfoImpl->SetPackageName(packageName);
885 pList->Add(*pPackageAppInfoImpl);
897 _PackageInfoImpl::GetAppInfoList(void)
899 if (__pAppInfoImplList == null)
901 __pAppInfoImplList = GetAppInfoListN();
904 return __pAppInfoImplList;
908 _PackageInfoImpl::AddAppInfo(const _PackageAppInfoImpl& appInfoImpl)
910 result r = E_SUCCESS;
911 r = __pAppInfoImplList->Add(appInfoImpl);
912 SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pAppInfoImplList->Add() is failed.");
918 _PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges, ArrayList& privilegeList)
920 result r = E_SUCCESS;
922 DbStatement* pStmt = null;
923 DbEnumerator* pEnum = null;
926 String privilegeListString;
928 String privilegeToken;
931 query.Format(1024, L"SELECT * FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
933 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
934 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
936 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
937 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
939 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
942 if (pEnum->MoveNext() == E_SUCCESS)
944 pEnum->GetStringAt(1, privileges);
945 pEnum->GetStringAt(2, hmacPrivileges);
946 pEnum->GetStringAt(4, privilegeListString);
949 StringTokenizer strTok(privilegeListString, delim);
951 while (strTok.HasMoreTokens())
953 strTok.GetNextToken(privilegeToken);
954 privilegeList.Add(new String(privilegeToken));
968 _PackageInfoImpl::GetPrivilegesValue(String& privileges, String& hmacPrivileges) const
970 privileges = __privileges;
971 hmacPrivileges = __hmacPrivileges;
977 _PackageInfoImpl::SetPrivilegesValue(const String& privileges, const String& hmacPrivileges)
979 __privileges = privileges;
980 __hmacPrivileges = hmacPrivileges;
986 _PackageInfoImpl::GetApiVisibility() const
988 result r = E_SUCCESS;
989 int apiVisibility = 0;
991 DbStatement* pStmt = null;
992 DbEnumerator* pEnum = null;
995 query.Format(1024, L"SELECT CERTIFICATE_TYPE FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
997 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
998 SysTryCatch(NID_APP, r == E_SUCCESS, apiVisibility = -1, r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1000 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1001 SysTryCatch(NID_APP, pStmt != null, apiVisibility = -1, GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1003 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1006 if (pEnum->MoveNext() == E_SUCCESS)
1008 if (pEnum->GetColumnType(0) != DB_COLUMNTYPE_NULL)
1010 r = pEnum->GetIntAt(0, apiVisibility);
1011 SysTryCatch(NID_APP, r == E_SUCCESS, apiVisibility = -1, r, "[%s] GetIntAt() is failed.", GetErrorMessage(r));
1022 return apiVisibility;
1026 _PackageInfoImpl::GetAppIconPath(void) const
1028 return __appIconPath;
1032 _PackageInfoImpl::SetAppIconPath(const Tizen::Base::String& appIconPath)
1034 __appIconPath = appIconPath;
1040 _PackageInfoImpl::GetAppInstallationTime(void) const
1046 _PackageInfoImpl::SetAppInstallationTime(const DateTime& installationTime)
1048 __dateTime = installationTime;
1054 _PackageInfoImpl::Construct(const PackageId& packageId)
1056 result r = E_SUCCESS;
1058 char* pPackage = null;
1059 char* pVersion = null;
1061 char* pIconPath = null;
1063 char* pDescription = null;
1064 char* pAuthor = null;
1066 char* pMainAppId = null;
1067 char* pStoreClientId = null;
1068 char* pRootPath = null;
1069 int installedTime = 0;
1070 pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
1071 bool removable = true;
1072 bool movable = true;
1073 bool preloaded = false;
1074 bool updated = false;
1076 std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
1077 SysTryReturnResult(NID_APP, pPackageId, E_OUT_OF_MEMORY, "pPackageId is null");
1079 result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &__packageInfoHandle);
1080 SysTryReturnResult(NID_APP, result == PMINFO_R_OK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", result, pPackageId.get());
1082 __fromDatabase = true;
1084 result = pkgmgrinfo_pkginfo_get_pkgname(__packageInfoHandle, &pPackage);
1085 if (result == PMINFO_R_OK)
1087 String package(pPackage);
1092 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname() is failed. result = [%d]", result);
1095 result = pkgmgrinfo_pkginfo_get_version(__packageInfoHandle, &pVersion);
1096 if (result == PMINFO_R_OK)
1098 String version(pVersion);
1099 __version = version;
1103 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_version() is failed. result = [%d]", result);
1106 result = pkgmgrinfo_pkginfo_get_type(__packageInfoHandle, &pType);
1107 if (result == PMINFO_R_OK)
1114 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type() is failed. result = [%d]", result);
1117 result = pkgmgrinfo_pkginfo_get_label(__packageInfoHandle, &pName);
1118 if (result == PMINFO_R_OK)
1121 __displayName = Name;
1125 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_label() is failed. result = [%d]", result);
1128 result = pkgmgrinfo_pkginfo_get_icon(__packageInfoHandle, &pIconPath);
1129 if (result == PMINFO_R_OK)
1131 String path(pIconPath);
1132 __appIconPath = path;
1136 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_icon() is failed. result = [%d]", result);
1139 result = pkgmgrinfo_pkginfo_is_removable(__packageInfoHandle, &removable);
1140 if (result == PMINFO_R_OK)
1142 if (removable == false)
1144 __uninstallable = false;
1149 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable() is failed. result = [%d]", result);
1152 result = pkgmgrinfo_pkginfo_is_movable(__packageInfoHandle, &movable);
1153 if (result == PMINFO_R_OK)
1155 __movable = movable;
1159 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_movable() is failed. result = [%d]", result);
1162 result = pkgmgrinfo_pkginfo_is_preload(__packageInfoHandle, &preloaded);
1163 if (result == PMINFO_R_OK)
1165 __preloaded = preloaded;
1169 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_preload() is failed. result = [%d]", result);
1172 result = pkgmgrinfo_pkginfo_is_update(__packageInfoHandle, &updated);
1173 if (result == PMINFO_R_OK)
1175 __updated = updated;
1179 SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_update() is failed. result = [%d]", result);
1182 if (updated == true)
1184 __downloaded = true;
1188 if (preloaded == true)
1190 __downloaded = false;
1194 __downloaded = true;
1198 result = pkgmgrinfo_pkginfo_get_description(__packageInfoHandle, &pDescription);
1199 if (result == PMINFO_R_OK)
1201 String description(pDescription);
1202 __description = description;
1206 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_description() is failed. result = [%d]", result);
1209 result = pkgmgrinfo_pkginfo_get_author_name(__packageInfoHandle, &pAuthor);
1210 if (result == PMINFO_R_OK)
1212 String author(pAuthor);
1217 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_author_name() is failed. result = [%d]", result);
1220 result = pkgmgrinfo_pkginfo_get_installed_time(__packageInfoHandle, &installedTime);
1221 if (result == PMINFO_R_OK)
1223 time_t dateTime = (time_t) installedTime;
1224 struct tm* pGmTime = null;
1226 pGmTime = gmtime(&dateTime);
1230 tempTime.SetValue(pGmTime->tm_year + 1900, pGmTime->tm_mon + 1, pGmTime->tm_mday, pGmTime->tm_hour, pGmTime->tm_min, pGmTime->tm_sec);
1231 __dateTime = tempTime;
1236 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_time() is failed. result = [%d]", result);
1239 result = pkgmgrinfo_pkginfo_get_installed_storage(__packageInfoHandle, &storage);
1240 if (result == PMINFO_R_OK)
1242 if (storage == PMINFO_EXTERNAL_STORAGE)
1244 __externalStorage = true;
1249 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage() is failed. result = [%d]", result);
1252 result = pkgmgrinfo_pkginfo_get_url(__packageInfoHandle, &pUrl);
1253 if (result == PMINFO_R_OK)
1260 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_url() is failed. result = [%d]", result);
1263 result = pkgmgrinfo_pkginfo_get_mainappid(__packageInfoHandle, &pMainAppId);
1264 if (result == PMINFO_R_OK)
1266 AppId mainAppId(pMainAppId);
1267 __mainAppId = mainAppId;
1271 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_mainappid() is failed. result = [%d]", result);
1274 result = pkgmgrinfo_pkginfo_get_storeclientid(__packageInfoHandle, &pStoreClientId);
1275 if (result == PMINFO_R_OK)
1277 String storeClientId(pStoreClientId);
1278 __storeClientId = storeClientId;
1282 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid() is failed. result = [%d]", result);
1285 result = pkgmgrinfo_pkginfo_get_root_path(__packageInfoHandle, &pRootPath);
1286 if (result == PMINFO_R_OK)
1288 String rootPath(pRootPath);
1289 __appRootPath = rootPath;
1293 SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_root_path() is failed. result = [%d]", result);
1296 SysLog(NID_APP, "package(%ls), version(%ls), type(%ls), displayName(%ls), uninstallable(%d), downloaded(%d), updated(%d), preloaded(%d)"
1297 "movable(%d), externalStorage(%d), mainApp(%ls), storeClient(%ls), appRootPath(%ls)",
1298 __id.GetPointer(), __version.GetPointer(), __type.GetPointer(), __displayName.GetPointer(), __uninstallable, __downloaded, updated, preloaded,
1299 __movable, __externalStorage, __mainAppId.GetPointer(), __storeClientId.GetPointer(), __appRootPath.GetPointer());
1305 _PackageInfoImpl::GetUniqueId(void) const
1307 result r = E_SUCCESS;
1309 DbStatement* pStmt = null;
1310 DbEnumerator* pEnum = null;
1314 query.Format(1024, L"SELECT UNIQUE_ID FROM PkgInfo WHERE PKG_ID = '%ls'", __id.GetPointer());
1316 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1317 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1319 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1320 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1322 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1325 if (pEnum->MoveNext() == E_SUCCESS)
1327 pEnum->GetIntAt(0, uniqueId);
1334 r = E_OBJ_NOT_FOUND;
1344 _PackageInfoImpl::GetUiScalabilityInfo(String& baseScreenSize, String& coordinateSystem, String& logicalCoordinate) const
1346 result r = E_SUCCESS;
1348 DbStatement* pStmt = null;
1349 DbEnumerator* pEnum = null;
1353 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());
1355 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1356 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1358 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1359 SysTryCatch(NID_APP, pStmt != null, GetLastResult(),
1360 GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1362 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1365 while (pEnum->MoveNext() == E_SUCCESS)
1370 pEnum->GetStringAt(0, name);
1371 pEnum->GetStringAt(1, value);
1373 if (name == L"CoordinateSystem")
1375 coordinateSystem = value;
1377 else if (name == L"BaseScreenSize")
1379 baseScreenSize = value;
1381 else if (name == L"LogicalCoordinate")
1383 logicalCoordinate = value;
1390 r = E_OBJ_NOT_FOUND;
1402 _PackageInfoImpl::GetAppPackageName(void)
1404 if (__appPackageName.IsEmpty() == false)
1406 return __appPackageName;
1409 result r = E_SUCCESS;
1411 DbStatement* pStmt = null;
1412 DbEnumerator* pEnum = null;
1415 query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo WHERE AppInfo.APP_DEFAULT = 'True' and ID = %d", GetUniqueId());
1417 r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
1418 SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
1420 pStmt = _PackageManagerImpl::CreateStatementN(db, query);
1421 SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
1423 pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
1426 if (pEnum->MoveNext() == E_SUCCESS)
1428 pEnum->GetStringAt(0, __appPackageName);
1439 return __appPackageName;
1443 _PackageInfoImpl::GetApiVersion(void) const
1445 return __appApiVersion;
1449 _PackageInfoImpl::GetName(void) const
1451 return __displayName;
1455 _PackageInfoImpl::GetInstance(PackageInfo* pPackageInfo)
1459 return pPackageInfo->__pPackageInfoImpl;
1465 const _PackageInfoImpl*
1466 _PackageInfoImpl::GetInstance(const PackageInfo* pPackageInfo)
1470 return pPackageInfo->__pPackageInfoImpl;
1476 } } } // Tizen::App::Package