Modify GetMenuIconN() API
authorDuyoung Jang <duyoung.jang@samsung.com>
Tue, 25 Jun 2013 11:35:21 +0000 (20:35 +0900)
committerDuyoung Jang <duyoung.jang@samsung.com>
Tue, 25 Jun 2013 11:41:16 +0000 (20:41 +0900)
Change-Id: I067729fd4e1b75168e19dc54170ce7b725bd404e
Signed-off-by: Duyoung Jang <duyoung.jang@samsung.com>
src/app/inc/FAppPkg_PackageAppInfoImpl.h
src/app/package/FAppPkg_PackageAppInfoImpl.cpp
src/app/package/FAppPkg_PackageInfoImpl.cpp
src/app/package/FAppPkg_PackageManagerImpl.cpp
src/app/package/FAppPkg_PackageParser.cpp
src/server/app/package/FAppPkg_PackageManagerServer.cpp
src/server/inc/FAppPkg_PackageManagerServer.h

index f1e4576..e881ecf 100644 (file)
@@ -68,8 +68,8 @@ public:
        const Tizen::Base::String& GetAppNotificationIconPath(void) const;
        result SetAppNotificationIconPath(const Tizen::Base::String& notificationIconPath);
 
-       const Tizen::Base::String& GetAppTempIconPath(void) const;
-       result SetAppTempIconPath(const Tizen::Base::String& tempIconPath);
+       char* GetAppMenuIconBufferN(int& size) const;
+       result SetAppMenuIconBuffer(char* pBuffer, int size);
 
        Tizen::Graphics::Bitmap* GetAppMenuIconN(void) const;
 
@@ -168,7 +168,6 @@ private:
        Tizen::Base::String __appIconPath;
        Tizen::Base::String __appSettingIconPath;
        Tizen::Base::String __appNotificationIconPath;
-       Tizen::Base::String __appTempIconPath;
 
        bool __launchingIconVisible;
        bool __mainApp;
@@ -202,6 +201,9 @@ private:
 
        void* __pAppInfoHandle;
 
+       char* __pIconBuffer;
+       int __iconSize;
+
        friend class PackageAppInfo;
 
 }; // _PackageAppInfoImpl
index 1d69ad8..c076e18 100755 (executable)
@@ -106,7 +106,7 @@ _PackageAppInfoImpl::GetAppSettingIconPath(void) const
 }
 
 result
-_PackageAppInfoImpl::SetAppSettingIconPath(const Tizen::Base::String& appSettingIcon)
+_PackageAppInfoImpl::SetAppSettingIconPath(const String& appSettingIcon)
 {
        __appSettingIconPath = appSettingIcon;
        return E_SUCCESS;
@@ -125,16 +125,40 @@ _PackageAppInfoImpl::SetAppNotificationIconPath(const String& notificationIconPa
        return E_SUCCESS;
 }
 
-const String&
-_PackageAppInfoImpl::GetAppTempIconPath(void) const
+char*
+_PackageAppInfoImpl::GetAppMenuIconBufferN(int& size) const
 {
-       return __appTempIconPath;
+       if (__pIconBuffer)
+       {
+               char* pBuffer = new (std::nothrow) char[__iconSize];
+               SysTryReturn(NID_APP, pBuffer, null, E_OUT_OF_MEMORY, "pBuffer is null.");
+
+               memset(pBuffer, 0, __iconSize);
+               memcpy(pBuffer, __pIconBuffer, __iconSize);
+
+               size = __iconSize;
+               return pBuffer;
+       }
+       else
+       {
+               return null;
+       }
 }
 
 result
-_PackageAppInfoImpl::SetAppTempIconPath(const String& tempIconPath)
+_PackageAppInfoImpl::SetAppMenuIconBuffer(char* pBuffer, int size)
 {
-       __appTempIconPath = tempIconPath;
+       if (pBuffer)
+       {
+               __pIconBuffer = new (std::nothrow) char[size];
+               SysTryReturnResult(NID_APP, __pIconBuffer, E_OUT_OF_MEMORY, "__pIconBuffer is null.");
+
+               __iconSize = size;
+
+               memset(__pIconBuffer, 0, __iconSize);
+               memcpy(__pIconBuffer, pBuffer, __iconSize);
+       }
+
        return E_SUCCESS;
 }
 
@@ -152,20 +176,39 @@ _PackageAppInfoImpl::GetAppMenuIconN(void) const
                }
 
                iconPath = __appIconPath;
+               pBitmap = _AppResourceImpl::GetNonScalingBitmapN(iconPath);
        }
        else
        {
-               if (__appTempIconPath.IsEmpty() == true)
+               if ((__pIconBuffer == null) || (__iconSize <= 0))
                {
                        return null;
                }
 
-               iconPath = __appTempIconPath;
+               iconPath = L"/tmp/icon.png";
+               if (File::IsFileExist(iconPath) == true)
+               {
+                       File::Remove(iconPath);
+               }
+
+               result r = E_SUCCESS;
+               File file;
+
+               r = file.Construct(iconPath, "w");
+               SysTryReturn(NID_APP, r == E_SUCCESS, null, E_SYSTEM, "file.Construct() failed.");
+
+               r = file.Write((void*)__pIconBuffer, __iconSize);
+               SysTryReturn(NID_APP, r == E_SUCCESS, null, E_SYSTEM, "file.Write() failed.");
+
+               file.Flush();
+
+               pBitmap = _AppResourceImpl::GetNonScalingBitmapN(iconPath);
+
+               File::Remove(iconPath);
        }
 
-       SysLog(NID_APP, "iconPath = [%ls]", iconPath.GetPointer());
 
-       pBitmap = _AppResourceImpl::GetNonScalingBitmapN(iconPath);
+       SysLog(NID_APP, "iconPath = [%ls]", iconPath.GetPointer());
 
        return pBitmap;
 }
@@ -474,10 +517,13 @@ _PackageAppInfoImpl::_PackageAppInfoImpl(void)
        , __pDataControlImplList(null)
        , __pAppControlImplList(null)
        , __pAppCategoryList(null)
+       , __pNameList(null)
        , __uniqueId(0)
        , __pkgId(0)
        , __appFeature(0)
        ,__pAppInfoHandle(null)
+       , __pIconBuffer(null)
+       , __iconSize(0)
 {
        __pLaunchConditionImplList = new (std::nothrow) ArrayList;
        SysTryReturnVoidResult(NID_APP, __pLaunchConditionImplList != null, E_OUT_OF_MEMORY, "__pLaunchConditionImplList instance must not be null.");
@@ -536,14 +582,6 @@ _PackageAppInfoImpl::~_PackageAppInfoImpl(void)
        {
                pkgmgrinfo_appinfo_destroy_appinfo(__pAppInfoHandle);
        }
-
-       if (File::IsFileExist(__appTempIconPath) == true)
-       {
-               File::Remove(__appTempIconPath);
-
-               String tmp(L"/tmp/__icon/");
-               Directory::Remove(tmp, true);
-       }
 }
 
 const String&
index a819fb1..b4fd895 100755 (executable)
@@ -29,6 +29,7 @@
 #include <FIoDatabase.h>
 #include <FIoDbEnumerator.h>
 #include <FIoDbStatement.h>
+#include <FIoFile.h>
 #include <FBaseSysLog.h>
 #include <FBaseUtilStringTokenizer.h>
 #include <FSecPrivilegeInfo.h>
@@ -420,14 +421,20 @@ _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const
                                String appDisplayName = pPackageAppInfo->GetAppDisplayName();
                                bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible();
                                bool mainApp = pPackageAppInfo->IsMainApp();
-                               String tempIconPath = pPackageAppInfoImpl->GetAppTempIconPath();
+
+                               int size = 0;
+                               char* pIcon = pPackageAppInfoImpl->GetAppMenuIconBufferN(size);
+                               if (pIcon)
+                               {
+                                       pImpl->SetAppMenuIconBuffer(pIcon, size);
+                                       delete pIcon;
+                               }
 
                                pImpl->SetAppId(appId);
                                pImpl->SetAppName(appName);
                                pImpl->SetAppDisplayName(appDisplayName);
                                pImpl->SetMenuIconVisible(menuIconVisible);
                                pImpl->SetMainApp(mainApp);
-                               pImpl->SetAppTempIconPath(tempIconPath);
 
                                return pInfo.release();
                        }
index 6022a6a..f047532 100755 (executable)
@@ -739,7 +739,6 @@ _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const
        SysLog(NID_APP, "packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
 
        bool res = true;
-       result r = E_SUCCESS;
 
        if (strcasecmp(pExtension.get(), "tpk") == 0)
        {
@@ -800,12 +799,7 @@ _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const
                        pPackageAppInfoImpl->SetMainApp(true);
                        if ((pPkgInfo->icon_buf) && (pPkgInfo->icon_size > 0))
                        {
-                               String iconPath("/tmp/icon.png");
-                               File file;
-                               r = file.Construct(iconPath, "w+");
-                               r = file.Write(pPkgInfo->icon_buf, pPkgInfo->icon_size);
-
-                               pPackageAppInfoImpl->SetAppTempIconPath(iconPath);
+                               pPackageAppInfoImpl->SetAppMenuIconBuffer(pPkgInfo->icon_buf, pPkgInfo->icon_size);
                        }
 
                        pPackageInfoImpl->AddPackageAppInfo(*pPackageAppInfo.release());
index 46db347..6d2e9a5 100755 (executable)
@@ -827,8 +827,32 @@ _PackageParser::OnIconValue(const char* pCharacters)
                r = unzipper.UnzipTo(tmp, iconRelPath);
                if (!IsFailed(r))
                {
+                       result r = E_SUCCESS;
+                       File file;
                        tempIconPath = tmp + iconRelPath;
-                       pPackageAppInfoImpl->SetAppTempIconPath(tempIconPath);
+
+                       r = file.Construct(tempIconPath, "r");
+                       if (r == E_SUCCESS)
+                       {
+                               FileAttributes attr;
+                               file.GetAttributes(tempIconPath, attr);
+                               int size = (int)attr.GetFileSize();
+
+                               char* pBuffer = new (std::nothrow) char[size];
+                               SysTryReturn(NID_APP, pBuffer, false, E_OUT_OF_MEMORY, "pBuffer is null.");
+
+                               memset(pBuffer, 0, size);
+                               file.Read((void*)pBuffer, size);
+
+                               pPackageAppInfoImpl->SetAppMenuIconBuffer(pBuffer, size);
+
+                               Directory::Remove(tmp, true);
+                               delete pBuffer;
+                       }
+                       else
+                       {
+                               SysLog(NID_APP, "file.Construct() failed.", tempIconPath.GetPointer());
+                       }
                }
                else
                {
index 744f0c1..9e87de7 100755 (executable)
@@ -63,115 +63,6 @@ _PackageManagerServer::GetInstance(void)
        return pPackageManagerServer;
 }
 
-PackageInfo*
-_PackageManagerServer::GetPackageInfoFromFileN(const String& filePath) const
-{
-       SysTryReturn(NID_APP, filePath.IsEmpty() == false, null, E_INVALID_ARG, "filePath is empty.");
-       SysTryReturn(NID_APP, File::IsFileExist(filePath) == true, null, E_FILE_NOT_FOUND, "package is not existed.");
-
-       String extension = File::GetFileExtension(filePath);
-       SysTryReturn(NID_APP, extension.IsEmpty() == false, null, E_INVALID_ARG, "extension is empty.");
-
-       std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(filePath));
-       SysTryReturn(NID_APP, pPackagePath, null, E_OUT_OF_MEMORY, "pPackagePath is null.");
-
-       std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
-       SysTryReturn(NID_APP, pExtension, null, E_OUT_OF_MEMORY, "pExtension is null.");
-
-       std::unique_ptr< PackageInfo > pPackageInfo(new (std::nothrow) PackageInfo);
-       SysTryReturn(NID_APP, pPackageInfo, null, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
-
-       SysLog(NID_APP, "packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
-
-       bool res = true;
-       result r = E_SUCCESS;
-
-       if (strcasecmp(pExtension.get(), "tpk") == 0)
-       {
-               _PackageParser packageParser;
-
-               res = packageParser.Construct(pPackageInfo.get());
-               SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Construct() is failed. [%s]", pPackagePath.get());
-
-               res = packageParser.Parse(filePath);
-               SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Parse() is failed. [%s]", pPackagePath.get());
-       }
-       else if (strcasecmp(pExtension.get(), "wgt") == 0)
-       {
-               pkgmgr_info* pPkgmgrInfo = null;
-
-               pPkgmgrInfo = pkgmgr_client_check_pkginfo_from_file(pPackagePath.get());
-               SysTryReturn(NID_APP, pPkgmgrInfo, null, E_PARSING_FAILED, "pkgmgr_client_check_pkginfo_from_file(%s) is failed.", pPackagePath.get());
-
-               _package_manager_pkg_detail_info_t* pPkgInfo = (_package_manager_pkg_detail_info_t*) pPkgmgrInfo;
-               _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
-
-               SysLog(NID_APP, "package(%s), version(%s), label(%s), description(%s), author(%s), icon_size(%d), pkgname(%s)", pPkgInfo->pkgid, pPkgInfo->version, pPkgInfo->label,
-                               pPkgInfo->pkg_description, pPkgInfo->author, pPkgInfo->icon_size, pPkgInfo->pkg_name);
-
-               pPackageInfoImpl->SetType(PACKAGE_TYPE_WGT);
-               pPackageInfoImpl->SetId(pPkgInfo->pkgid);
-               pPackageInfoImpl->SetVersion(pPkgInfo->version);
-               pPackageInfoImpl->SetDisplayName(pPkgInfo->label);
-               pPackageInfoImpl->SetDescription(pPkgInfo->pkg_description);
-               pPackageInfoImpl->SetAuthor(pPkgInfo->author);
-               pPackageInfoImpl->SetMainAppId(pPkgInfo->pkg_name);
-
-               if (pPkgInfo->privilege_list)
-               {
-                       GList* pList = null;
-                       pList = g_list_first(pPkgInfo->privilege_list);
-                       while (pList)
-                       {
-                               char* pPrivilege = (char*)pList->data;
-                               if (pPrivilege)
-                               {
-                                       pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(pPrivilege));
-                                       free(pPrivilege);
-                               }
-                               pList = g_list_next(pList);
-                       }
-                       g_list_free(pPkgInfo->privilege_list);
-               }
-
-               std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
-               if (pPackageAppInfo)
-               {
-                       _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
-
-                       pPackageAppInfoImpl->SetAppId(pPkgInfo->pkg_name);
-                       pPackageAppInfoImpl->SetAppName(pPkgInfo->label);
-                       pPackageAppInfoImpl->SetAppDisplayName(pPkgInfo->label);
-                       pPackageAppInfoImpl->SetMainApp(true);
-                       if ((pPkgInfo->icon_buf) && (pPkgInfo->icon_size > 0))
-                       {
-                               String iconPath("/tmp/icon.png");
-                               File file;
-                               r = file.Construct(iconPath, "w+");
-                               r = file.Write(pPkgInfo->icon_buf, pPkgInfo->icon_size);
-
-                               pPackageAppInfoImpl->SetAppTempIconPath(iconPath);
-                       }
-
-                       pPackageInfoImpl->AddPackageAppInfo(*pPackageAppInfo.release());
-               }
-               else
-               {
-                       SysLog(NID_APP, "pPackageAppInfo instance must not be null.");
-                       pkgmgr_client_free_pkginfo(pPkgmgrInfo);
-                       return null;
-               }
-
-               pkgmgr_client_free_pkginfo(pPkgmgrInfo);
-       }
-       else
-       {
-               SysTryReturn(NID_APP, false, null, E_UNSUPPORTED_FORMAT, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
-       }
-
-       return pPackageInfo.release();
-}
-
 PackageType
 _PackageManagerServer::GetType(const PackageId& packageId) const
 {
index 0da3aa2..a362e3e 100644 (file)
@@ -41,7 +41,6 @@ class _OSP_EXPORT_ _PackageManagerServer
 public:
        static _PackageManagerServer* GetInstance(void);
 
-       PackageInfo* GetPackageInfoFromFileN(const Tizen::Base::String& filePath) const;
        PackageType GetType(const Tizen::App::PackageId& packageId) const;