Sync to the latest code
authorDuyoung Jang <duyoung.jang@samsung.com>
Mon, 5 Aug 2013 08:04:47 +0000 (17:04 +0900)
committerDuyoung Jang <duyoung.jang@samsung.com>
Mon, 5 Aug 2013 08:04:47 +0000 (17:04 +0900)
Change-Id: I695fe90f83370544401c2de561c54253cedc0920
Signed-off-by: Duyoung Jang <duyoung.jang@samsung.com>
src/app/inc/FAppPkg_PackageManagerImpl.h [changed mode: 0644->0755]
src/app/inc/FAppPkg_PackageParser.h [changed mode: 0644->0755]
src/app/package/FAppPkg_PackageInfoImpl.cpp
src/app/package/FAppPkg_PackageManagerImpl.cpp
src/app/package/FAppPkg_PackageParser.cpp

old mode 100644 (file)
new mode 100755 (executable)
index a507c82..b3efe2a
@@ -189,6 +189,8 @@ private:
        static int InstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData);
        static int UninstallationEventHandler(int reqId, const char* pType, const char* pPackageId, const char* pKey, const char* pVal, const void* pMsg, void* pData);
 
+       bool IsHybridPackage(const Tizen::Base::String& filePath) const;
+
 protected:
        friend class PackageManager;
 
old mode 100644 (file)
new mode 100755 (executable)
index bd7d933..9c13ec0
@@ -153,6 +153,7 @@ private:
 
        char* __pDefaultIconType;
        bool __isDefaultName;
+       bool __isEflTpk;
 }; // _PackageParser
 
 } } } // Tizen::App::Package
index d88bda0..b55612b 100755 (executable)
@@ -1212,8 +1212,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
        result = pkgmgrinfo_pkginfo_get_installed_time(__packageInfoHandle, &installedTime);
        if (result == PMINFO_R_OK)
        {
-               SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_time(): installedTime = [%d]", installedTime);
-
                time_t dateTime = (time_t) installedTime;
                struct tm* pGmTime = null;
 
@@ -1223,7 +1221,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId)
                        DateTime tempTime;
                        tempTime.SetValue(pGmTime->tm_year + 1900, pGmTime->tm_mon + 1, pGmTime->tm_mday, pGmTime->tm_hour, pGmTime->tm_min, pGmTime->tm_sec);
                        __dateTime = tempTime;
-                       SysLog(NID_APP, "Time %d %d/%d, %d:%d:%d", tempTime.GetYear(), tempTime.GetMonth(), tempTime.GetDay(), tempTime.GetHour(), tempTime.GetMinute(), tempTime.GetSecond());
                }
        }
        else
index f047532..09ef6be 100755 (executable)
@@ -36,6 +36,7 @@
 #include <FBaseSysLog.h>
 #include <FIo.h>
 #include <FIoRegistry.h>
+#include <FSecPrivilegeInfo.h>
 #include <FSysSystemTime.h>
 #include <FBase_StringConverter.h>
 
@@ -49,7 +50,9 @@
 using namespace Tizen::Base;
 using namespace Tizen::Base::Runtime;
 using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
 using namespace Tizen::Io;
+using namespace Tizen::Security;
 using namespace Tizen::System;
 
 namespace Tizen { namespace App { namespace Package
@@ -380,12 +383,9 @@ _PackageManagerImpl::InstallPackage(const PackageId& packageId, const String& pa
                return E_SYSTEM;
        }
 
-       // optionalData = 12345abcde:StoreClientId=XXXXX12345
-       PackageId StoreClientId = _AppInfo::GetPackageId();
+       // optionalData = 12345abcde
        String optionalData;
        optionalData.Append(packageId);
-       optionalData.Append(":StoreClientId=");
-       optionalData.Append(StoreClientId);
 
        std::unique_ptr<char[]> pOptionalData(_StringConverter::CopyToCharArrayN(optionalData));
        SysTryReturnResult(NID_APP, pOptionalData, E_OUT_OF_MEMORY, "pOptionalData is null.");
@@ -771,6 +771,33 @@ _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const
                pPackageInfoImpl->SetAuthor(pPkgInfo->author);
                pPackageInfoImpl->SetMainAppId(pPkgInfo->pkg_name);
 
+               if (IsHybridPackage(filePath) == true)
+               {
+                       PackageInfo hybridServiceInfo;
+                       _PackageParser packageParser;
+
+                       res = packageParser.Construct(&hybridServiceInfo);
+                       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());
+
+                       IList* pList = hybridServiceInfo.GetPrivilegeListN();
+                       if (pList)
+                       {
+                               for (int i = 0; i < pList->GetCount(); i++)
+                               {
+                                       PrivilegeInfo* pPrivilegeInfo = dynamic_cast < PrivilegeInfo* >(pList->GetAt(i));
+                                       if (pPrivilegeInfo)
+                                       {
+                                               String privilege = pPrivilegeInfo->GetId();
+                                               pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(privilege));
+                                               SysLog(NID_APP, "privilege[%ls] is added for hybrid.", privilege.GetPointer());
+                                       }
+                                }
+                       }
+               }
+
                if (pPkgInfo->privilege_list)
                {
                        GList* pList = null;
@@ -1318,6 +1345,33 @@ _PackageManagerImpl::PackageAppInfoMetadataHandler(const pkgmgrinfo_appinfo_h ha
        return 0;
 }
 
+bool
+_PackageManagerImpl::IsHybridPackage(const String& filePath) const
+{
+       SysTryReturn(NID_APP, filePath.IsEmpty() == false, false, E_INVALID_ARG, "filePath is empty.");
+
+       bool res = true;
+       FileUnzipper unzipper;
+       ZipEntry zipEntry;
+
+       result r = unzipper.Construct(filePath);
+       SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "unzipper.Construct() failed.");
+
+       r = unzipper.GetEntry(L"info/manifest.xml", zipEntry);
+       if (!IsFailed(r))
+       {
+               SysLog(NID_APP, "It's hybrid package. [%ls]", filePath.GetPointer());
+               res = true;
+       }
+       else
+       {
+               SysLog(NID_APP, "It's not hybrid package. [%ls]", filePath.GetPointer());
+               res = false;
+       }
+
+       return res;
+}
+
 _PackageManagerImpl*
 _PackageManagerImpl::GetInstance(void)
 {
index 6d2e9a5..619f6a7 100755 (executable)
@@ -488,6 +488,7 @@ _PackageParser::_PackageParser(void)
 ,__pAppInfo(null)
 ,__pDefaultIconType(null)
 ,__isDefaultName(false)
+,__isEflTpk(false)
 {
 }
 
@@ -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)
+       {
+               AppLog("[%ls] is tizen native application.", packageId.GetPointer());
+       }
+       else
+       {
+               AppLog("[%ls] is not tizen native application.", packageId.GetPointer());
+               __isEflTpk = true;
+       }
+
        return true;
 }
 
@@ -948,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)
@@ -957,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);
                }
        }