Apply secure log
[platform/framework/native/appfw.git] / src / app / package / FAppPkg_PackageInfoImpl.cpp
index 990323b..3cafda7 100755 (executable)
 #include <FIoDbEnumerator.h>
 #include <FIoDbStatement.h>
 #include <FBaseSysLog.h>
+#include <FSecPrivilegeInfo.h>
 
 #include <FBase_StringConverter.h>
+#include <FBaseUtilStringTokenizer.h>
 
 #include "FAppPkg_PackageManagerImpl.h"
 #include "FAppPkg_PackageInfoImpl.h"
@@ -40,7 +42,9 @@
 
 using namespace Tizen::Base;
 using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
 using namespace Tizen::Io;
+using namespace Tizen::Security;
 
 namespace Tizen { namespace App { namespace Package
 {
@@ -204,19 +208,27 @@ _PackageInfoImpl::SetDownloaded(bool downloaded)
 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;
@@ -225,19 +237,27 @@ _PackageInfoImpl::GetSize(void) const
 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;
@@ -270,20 +290,60 @@ _PackageInfoImpl::SetStoreClientId(const PackageId& packageId)
 }
 
 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)
+                       {
+                               std::unique_ptr< 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.get());
+                               SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
+
+                               AppId appId = pPackageAppInfo->GetAppId();
+                               String appName = pPackageAppInfo->GetAppName();
+                               String appDisplayName = pPackageAppInfo->GetAppDisplayName();
+                               bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
+                               bool mainApp = pPackageAppInfo->IsMainApp();
 
-       pList->Construct();
+                               pPackageAppInfoImpl->SetAppId(appId);
+                               pPackageAppInfoImpl->SetAppName(appName);
+                               pPackageAppInfoImpl->SetAppDisplayName(appDisplayName);
+                               pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
+                               pPackageAppInfoImpl->SetMainApp(mainApp);
 
-       res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_UI_APP, PackageAppInfoListHandler, (void *)pList);
-       res = pkgmgrinfo_appinfo_get_list(__packageInfoHandle, PMINFO_SVC_APP, PackageAppInfoListHandler, (void *)pList);
+                               r = pList->Add(*pInfo.release());
+                       }
+                }
+       }
 
        return pList;
 }
@@ -291,29 +351,72 @@ _PackageInfoImpl::GetPackageAppInfoListN(void) const
 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(): app = [%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);
+               SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null.");
+
+               for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++)
+               {
+                       PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(__pPackageAppInfoList->GetAt(i));
+                       if (pPackageAppInfo)
+                       {
+                               if (appId != pPackageAppInfo->GetAppId())
+                               {
+                                       continue;
+                               }
+
+                               _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo);
+                               SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
+
+                               std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo);
+                               SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory");
+
+                               _PackageAppInfoImpl* pImpl = _PackageAppInfoImpl::GetInstance(pInfo.get());
+                               SysTryReturn(NID_APP, pImpl, null, E_SYSTEM, "pImpl is null.");
+
+                               String appName = pPackageAppInfo->GetAppName();
+                               String appDisplayName = pPackageAppInfo->GetAppDisplayName();
+                               bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
+                               bool mainApp = pPackageAppInfo->IsMainApp();
+                               String tempIconPath = pPackageAppInfoImpl->GetAppTempIconPath();
+
+                               pImpl->SetAppId(appId);
+                               pImpl->SetAppName(appName);
+                               pImpl->SetAppDisplayName(appDisplayName);
+                               pImpl->SetMenuIconVisible(menuIconVisible);
+                               pImpl->SetMainApp(mainApp);
+                               pImpl->SetAppTempIconPath(tempIconPath);
+
+                               return pInfo.release();
+                       }
+                }
        }
 
        return null;
@@ -347,7 +450,7 @@ _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAp
        res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
        if (res == 0)
        {
-               SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid(): appId = [%s]", pAppId);
+               SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid(): app = [%s]", pAppId);
                pPackageAppInfoImpl->Construct(pAppId);
        }
        else
@@ -358,6 +461,63 @@ _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAp
        return true;
 }
 
+ArrayList*
+_PackageInfoImpl::GetPrivilegeListN(void) const
+{
+       SysTryReturn(NID_APP, __pPrivilegeList, null, E_SYSTEM, "__pPrivilegeList must not be null.");
+
+       result r = E_SUCCESS;
+
+       std::unique_ptr< 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)
+               {
+                       std::unique_ptr< PrivilegeInfo > pPrivilegeInfo(new (std::nothrow) PrivilegeInfo);
+                       SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null.");
+
+                       r = pPrivilegeInfo->Construct(*pPrivilege);
+                       SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed.");
+
+                       r = pPrivilegeList->Add(*pPrivilegeInfo.release());
+                       SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed.");
+               }
+        }
+
+       if (pPrivilegeList->GetCount() <= 0)
+       {
+               SysLog(NID_APP, "pPrivilegeList->GetCount() is invalid.");
+               return null;
+       }
+
+       return pPrivilegeList.release();
+}
+
+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)
@@ -365,19 +525,30 @@ _PackageInfoImpl::_PackageInfoImpl(void)
        , __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)
@@ -385,9 +556,15 @@ _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);
        }
 }
 
@@ -573,7 +750,7 @@ _PackageInfoImpl::GetAppInfoListN(void) const
 
        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);
@@ -663,7 +840,7 @@ _PackageInfoImpl::AddAppInfo(const _PackageAppInfoImpl& appInfoImpl)
 }
 
 result
-_PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges)
+_PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges, ArrayList& privilegeList)
 {
        result r = E_SUCCESS;
        Database db;
@@ -671,9 +848,14 @@ _PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges)
        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);
@@ -686,6 +868,15 @@ _PackageInfoImpl::GetPrivileges(String& privileges, String& hmacPrivileges)
                {
                        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;
@@ -799,26 +990,23 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        char* pUrl = null;
        char* pMainAppId = null;
        char* pStoreClientId = null;
+       char* pRootPath = null;
        int installedTime = 0;
        pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
        bool removable = true;
-
-       // temp
-       Database db;
-       DbStatement* pStmt = null;
-       DbEnumerator* pEnum = null;
-       String query;
+       bool preloaded = true;
 
        std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
        SysTryReturnResult(NID_APP, pPackageId, E_OUT_OF_MEMORY, "pPackageId is null");
 
        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());
+       SysTryReturnResult(NID_APP, result == PMINFO_R_OK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", result, pPackageId.get());
+
+       __fromDatabase = true;
 
        result = pkgmgrinfo_pkginfo_get_pkgname(__packageInfoHandle, &pPackage);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname(): package = [%s]", pPackage);
                String package(pPackage);
                __id = package;
        }
@@ -830,7 +1018,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_version(__packageInfoHandle, &pVersion);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_version(): version = [%s]", pVersion);
                String version(pVersion);
                __version = version;
        }
@@ -842,7 +1029,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_type(__packageInfoHandle, &pType);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type(): type = [%s]", pType);
                String type(pType);
                __type = type;
        }
@@ -854,7 +1040,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_label(__packageInfoHandle, &pName);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_label(): name = [%s]", pName);
                String Name(pName);
                __displayName = Name;
        }
@@ -866,7 +1051,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_icon(__packageInfoHandle, &pIconPath);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_icon(): iconpath = [%s]", pIconPath);
                String path(pIconPath);
                __appIconPath = path;
        }
@@ -878,8 +1062,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_is_removable(__packageInfoHandle, &removable);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable(): removable = [%d]", removable);
-
                if (removable == false)
                {
                        __uninstallable = false;
@@ -890,10 +1072,22 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
                SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable() is failed. result = [%d]", result);
        }
 
+       result = pkgmgrinfo_pkginfo_is_preload(__packageInfoHandle, &preloaded);
+       if (result == PMINFO_R_OK)
+       {
+               if (preloaded == false)
+               {
+                       __downloaded = true;
+               }
+       }
+       else
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_preload() is failed. result = [%d]", result);
+       }
+
        result = pkgmgrinfo_pkginfo_get_description(__packageInfoHandle, &pDescription);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_description(): description = [%s]", pDescription);
                String description(pDescription);
                __description = description;
        }
@@ -905,7 +1099,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_author_name(__packageInfoHandle, &pAuthor);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_author_name(): author = [%s]", pAuthor);
                String author(pAuthor);
                __author = author;
        }
@@ -939,7 +1132,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_installed_storage(__packageInfoHandle, &storage);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d]", storage);
                if (storage == PMINFO_EXTERNAL_STORAGE)
                {
                        __externalStorage = true;
@@ -953,7 +1145,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_url(__packageInfoHandle, &pUrl);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_url(): url = [%s]", pUrl);
                String url(pUrl);
                __url = url;
        }
@@ -965,7 +1156,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_mainappid(__packageInfoHandle, &pMainAppId);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_mainappid(): mainAppId = [%s]", pMainAppId);
                AppId mainAppId(pMainAppId);
                __mainAppId = mainAppId;
        }
@@ -977,7 +1167,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_storeclientid(__packageInfoHandle, &pStoreClientId);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid(): storeClientId = [%s]", pStoreClientId);
                String storeClientId(pStoreClientId);
                __storeClientId = storeClientId;
        }
@@ -986,35 +1175,22 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
                SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid() is failed. result = [%d]", result);
        }
 
-       // 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);
-       SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r));
-
-       pStmt = _PackageManagerImpl::CreateStatementN(db, query);
-       SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult()));
-
-       pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt);
-       if (pEnum != null)
+       result = pkgmgrinfo_pkginfo_get_root_path(__packageInfoHandle, &pRootPath);
+       if (result == PMINFO_R_OK)
        {
-               if (pEnum->MoveNext() == E_SUCCESS)
-               {
-                       String rootPath;
-                       int storageType;
-
-                       pEnum->GetStringAt(16, rootPath);
-                       pEnum->GetIntAt(17, storageType);
-
-                       SetAppRootPath(rootPath);
-                       SetAppStorageType(storageType);
-               }
-
-               delete pEnum;
+               String rootPath(pRootPath);
+               __appRootPath = rootPath;
+       }
+       else
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_root_path() is failed. result = [%d]", result);
        }
 
-CATCH:
-       delete pStmt;
+       SysLog(NID_APP, "package(%ls), version(%ls), type(%ls), displayName(%ls), uninstallable(%d), downloaded(%d), "
+                                                                       "externalStorage(%d), mainApp(%ls), storeClient(%ls), appRootPath(%ls)",
+                       __id.GetPointer(), __version.GetPointer(), __type.GetPointer(), __displayName.GetPointer(), __uninstallable, __downloaded,
+                       __externalStorage, __mainAppId.GetPointer(), __storeClientId.GetPointer(), __appRootPath.GetPointer());
+
        return r;
 }
 
@@ -1030,7 +1206,7 @@ _PackageInfoImpl::GetUniqueId(void) const
 
        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);
@@ -1069,7 +1245,7 @@ _PackageInfoImpl::GetUiScalabilityInfo(String& baseScreenSize, String& coordinat
        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);
@@ -1131,7 +1307,7 @@ _PackageInfoImpl::GetAppPackageName(void)
 
        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);