X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fapp%2Fpackage%2FFAppPkg_PackageManagerImpl.cpp;h=835b5bd3aa1dae0c42e09fe5a195a954a9adba82;hb=8164f329fdc88f176ef14e27674458d9e458ab44;hp=35efd1de1a8d3b3cad64da24e2d595ddce7cf148;hpb=ed6961ebb43dea553944067b4b0ba34634ece3fb;p=platform%2Fframework%2Fnative%2Fappfw.git diff --git a/src/app/package/FAppPkg_PackageManagerImpl.cpp b/src/app/package/FAppPkg_PackageManagerImpl.cpp index 35efd1d..835b5bd 100755 --- a/src/app/package/FAppPkg_PackageManagerImpl.cpp +++ b/src/app/package/FAppPkg_PackageManagerImpl.cpp @@ -1,5 +1,4 @@ // -// Open Service Platform // Copyright (c) 2012 Samsung Electronics Co., Ltd. // // Licensed under the Apache License, Version 2.0 (the License); @@ -37,6 +36,7 @@ #include #include #include +#include #include #include @@ -50,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 @@ -86,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); } } } @@ -381,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."); @@ -477,7 +487,7 @@ _PackageManagerImpl::UninstallPackage(const PackageId& packageId, IPackageUninst } res = pkgmgr_client_uninstall(__pRequestClient, pType, pPackageId.get(), PM_QUIET, UninstallationEventHandler, pListener); - SysLog(NID_APP, "pkgmgr_client_uninstall - req_id=[%d], package=[%s], type=[%s]", res, pPackageId.get(), pType); + SysLog(NID_APP, "pkgmgr_client_uninstall - req=[%d], package=[%s], type=[%s]", res, pPackageId.get(), pType); if(pPackageInfoHandle) { @@ -552,9 +562,10 @@ _PackageManagerImpl::MoveToExternalStorage(const PackageId& packageId) SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed"); } - res = pkgmgr_client_move(__pRequestClient, pType, pPackageId.get(), PM_MOVE_TO_SDCARD, PM_QUIET); + 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) + if (packageInfoHandle) { pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle); } @@ -619,9 +630,10 @@ _PackageManagerImpl::MoveToInternalStorage(const PackageId& packageId) SysTryReturnResult(NID_APP, __pRequestClient != null, E_SYSTEM, "pkgmgr_client_new(PC_REQUEST) failed"); } - res = pkgmgr_client_move(__pRequestClient, pType, pPackageId.get(), PM_MOVE_TO_INTERNAL, PM_QUIET); + 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) + if (packageInfoHandle) { pkgmgrinfo_pkginfo_destroy_pkginfo(packageInfoHandle); } @@ -667,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) { @@ -738,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) { @@ -760,7 +779,7 @@ _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const _package_manager_pkg_detail_info_t* pPkgInfo = (_package_manager_pkg_detail_info_t*) pPkgmgrInfo; _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get()); - SysLog(NID_APP, "id(%s), version(%s), label(%s), description(%s), author(%s), icon_size(%d), pkgname(%s)", pPkgInfo->pkgid, pPkgInfo->version, pPkgInfo->label, + SysLog(NID_APP, "package(%s), version(%s), label(%s), description(%s), author(%s), icon_size(%d), pkgname(%s)", pPkgInfo->pkgid, pPkgInfo->version, pPkgInfo->label, pPkgInfo->pkg_description, pPkgInfo->author, pPkgInfo->icon_size, pPkgInfo->pkg_name); pPackageInfoImpl->SetType(PACKAGE_TYPE_WGT); @@ -771,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; @@ -799,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()); @@ -916,7 +957,7 @@ CATCH: if (pList->GetCount() <= 0) { - AppLog("pList's count is 0."); + SysLog(NID_APP, "pList's count is 0."); return null; } @@ -969,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) { @@ -1049,7 +1144,7 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) con PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(list.GetAt(i)); if (pPackageAppInfo) { - AppLog("PackageAppFilter - App [%ls]", pPackageAppInfo->GetAppId().GetPointer()); + SysLog(NID_APP, "PackageAppFilter - App [%ls]", pPackageAppInfo->GetAppId().GetPointer()); std::unique_ptr< AppId > pAppId(new (std::nothrow) AppId(pPackageAppInfo->GetAppId())); appIdList.Add(pAppId.release()); @@ -1065,7 +1160,7 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) con if (appIdList.Contains(appId) == true) { - AppLog("App [%ls] is matched.", appId.GetPointer()); + SysLog(NID_APP, "App [%ls] is matched.", appId.GetPointer()); std::unique_ptr< PackageAppInfo > pAppInfo(new (std::nothrow) PackageAppInfo); SysTryCatch(NID_APP, pAppInfo, , E_OUT_OF_MEMORY, "pAppInfo is null."); @@ -1077,7 +1172,7 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) con } else { - AppLog("App [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer()); + SysLog(NID_APP, "App [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer()); } } } @@ -1096,7 +1191,7 @@ CATCH: if (pList->GetCount() <= 0) { - AppLog("pList's count is 0."); + SysLog(NID_APP, "pList's count is 0."); return null; } @@ -1131,7 +1226,7 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageFilterMap, const PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(pPackageAppInfoList->GetAt(j)); if (pPackageAppInfo) { - AppLog("PackageFilter - App [%ls]", pPackageAppInfo->GetAppId().GetPointer()); + SysLog(NID_APP, "PackageFilter - App [%ls]", pPackageAppInfo->GetAppId().GetPointer()); std::unique_ptr< AppId > pAppId(new (std::nothrow) AppId(pPackageAppInfo->GetAppId())); appIdList.Add(pAppId.release()); @@ -1157,11 +1252,11 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageFilterMap, const if (pPackageAppInfo) { AppId appId = pPackageAppInfo->GetAppId(); - AppLog("AppFilter - App [%ls]", appId.GetPointer()); + SysLog(NID_APP, "AppFilter - App [%ls]", appId.GetPointer()); if (appIdList.Contains(appId) == true) { - AppLog("App [%ls] is matched.", appId.GetPointer()); + SysLog(NID_APP, "App [%ls] is matched.", appId.GetPointer()); std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo); SysTryReturn(NID_APP, pPackageAppInfo, null, E_OUT_OF_MEMORY, "PackageAppInfo is null."); @@ -1173,14 +1268,14 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageFilterMap, const } else { - AppLog("App [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer()); + SysLog(NID_APP, "App [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer()); } } } if (pList->GetCount() <= 0) { - AppLog("pList's count is 0."); + SysLog(NID_APP, "pList's count is 0."); return null; } @@ -1269,6 +1364,34 @@ _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; + } + + SetLastResult(E_SUCCESS); + return res; +} + _PackageManagerImpl* _PackageManagerImpl::GetInstance(void) { @@ -1304,7 +1427,9 @@ _PackageManagerImpl::SendPackageEvent(PackageType type, const PackageId& package if (strcmp(pEventKey, "start") == 0) { - if ((strcmp(pEventValue, "install") == 0) || (strcmp(pEventValue, "uninstall") == 0)) + if ((strcmp(pEventValue, "install") == 0) + || (strcmp(pEventValue, "update") == 0) + ||(strcmp(pEventValue, "uninstall") == 0)) { String* pAppId = new (std::nothrow) String(packageId); SysTryReturnVoidResult(NID_APP, pAppId != null, E_OUT_OF_MEMORY, "pAppId instance must not be null."); @@ -1684,7 +1809,7 @@ int _PackageManagerImpl::PackageEventHandler(int req_id, const char* pkg_type, const char* pkg_name, const char* key, const char* val, const void* pmsg, void* data) { - SysLog(NID_APP, "PackageEventHandler - req_id: %d, pkg_type: %s, pkg_name: %s, key: %s, val: %s", req_id, pkg_type, + SysLog(NID_APP, "PackageEventHandler - req: %d, pkg_type: %s, pkg_name: %s, key: %s, val: %s", req_id, pkg_type, pkg_name, key, val); PackageType type = PACKAGE_TYPE_TPK; @@ -1720,7 +1845,7 @@ _PackageManagerImpl::GetAppIdOfDataControlN(const String& providerId) String query; String* pAppId = null; - query.Format(1024, L"SELECT PkgInfo.PKG_ID FROM PkgInfo, AppInfo, DataControl WHERE DataControl.PROVIDER_ID = '%ls' and DataControl.ID = AppInfo.UNIQUE_ID and AppInfo.ID = PkgInfo.UNIQUE_ID", + query.Format(1024, L"SELECT AppInfo.PACKAGE_NAME FROM AppInfo, DataControl WHERE DataControl.PROVIDER_ID = '%ls' and DataControl.ID = AppInfo.UNIQUE_ID", providerId.GetPointer()); r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r");