SysTryReturn(NID_APP, pEnum, null, E_INVALID_ARG, "GetMapEnumeratorN() is failed.");
int res = 0;
+ bool definedKey = false;
+ bool metadataKey = false;
ArrayList* pList = null;
+ ArrayList list;
+ ArrayList metadataList;
+ ArrayList appIdList;
pkgmgrinfo_appinfo_filter_h handle = null;
+ pkgmgrinfo_appinfo_metadata_filter_h metaHandle = null;
res = pkgmgrinfo_appinfo_filter_create(&handle);
SysTryReturn(NID_APP, res == PMINFO_R_OK, null, E_SYSTEM, "pkgmgrinfo_appinfo_filter_create() is failed. [%d]", res);
+ res = pkgmgrinfo_appinfo_metadata_filter_create(&metaHandle);
+ SysTryReturn(NID_APP, res == PMINFO_R_OK, null, E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_create() is failed. [%d]", res);
+
while(pEnum->MoveNext() == E_SUCCESS)
{
- String* pKey = static_cast<String*>(pEnum->GetKey());
+ String* pKey = static_cast< String* >(pEnum->GetKey());
SysTryCatch(NID_APP, pKey, , E_INVALID_ARG, "GetKey() is failed.");
if ((*pKey) == PACKAGE_APP_FILTER_MENUICON_VISIBLE)
{
- Boolean* pVal = static_cast<Boolean*>(pEnum->GetValue());
+ definedKey = true;
+
+ Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue());
SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
bool nodisplay = !(pVal->ToBool());
}
else if ((*pKey) == PACKAGE_APP_FILTER_CATEGORY)
{
- String* pVal = static_cast<String*>(pEnum->GetValue());
+ definedKey = true;
+
+ String* pVal = static_cast< String* >(pEnum->GetValue());
SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
SysLog(NID_APP, "Key[%ls], Value[%ls]", pKey->GetPointer(), pVal->GetPointer());
}
else
{
- SysTryCatch(NID_APP, false, , E_INVALID_ARG, "Invalid key(%ls)", pKey->GetPointer());
+ metadataKey = true;
+
+ String* pVal = static_cast< String* >(pEnum->GetValue());
+ SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed.");
+
+ SysLog(NID_APP, "Key[%ls], Value[%ls]", pKey->GetPointer(), pVal->GetPointer());
+
+ std::unique_ptr<char[]> pMetaKey(_StringConverter::CopyToCharArrayN(*pKey));
+ SysTryCatch(NID_APP, pMetaKey, , E_OUT_OF_MEMORY, "pMetaKey is null.");
+
+ std::unique_ptr<char[]> pValue(_StringConverter::CopyToCharArrayN(*pVal));
+ SysTryCatch(NID_APP, pValue, , E_OUT_OF_MEMORY, "pValue is null.");
+
+ res = pkgmgrinfo_appinfo_metadata_filter_add(metaHandle, pMetaKey.get(), pValue.get());
+ SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_add(%s, %s) is failed. [%d]", pMetaKey.get(), pValue.get(), res);
}
}
- pList = new (std::nothrow) ArrayList();
- SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure.");
- pList->Construct();
+ if ((definedKey == true) && (metadataKey == false))
+ {
+ pList = new (std::nothrow) ArrayList();
+ SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure.");
+ pList->Construct();
- res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, pList);
- if (res != 0)
+ res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, pList);
+ if (res != PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res);
+
+ pList->RemoveAll(true);
+ pList = null;
+ }
+ }
+ else if ((definedKey == false) && (metadataKey == true))
{
- SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res);
+ pList = new (std::nothrow) ArrayList();
+ SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure.");
+ pList->Construct();
- pList->RemoveAll(true);
- pList = null;
+ res = pkgmgrinfo_appinfo_metadata_filter_foreach(metaHandle, PackageAppInfoMetadataHandler, pList);
+ if (res != PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_appinfo_metadata_filter_foreach() is failed. result = [%d]", res);
+
+ pList->RemoveAll(true);
+ pList = null;
+ }
+ }
+ else
+ {
+ list.Construct();
+
+ res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, &list);
+ if (res != PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res);
+ goto CATCH;
+ }
+
+ metadataList.Construct();
+
+ res = pkgmgrinfo_appinfo_metadata_filter_foreach(metaHandle, PackageAppInfoMetadataHandler, &metadataList);
+ if (res != PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_appinfo_metadata_filter_foreach() is failed. result = [%d]", res);
+ goto CATCH;
+ }
+
+ for (int i = 0; i < list.GetCount(); i++)
+ {
+ PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(list.GetAt(i));
+ if (pPackageAppInfo)
+ {
+ AppLog("PackageAppFilter - AppId [%ls]", pPackageAppInfo->GetAppId().GetPointer());
+
+ std::unique_ptr< AppId > pAppId(new (std::nothrow) AppId(pPackageAppInfo->GetAppId()));
+ appIdList.Add(pAppId.release());
+ }
+ }
+
+ pList = new (std::nothrow) ArrayList();
+ SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure.");
+ pList->Construct();
+
+ for (int j = 0; j < metadataList.GetCount(); j++)
+ {
+ PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(metadataList.GetAt(j));
+ if (pPackageAppInfo)
+ {
+ if (appIdList.Contains(pPackageAppInfo->GetAppId()) == true)
+ {
+ AppLog("AppId [%ls] is matched.", pPackageAppInfo->GetAppId().GetPointer());
+
+ std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
+ SysTryCatch(NID_APP, pPackageAppInfo, , E_OUT_OF_MEMORY, "PackageAppInfo is null.");
+
+ _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
+ pPackageAppInfoImpl->Construct(pPackageAppInfo->GetAppId());
+
+ pList->Add(pPackageAppInfo.release());
+ }
+ else
+ {
+ AppLog("AppId [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer());
+ }
+ }
+ }
}
CATCH:
pkgmgrinfo_appinfo_filter_destroy(handle);
}
+ if (metaHandle)
+ {
+ pkgmgrinfo_appinfo_metadata_filter_destroy(metaHandle);
+ }
return pList;
}
return 0;
}
+int
+_PackageManagerImpl::PackageAppInfoMetadataHandler(const pkgmgrinfo_appinfo_h handle, void* pUserData)
+{
+ SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null.");
+ SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null.");
+
+ result r = E_SUCCESS;
+ int res = PMINFO_R_OK;
+ char* pAppId = null;
+ ArrayList* pList = (ArrayList*)pUserData;
+
+ res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId);
+ SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appid is failed. [%d]", res);
+
+ std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
+ SysTryReturn(NID_APP, pPackageAppInfo, 0, E_OUT_OF_MEMORY, "pPackageAppInfo instance must not be null.");
+
+ _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
+ r = pPackageAppInfoImpl->Construct(pAppId);
+ SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pAppId);
+
+ pList->Add(*pPackageAppInfo.release());
+
+ return 0;
+}
+
_PackageManagerImpl*
_PackageManagerImpl::GetInstance(void)
{