Modify GetMenuIconN() API
[platform/framework/native/appfw.git] / src / app / package / FAppPkg_PackageInfoImpl.cpp
index 47478e4..b4fd895 100755 (executable)
@@ -1,5 +1,4 @@
 //
-// Open Service Platform
 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
 //
 // Licensed under the Apache License, Version 2.0 (the License);
 #include <FIoDatabase.h>
 #include <FIoDbEnumerator.h>
 #include <FIoDbStatement.h>
+#include <FIoFile.h>
 #include <FBaseSysLog.h>
+#include <FBaseUtilStringTokenizer.h>
 #include <FSecPrivilegeInfo.h>
 
 #include <FBase_StringConverter.h>
-#include <FBaseUtilStringTokenizer.h>
+#include <FSec_PrivilegeManager.h>
 
+#include "FApp_PackageManagerProxy.h"
 #include "FAppPkg_PackageManagerImpl.h"
 #include "FAppPkg_PackageInfoImpl.h"
 #include "FAppPkg_PackageAppInfoImpl.h"
@@ -78,7 +80,19 @@ _PackageInfoImpl::SetVersion(const String& version)
 PackageType
 _PackageInfoImpl::GetType(void) const
 {
-       return __packageType;
+       SysTryReturn(NID_APP, __id.IsEmpty() == false, PACKAGE_TYPE_TPK, E_SYSTEM, "[E_SYSTEM] id.IsEmpty() is empty.");
+
+       result r = E_SUCCESS;
+       PackageType type = PACKAGE_TYPE_TPK;
+
+       _PackageManagerProxy packageManagerProxy;
+       r = packageManagerProxy.Construct();
+       SysTryReturn(NID_APP, r == E_SUCCESS, PACKAGE_TYPE_TPK, E_SYSTEM, "packageManagerProxy.Construct() failed.");
+
+       type = packageManagerProxy.GetType(__id);
+       SysTryReturn(NID_APP, r == E_SUCCESS, PACKAGE_TYPE_TPK, r, "packageManagerProxy.GetType(%ls) failed.", __id.GetPointer());
+
+       return type;
 }
 
 result
@@ -212,25 +226,26 @@ _PackageInfoImpl::GetSize(void) const
 
        if (__fromDatabase)
        {
-               SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
+               SysTryReturn(NID_APP, __id.IsEmpty() == false, 0, E_SYSTEM, "id is IsEmpty.");
 
-               int result = PMINFO_R_OK;
+               std::unique_ptr<char[]> pPackage(_StringConverter::CopyToCharArrayN(__id));
+               SysTryReturn(NID_APP, pPackage, 0, E_OUT_OF_MEMORY, "pPackage is null.");
 
-               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);
-               }
+               void* pClient = pkgmgr_client_new(PC_REQUEST);
+               SysTryReturn(NID_APP, pClient, 0, E_SYSTEM, "pkgmgr_client_new() failed.");
+
+               SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, %s)", pPackage.get());
+               size = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, 0, pClient, null, pPackage.get(), null, null, null);
+
+         pkgmgr_client_free(pClient);
        }
        else
        {
                SysLog(NID_APP, "GetSize() is not available.");
        }
 
+       SysLog(NID_APP, "size = [%d]", size);
+
        return (long long) size;
 }
 
@@ -241,25 +256,26 @@ _PackageInfoImpl::GetDataSize(void) const
 
        if (__fromDatabase)
        {
-               SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null.");
+               SysTryReturn(NID_APP, __id.IsEmpty() == false, 0, E_SYSTEM, "id is IsEmpty.");
 
-               int result = PMINFO_R_OK;
+               std::unique_ptr<char[]> pPackage(_StringConverter::CopyToCharArrayN(__id));
+               SysTryReturn(NID_APP, pPackage, 0, E_OUT_OF_MEMORY, "pPackage is null.");
 
-               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);
-               }
+               void* pClient = pkgmgr_client_new(PC_REQUEST);
+               SysTryReturn(NID_APP, pClient, 0, E_SYSTEM, "pkgmgr_client_new() failed.");
+
+               SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, %s)", pPackage.get());
+               dataSize = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, 1, pClient, null, pPackage.get(), null, null, null);
+
+         pkgmgr_client_free(pClient);
        }
        else
        {
                SysLog(NID_APP, "GetDataSize() is not available.");
        }
 
+       SysLog(NID_APP, "dataSize = [%d]", dataSize);
+
        return (long long) dataSize;
 }
 
@@ -322,10 +338,10 @@ _PackageInfoImpl::GetPackageAppInfoListN(void)
                        PackageAppInfo* pPackageAppInfo = dynamic_cast <PackageAppInfo*>(__pPackageAppInfoList->GetAt(i));
                        if (pPackageAppInfo)
                        {
-                               PackageAppInfo* pInfo = new (std::nothrow) PackageAppInfo;
+                               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);
+                               _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo.get());
                                SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
 
                                AppId appId = pPackageAppInfo->GetAppId();
@@ -340,7 +356,7 @@ _PackageInfoImpl::GetPackageAppInfoListN(void)
                                pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
                                pPackageAppInfoImpl->SetMainApp(mainApp);
 
-                               r = pList->Add(*pInfo);
+                               r = pList->Add(*pInfo.release());
                        }
                 }
        }
@@ -364,7 +380,7 @@ _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const
                res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &appInfoHandle);
                if (res == 0)
                {
-                       SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): appId = [%s]", pAppId.get());
+                       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");
@@ -392,24 +408,35 @@ _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const
                                        continue;
                                }
 
-                               PackageAppInfo* pInfo = new (std::nothrow) PackageAppInfo;
+                               _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* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo);
-                               SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null.");
+                               _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();
 
-                               pPackageAppInfoImpl->SetAppId(appId);
-                               pPackageAppInfoImpl->SetAppName(appName);
-                               pPackageAppInfoImpl->SetAppDisplayName(appDisplayName);
-                               pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible);
-                               pPackageAppInfoImpl->SetMainApp(mainApp);
+                               int size = 0;
+                               char* pIcon = pPackageAppInfoImpl->GetAppMenuIconBufferN(size);
+                               if (pIcon)
+                               {
+                                       pImpl->SetAppMenuIconBuffer(pIcon, size);
+                                       delete pIcon;
+                               }
 
-                               return pInfo;
+                               pImpl->SetAppId(appId);
+                               pImpl->SetAppName(appName);
+                               pImpl->SetAppDisplayName(appDisplayName);
+                               pImpl->SetMenuIconVisible(menuIconVisible);
+                               pImpl->SetMainApp(mainApp);
+
+                               return pInfo.release();
                        }
                 }
        }
@@ -445,7 +472,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
@@ -456,32 +483,71 @@ _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAp
        return true;
 }
 
-ArrayList*
+IList*
 _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;
+       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++)
+       if (__fromDatabase)
+       {
+               SysTryReturn(NID_APP, __id.IsEmpty() == false, null, E_SYSTEM, "__id is empty.");
+
+               std::unique_ptr< IList > pList(_PrivilegeManager::GetPrivilegeListN(__id));
+               if (pList == null)
+               {
+                       SysLog(NID_APP, "_PrivilegeManager::GetPrivilegeListN() is null.");
+                       return null;
+               }
+
+               for (int i = 0; i < pList->GetCount(); i++)
+               {
+                       String* pPrivilege = dynamic_cast < String* >(pList->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.");
+                       }
+                }
+       }
+       else
        {
-               String* pPrivilege = dynamic_cast <String*>(__pPrivilegeList->GetAt(i));
-               if (pPrivilege)
+               if (__pPrivilegeList)
                {
-                       PrivilegeInfo* pPrivilegeInfo = new (std::nothrow) PrivilegeInfo;
-                       SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null.");
+                       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.");
 
-                       pPrivilegeInfo->Construct(*pPrivilege);
+                                       r = pPrivilegeInfo->Construct(*pPrivilege);
+                                       SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed.");
 
-                       r = pPrivilegeList->Add(*pPrivilegeInfo);
+                                       r = pPrivilegeList->Add(*pPrivilegeInfo.release());
+                                       SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed.");
+                               }
+                        }
                }
-        }
+       }
 
-       return pPrivilegeList;
+       if (pPrivilegeList->GetCount() <= 0)
+       {
+               SysLog(NID_APP, "pPrivilegeList->GetCount() is invalid.");
+               return null;
+       }
+
+       return pPrivilegeList.release();
 }
 
 result
@@ -981,19 +1047,21 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        int installedTime = 0;
        pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE;
        bool removable = true;
+       bool movable = true;
+       bool preloaded = true;
+       bool updated = 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;
        }
@@ -1005,7 +1073,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;
        }
@@ -1017,7 +1084,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;
        }
@@ -1029,7 +1095,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;
        }
@@ -1041,7 +1106,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;
        }
@@ -1053,8 +1117,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;
@@ -1065,10 +1127,51 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
                SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable() is failed. result = [%d]", result);
        }
 
+       result = pkgmgrinfo_pkginfo_is_movable(__packageInfoHandle, &movable);
+       if (result == PMINFO_R_OK)
+       {
+               __movable = movable;
+       }
+       else
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_movable() is failed. result = [%d]", result);
+       }
+
+       result = pkgmgrinfo_pkginfo_is_update(__packageInfoHandle, &updated);
+       if (result == PMINFO_R_OK)
+       {
+               if (updated == true)
+               {
+                       __downloaded = true;
+               }
+               else
+               {
+                       result = pkgmgrinfo_pkginfo_is_preload(__packageInfoHandle, &preloaded);
+                       if (result == PMINFO_R_OK)
+                       {
+                               if (preloaded == true)
+                               {
+                                       __downloaded = false;
+                               }
+                               else
+                               {
+                                       __downloaded = true;
+                               }
+                       }
+                       else
+                       {
+                               SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_preload() is failed. result = [%d]", result);
+                       }
+               }
+       }
+       else
+       {
+               SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_update() 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;
        }
@@ -1080,7 +1183,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;
        }
@@ -1114,7 +1216,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;
@@ -1128,7 +1229,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;
        }
@@ -1140,7 +1240,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;
        }
@@ -1152,7 +1251,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;
        }
@@ -1164,7 +1262,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_root_path(__packageInfoHandle, &pRootPath);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_root_path(): rootPath = [%s]", pRootPath);
                String rootPath(pRootPath);
                __appRootPath = rootPath;
        }
@@ -1173,6 +1270,11 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
                SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_root_path() is failed. result = [%d]", result);
        }
 
+       SysLog(NID_APP, "package(%ls), version(%ls), type(%ls), displayName(%ls), uninstallable(%d), downloaded(%d), updated(%d), preloaded(%d)"
+                                                                       "movable(%d), externalStorage(%d), mainApp(%ls), storeClient(%ls), appRootPath(%ls)",
+                       __id.GetPointer(), __version.GetPointer(), __type.GetPointer(), __displayName.GetPointer(), __uninstallable, __downloaded, updated, preloaded,
+                       __movable, __externalStorage, __mainAppId.GetPointer(), __storeClientId.GetPointer(), __appRootPath.GetPointer());
+
        return r;
 }