X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fapp%2Fpackage%2FFAppPkg_PackageManagerImpl.cpp;h=39cac0d5f6baffd2b28a21c58e43d2eba5424226;hb=7b0111af5cc27726eb70d47271a6b64b7bad9b24;hp=c6aa35d071cbd6e6e7c901b81404dd793647a0f3;hpb=5e37c1d0aaf7476e19b99b200c5cd5e6e52a9e6b;p=platform%2Fframework%2Fnative%2Fappfw.git diff --git a/src/app/package/FAppPkg_PackageManagerImpl.cpp b/src/app/package/FAppPkg_PackageManagerImpl.cpp index c6aa35d..39cac0d 100755 --- a/src/app/package/FAppPkg_PackageManagerImpl.cpp +++ b/src/app/package/FAppPkg_PackageManagerImpl.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -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 @@ -85,15 +88,26 @@ _PackageManagerEvent::FireImpl(IEventListener& listener, const IEventArg& arg) } else { - if (pArg->__install) + if (pArg->__install == false) { - SysLog(NID_APP, "Installation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer()); - pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE); + SysLog(NID_APP, "Uninstallation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer()); + pListener->OnPackageUninstallationCompleted(pArg->__packageId, false); + } + } + } + else if (pArg->__eventKey == L"error") + { + if (pArg->__install) + { + if (pArg->__eventValue == L"62") + { + SysLog(NID_APP, "Installation is Completed(Error = STORAGE_FULL(62)). [Package = %ls]", pArg->__packageId.GetPointer()); + pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_STORAGE_FULL); } else { - SysLog(NID_APP, "Uninstallation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer()); - pListener->OnPackageUninstallationCompleted(pArg->__packageId, false); + SysLog(NID_APP, "Installation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer()); + pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE); } } } @@ -380,12 +394,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 pOptionalData(_StringConverter::CopyToCharArrayN(optionalData)); SysTryReturnResult(NID_APP, pOptionalData, E_OUT_OF_MEMORY, "pOptionalData is null."); @@ -551,7 +562,7 @@ _PackageManagerImpl::MoveToExternalStorage(const PackageId& packageId) SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed"); } - SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_MOVE, 0, %s, %s)", pType, pPackageId.get()); + SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_MOVE, 1, %s, %s)", pType, pPackageId.get()); res = pkgmgr_client_request_service(PM_REQUEST_MOVE, 1, __pRequestClient, pType, pPackageId.get(), null, null, null); if (packageInfoHandle) @@ -619,7 +630,7 @@ _PackageManagerImpl::MoveToInternalStorage(const PackageId& packageId) SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed"); } - SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_MOVE, 1, %s, %s)", pType, pPackageId.get()); + SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_MOVE, 0, %s, %s)", pType, pPackageId.get()); res = pkgmgr_client_request_service(PM_REQUEST_MOVE, 0, __pRequestClient, pType, pPackageId.get(), null, null, null); if (packageInfoHandle) @@ -668,13 +679,21 @@ _PackageManagerImpl::InstallationEventHandler(int reqId, const char* pType, cons pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_SUCCESS); SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_SUCCESS)"); } + + delete pListener; + } + else if (strcmp(pKey, "error") == 0) + { + if (strcmp(pVal, "62") == 0) + { + pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_STORAGE_FULL); + SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_STORAGE_FULL)"); + } else { pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE); SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE)"); } - - delete pListener; } else if (strcmp(pKey, "install_percent") == 0) { @@ -739,7 +758,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) { @@ -772,6 +790,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; @@ -800,12 +845,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()); @@ -970,6 +1010,60 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) con res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_NODISPLAY, nodisplay); SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(NODISPLAY, %d) is failed. [%d]", nodisplay, res); } +#if 0 + else if ((*pKey) == PACKAGE_APP_FILTER_LAUNCH_ONBOOT) + { + definedKey = true; + + Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue()); + SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed."); + + bool value = pVal->ToBool(); + SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value); + + res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_ONBOOT, value); + SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(ONBOOT, %d) is failed. [%d]", value, res); + } + else if ((*pKey) == PACKAGE_APP_FILTER_AUTO_RESTART) + { + definedKey = true; + + Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue()); + SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed."); + + bool value = pVal->ToBool(); + SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value); + + res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_AUTORESTART, value); + SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(AUTORESTART, %d) is failed. [%d]", value, res); + } +#endif + else if ((*pKey) == PACKAGE_APP_FILTER_LAUNCHING_HISTORY_VISIBLE) + { + definedKey = true; + + Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue()); + SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed."); + + bool value = pVal->ToBool(); + SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value); + + res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_TASKMANAGE, value); + SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(TASKMANAGE, %d) is failed. [%d]", value, res); + } + else if ((*pKey) == PACKAGE_APP_FILTER_LAUNCH_CONDITION) + { + definedKey = true; + + Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue()); + SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed."); + + bool value = pVal->ToBool(); + SysLog(NID_APP, "Key[%ls], Value[%d]", pKey->GetPointer(), value); + + res = pkgmgrinfo_appinfo_filter_add_bool(handle, PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION, value); + SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_pkginfo_filter_add_bool(LAUNCHCONDITION, %d) is failed. [%d]", value, res); + } else if ((*pKey) == PACKAGE_APP_FILTER_CATEGORY_HOMEAPP || (*pKey) == PACKAGE_APP_FILTER_CATEGORY_LOCKAPP || (*pKey) == PACKAGE_APP_FILTER_CATEGORY_MENUAPP) { @@ -1270,6 +1364,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) {