Fix prevent issue for package manager
[platform/framework/native/appfw.git] / src / app / package / FAppPkg_PackageAppInfoImpl.cpp
index 9aa0d9a..ac447b9 100755 (executable)
 #include <FIoDatabase.h>
 #include <FIoDbEnumerator.h>
 #include <FIoDbStatement.h>
+#include <FIoFile.h>
 #include <FBase_StringConverter.h>
 
 #include "FAppPkg_PackageManagerImpl.h"
+#include "FApp_AppResourceImpl.h"
 #include "FApp_TemplateUtil.h"
 
 using namespace Tizen::Base;
@@ -123,12 +125,43 @@ _PackageAppInfoImpl::SetAppNotificationIconPath(const String& notificationIconPa
        return E_SUCCESS;
 }
 
+const String&
+_PackageAppInfoImpl::GetAppTempIconPath(void) const
+{
+       return __appTempIconPath;
+}
+
+result
+_PackageAppInfoImpl::SetAppTempIconPath(const String& tempIconPath)
+{
+       __appTempIconPath = tempIconPath;
+       return E_SUCCESS;
+}
+
 Bitmap*
 _PackageAppInfoImpl::GetAppMenuIconN(void) const
 {
-       SysTryReturn(NID_APP, __appIconPath.IsEmpty() == false, null, E_FILE_NOT_FOUND, "appIconPath() is empty.");
+       Bitmap* pBitmap = null;
+       String iconPath;
 
-       return null;
+       if (__fromDatabase)
+       {
+               SysTryReturn(NID_APP, __appIconPath.IsEmpty() == false, null, E_FILE_NOT_FOUND, "appIconPath() is empty.");
+
+               iconPath = __appIconPath;
+       }
+       else
+       {
+               SysTryReturn(NID_APP, __appTempIconPath.IsEmpty() == false, null, E_FILE_NOT_FOUND, "__appTempIconPath() is empty.");
+
+               iconPath = __appTempIconPath;
+       }
+
+       SysLog(NID_APP, "iconPath = [%ls]", iconPath.GetPointer());
+
+       pBitmap = _AppResourceImpl::GetNonScalingBitmapN(iconPath);
+
+       return pBitmap;
 }
 
 HashMap*
@@ -287,6 +320,8 @@ _PackageAppInfoImpl::GetInstance(PackageAppInfo* pPackageAppInfo)
 result
 _PackageAppInfoImpl::Construct(const AppId& appId)
 {
+       SysTryReturnResult(NID_APP, appId.IsEmpty() == false, E_INVALID_ARG, "appId is empty.");
+
        int res = PMINFO_R_OK;
        char* pExePath = null;
        char* pDisplayName = null;
@@ -300,7 +335,7 @@ _PackageAppInfoImpl::Construct(const AppId& appId)
        SysTryReturnResult(NID_APP, pAppId, E_OUT_OF_MEMORY, "pAppId is null");
 
        res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &__pAppInfoHandle);
-       SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appinfo failed, res = [%d]", res);
+       SysTryReturnResult(NID_APP, res == 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appinfo failed, res = [%d], appId = [%s]", res, pAppId.get());
 
        __fromDatabase = true;
 
@@ -431,7 +466,8 @@ _PackageAppInfoImpl::MetadataHandler(const char* pKey, const char* pValue, void*
        SysLog(NID_APP, "Key = [%s], Value = [%s]", pKey, pValue);
 
        MultiHashMap* pMultiMap = (MultiHashMap*) pUserData;
-       pMultiMap->Add(*(new (std::nothrow) String(pKey)), *(new (std::nothrow) String(pValue)));
+       result r = pMultiMap->Add(*(new (std::nothrow) String(pKey)), *(new (std::nothrow) String(pValue)));
+       SysTryReturn(NID_APP, r == E_SUCCESS, -1, E_SYSTEM, "pMultiMap->Add() failed. [%s]", GetErrorMessage(GetLastResult()));
 
        return 0;
 }
@@ -509,6 +545,11 @@ _PackageAppInfoImpl::~_PackageAppInfoImpl(void)
        {
                pkgmgrinfo_appinfo_destroy_appinfo(__pAppInfoHandle);
        }
+
+       if (File::IsFileExist(__appTempIconPath) == true)
+       {
+               File::Remove(__appTempIconPath);
+       }
 }
 
 const String&