#include <FBaseSysLog.h>
#include <FBase_StringConverter.h>
+#include <FBaseUtilStringTokenizer.h>
#include "FAppPkg_PackageManagerImpl.h"
#include "FAppPkg_PackageInfoImpl.h"
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
using namespace Tizen::Io;
+using namespace Tizen::Base::Utility;
namespace Tizen { namespace App { namespace Package
{
long long
_PackageInfoImpl::GetSize(void) const
{
- SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
-
- int result = PMINFO_R_OK;
int size = 0;
- result = pkgmgrinfo_pkginfo_get_total_size(__packageInfoHandle, &size);
- if (result == PMINFO_R_OK)
+ if (__fromDatabase)
{
- SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size(): size = [%d]", size);
+ SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
+
+ int result = PMINFO_R_OK;
+
+ result = pkgmgrinfo_pkginfo_get_total_size(__packageInfoHandle, &size);
+ if (result == PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size(): size = [%d]", size);
+ }
+ else
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size() is failed. result = [%d]", result);
+ }
}
else
{
- SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size() is failed. result = [%d]", result);
+ SysLog(NID_APP, "GetSize() is not available.");
}
return (long long) size;
long long
_PackageInfoImpl::GetDataSize(void) const
{
- SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
-
- int result = PMINFO_R_OK;
int dataSize = 0;
- result = pkgmgrinfo_pkginfo_get_data_size(__packageInfoHandle, &dataSize);
- if (result == PMINFO_R_OK)
+ if (__fromDatabase)
{
- SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size(): dataSize = [%d]", dataSize);
+ SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
+
+ int result = PMINFO_R_OK;
+
+ result = pkgmgrinfo_pkginfo_get_data_size(__packageInfoHandle, &dataSize);
+ if (result == PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size(): dataSize = [%d]", dataSize);
+ }
+ else
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size() is failed. result = [%d]", result);
+ }
}
else
{
- SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size() is failed. result = [%d]", result);
+ SysLog(NID_APP, "GetDataSize() is not available.");
}
return (long long) dataSize;
}
ArrayList*
-_PackageInfoImpl::GetPackageAppInfoListN(void) const
+_PackageInfoImpl::GetPackageAppInfoListN(void)
{
- SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
-
- int res = 0;
ArrayList* pList = null;
- pList = new (std::nothrow) ArrayList;
- SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
+ if (__fromDatabase)
+ {
+ SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
+
+ int res = 0;
+
+ pList = new (std::nothrow) ArrayList;
+ SysTryReturn(NID_APP, pList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
+ pList->Construct();
+
+ res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_UI_APP, PackageAppInfoListHandler, (void *)pList);
+ res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_SVC_APP, PackageAppInfoListHandler, (void *)pList);
+ }
+ else
+ {
+ SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
+
+ result r = E_SUCCESS;
+
+ pList = new (std::nothrow) ArrayList;
+ SysTryReturn(NID_APP, pList, null, E_OUT_OF_MEMORY, "pList must not be null.");
+ pList->Construct();
+
+ for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
+ {
+ PackageAppInfo* pPackageAppInfo = dynamic_cast <PackageAppInfo*>(__pPackageAppInfoList->GetAt(i));
+ if (pPackageAppInfo)
+ {
+ PackageAppInfo* pInfo = new (std::nothrow) PackageAppInfo;
+ SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
+
+ _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo);
+ SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
- pList->Construct();
+ AppId appId = pPackageAppInfo->GetAppId();
+ String appName = pPackageAppInfo->GetAppName();
+ String appDisplayName = pPackageAppInfo->GetAppDisplayName();
+ bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
+ bool mainApp = pPackageAppInfo->IsMainApp();
- res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_UI_APP, PackageAppInfoListHandler, (void *)pList);
- res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_SVC_APP, PackageAppInfoListHandler, (void *)pList);
+ pPackageAppInfoImpl->SetAppId(appId);
+ pPackageAppInfoImpl->SetAppName(appName);
+ pPackageAppInfoImpl->SetAppDisplayName(appDisplayName);
+ pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
+ pPackageAppInfoImpl->SetMainApp(mainApp);
+
+ r = pList->Add(*pInfo);
+ }
+ }
+ }
return pList;
}
PackageAppInfo*
_PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const
{
- SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
+ if (__fromDatabase)
+ {
+ SysTryReturn(NID_APP, __packageInfoHandle, null, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
- int res = 0;
- pkgmgrinfo_appinfo_h appInfoHandle = null;
+ int res = 0;
+ pkgmgrinfo_appinfo_h appInfoHandle = null;
- std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
- SysTryReturn(NID_APP, pAppId, null, E_OUT_OF_MEMORY, "pAppId is null");
+ std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
+ SysTryReturn(NID_APP, pAppId, null, E_OUT_OF_MEMORY, "pAppId is null");
- res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &appInfoHandle);
- if (res == 0)
- {
- SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): appId = [%s]", pAppId.get());
+ res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &appInfoHandle);
+ if (res == 0)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): appId = [%s]", pAppId.get());
- PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
- SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
+ PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo;
+ SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
- GetPackageAppInfo(appInfoHandle, pPackageAppInfo);
+ GetPackageAppInfo(appInfoHandle, pPackageAppInfo);
- return pPackageAppInfo;
+ return pPackageAppInfo;
+ }
+ else
+ {
+ SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo() is failed. result = [%d]", res);
+ }
}
else
{
- SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo() is failed. result = [%d]", res);
+ SysLog(NID_APP, "GetPackageAppInfoN() is not available.");
}
return null;
return true;
}
+ArrayList*
+_PackageInfoImpl::GetPrivilegeListN(void) const
+{
+ SysTryReturn(NID_APP, __pPrivilegeList, null, E_SYSTEM, "__pPrivilegeList must not be null.");
+
+ result r = E_SUCCESS;
+
+ ArrayList* pPrivilegeList = new (std::nothrow) ArrayList;
+ SysTryReturn(NID_APP, pPrivilegeList, null, E_OUT_OF_MEMORY, "pPrivilegeList must not be null.");
+ pPrivilegeList->Construct();
+
+ for (int i = 0; i < __pPrivilegeList->GetCount(); i++)
+ {
+ String* pPrivilege = dynamic_cast <String*>(__pPrivilegeList->GetAt(i));
+ if (pPrivilege)
+ {
+ String* pPrivilegeString = new (std::nothrow) String(*pPrivilege);
+ SysTryReturn(NID_APP, pPrivilegeString, null, E_OUT_OF_MEMORY, "pPrivilegeString must not be null.");
+
+ r = pPrivilegeList->Add(*pPrivilegeString);
+ }
+ }
+
+ return pPrivilegeList;
+}
+
+result
+_PackageInfoImpl::AddPrivilege(const String& privilege)
+{
+ result r = E_SUCCESS;
+
+ r = __pPrivilegeList->Add(privilege);
+ SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPrivilegeList->Add() is failed.");
+
+ return r;
+}
+
+result
+_PackageInfoImpl::AddPackageAppInfo(const PackageAppInfo& packageAppInfo)
+{
+ result r = E_SUCCESS;
+ r = __pPackageAppInfoList->Add(packageAppInfo);
+ SysTryReturnResult(NID_APP, !IsFailed(r), r, "__pPackageAppInfoList->Add() is failed.");
+
+ return r;
+}
+
// to be reviewed
_PackageInfoImpl::_PackageInfoImpl(void)
: __appReadOnlySize(0)
, __appStorageType(0)
, __appState(0)
, __certType(0)
+ , __pPrivilegeList(null)
, __pAppInfoImplList(null)
+ , __pPackageAppInfoList(null)
, __packageInfoHandle(null)
, __uninstallable(true)
, __movable(false)
, __downloaded(false)
, __iconAvailable(false)
, __externalStorage(false)
+ , __fromDatabase(false)
, __packageType(PACKAGE_TYPE_TPK)
, __pPackageInfo(null)
{
__pAppInfoImplList = new (std::nothrow) ArrayList;
SysTryReturnVoidResult(NID_APP, __pAppInfoImplList != null, E_OUT_OF_MEMORY, "__pAppInfoImplList instance must not be null.");
__pAppInfoImplList->Construct();
+
+ __pPackageAppInfoList = new (std::nothrow) ArrayList;
+ SysTryReturnVoidResult(NID_APP, __pPackageAppInfoList != null, E_OUT_OF_MEMORY, "__pPackageAppInfoList instance must not be null.");
+ __pPackageAppInfoList->Construct();
+
+ __pPrivilegeList = new (std::nothrow) ArrayList;
+ SysTryReturnVoidResult(NID_APP, __pPrivilegeList != null, E_OUT_OF_MEMORY, "__pPrivilegeList must not be null.");
+ __pPrivilegeList->Construct();
}
_PackageInfoImpl::~_PackageInfoImpl(void)
__pAppInfoImplList->RemoveAll(true);
delete __pAppInfoImplList;
+ __pPackageAppInfoList->RemoveAll(true);
+ delete __pPackageAppInfoList;
+
+ __pPrivilegeList->RemoveAll(true);
+ delete __pPrivilegeList;
+
if (__packageInfoHandle)
{
- pkgmgr_pkginfo_destroy_pkginfo(__packageInfoHandle);
+ pkgmgrinfo_pkginfo_destroy_pkginfo(__packageInfoHandle);
}
}
query.Format(1024, L"SELECT * FROM AppInfo WHERE ID = %d", GetUniqueId());
- r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
+ r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
pStmt = _PackageManagerImpl::CreateStatementN(db, query);
}
result
-_PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges)
+_PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges, ArrayList& privilegeList)
{
result r = E_SUCCESS;
Database db;
DbEnumerator* pEnum = null;
String query;
+ String privilegeListString;
+ String delim("#");
+ String privilegeToken;
+
+
query.Format(1024, L"SELECT * FROM PkgPrivileges WHERE ID = %d", GetUniqueId());
- r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
+ r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
pStmt = _PackageManagerImpl::CreateStatementN(db, query);
{
pEnum->GetStringAt(1, privileges);
pEnum->GetStringAt(2, hmacPrivileges);
+ pEnum->GetStringAt(4, privilegeListString);
+ }
+
+ StringTokenizer strTok(privilegeListString, delim);
+
+ while (strTok.HasMoreTokens())
+ {
+ strTok.GetNextToken(privilegeToken);
+ privilegeList.Add(new String(privilegeToken));
}
delete pEnum;
result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &__packageInfoHandle);
SysTryReturnResult(NID_APP, result == PMINFO_R_OK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], packageId=[%s]", result, pPackageId.get());
+ __fromDatabase = true;
+
result = pkgmgrinfo_pkginfo_get_pkgname(__packageInfoHandle, &pPackage);
if (result == PMINFO_R_OK)
{
// temp
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());
- r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
+ r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
pStmt = _PackageManagerImpl::CreateStatementN(db, query);
if (pEnum->MoveNext() == E_SUCCESS)
{
String rootPath;
- int storageType;
+ int storageType = 0;
- pEnum->GetStringAt(16, rootPath);
- pEnum->GetIntAt(17, storageType);
+ if (pEnum->GetColumnType(16) != DB_COLUMNTYPE_NULL)
+ {
+ pEnum->GetStringAt(16, rootPath);
+ }
+ if (pEnum->GetColumnType(17) != DB_COLUMNTYPE_NULL)
+ {
+ pEnum->GetIntAt(17, storageType);
+ }
SetAppRootPath(rootPath);
SetAppStorageType(storageType);
query.Format(1024, L"SELECT UNIQUE_ID FROM PkgInfo WHERE PKG_ID = '%ls'", __id.GetPointer());
- r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
+ r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
pStmt = _PackageManagerImpl::CreateStatementN(db, query);
query.Format(1024,
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());
- r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
+ r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
pStmt = _PackageManagerImpl::CreateStatementN(db, query);
query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo WHERE AppInfo.APP_DEFAULT = 'True' and ID = %d", GetUniqueId());
- r = db.Construct(PACKAGE_DATABASE_FILE_NAME, false);
+ r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");
SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
pStmt = _PackageManagerImpl::CreateStatementN(db, query);