Modify GetMenuIconN() API
[platform/framework/native/appfw.git] / src / app / package / FAppPkg_PackageAppInfoImpl.cpp
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&