Add type parameter for performance
[platform/framework/native/appfw.git] / src / app / package / FAppPkg_PackageParser.cpp
index 93005ae..0fa1300 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);
@@ -20,6 +19,7 @@
  */
 
 #include <libxml/parserInternals.h>
+#include <system_info.h>
 
 #include <FAppPkgPackageAppInfo.h>
 #include <FBaseSysLog.h>
@@ -29,7 +29,6 @@
 #include <FAppPkg_PackageInfoImpl.h>
 #include <FAppPkg_PackageParser.h>
 #include <FBase_StringConverter.h>
-#include <FSys_SystemInfoImpl.h>
 
 using namespace Tizen::Base;
 using namespace Tizen::Base::Collection;
@@ -489,6 +488,7 @@ _PackageParser::_PackageParser(void)
 ,__pAppInfo(null)
 ,__pDefaultIconType(null)
 ,__isDefaultName(false)
+,__isEflTpk(false)
 {
 }
 
@@ -680,13 +680,14 @@ _PackageParser::OnServiceAppStartElement(void)
 bool
 _PackageParser::OnIconsStartElement(void)
 {
-       result r = E_SUCCESS;
+       int res = 0;
        int width = 0;
        String defaultIconType;
 
-       r = _SystemInfoImpl::GetSysInfo(L"ScreenWidth", width);
-       if (IsFailed(r))
+       res = system_info_get_value_int(SYSTEM_INFO_KEY_SCREEN_WIDTH, &width);
+       if (res != SYSTEM_INFO_ERROR_NONE)
        {
+               SysLog(NID_APP, "system_info_get_value_int(SYSTEM_INFO_KEY_SCREEN_WIDTH) failed. res = [%d]", res);
                defaultIconType = L"Xhigh";
        }
        else
@@ -745,6 +746,22 @@ _PackageParser::OnIdValue(const char* pCharacters)
        SysLog(NID_APP, "Id = [%s]", pCharacters);
        __pPackageInfoImpl->SetId(pCharacters);
 
+       RegularExpression regularExpression;
+       String pattern(L"([a-zA-Z0-9]{10})");
+       result r = regularExpression.Construct(pattern);
+       SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "regularExpression.Construct() failed.");
+
+       PackageId packageId = pCharacters;
+       if (regularExpression.Match(packageId, true) == true)
+       {
+               SysLog(NID_APP, "[%ls] is tizen native application.", packageId.GetPointer());
+       }
+       else
+       {
+               SysLog(NID_APP, "[%ls] is not tizen native application.", packageId.GetPointer());
+               __isEflTpk = true;
+       }
+
        return true;
 }
 
@@ -827,8 +844,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
                {
@@ -924,7 +965,14 @@ _PackageParser::ParseAppAttribute(_PackageXmlAttribute* pAttr, bool isUiApp)
        pPackageAppInfoImpl->SetAppName(pName);
 
        AppId appId = __pPackageInfoImpl->GetId() + L"." + pName;
-       pPackageAppInfoImpl->SetAppId(appId);
+       if (__isEflTpk == false)
+       {
+               pPackageAppInfoImpl->SetAppId(appId);
+       }
+       else
+       {
+               pPackageAppInfoImpl->SetAppId(__pPackageInfoImpl->GetId());
+       }
 
        char* pMain = pAttr->Find("Main");
        if (pMain)
@@ -933,7 +981,14 @@ _PackageParser::ParseAppAttribute(_PackageXmlAttribute* pAttr, bool isUiApp)
                if (strcasecmp(pMain, "True") == 0)
                {
                        __isDefaultName = true;
-                       __pPackageInfoImpl->SetMainAppId(appId);
+                       if (__isEflTpk == false)
+                       {
+                               __pPackageInfoImpl->SetMainAppId(appId);
+                       }
+                       else
+                       {
+                               __pPackageInfoImpl->SetMainAppId(__pPackageInfoImpl->GetId());
+                       }
                        pPackageAppInfoImpl->SetMainApp(true);
                }
        }