2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 * @file FAppPkg_PackageParser.cpp
18 * @brief This is the implementation for the _PackageParser class.
21 #include <libxml/parserInternals.h>
22 #include <system_info.h>
24 #include <FAppPkgPackageAppInfo.h>
25 #include <FBaseSysLog.h>
27 #include <FIoDirectory.h>
28 #include <FAppPkg_PackageAppInfoImpl.h>
29 #include <FAppPkg_PackageInfoImpl.h>
30 #include <FAppPkg_PackageParser.h>
31 #include <FBase_StringConverter.h>
33 using namespace Tizen::Base;
34 using namespace Tizen::Base::Collection;
35 using namespace Tizen::Base::Utility;
36 using namespace Tizen::App;
37 using namespace Tizen::Io;
38 using namespace Tizen::System;
40 namespace Tizen { namespace App { namespace Package
43 _PackageXmlAttribute::_PackageXmlAttribute(void)
50 _PackageXmlAttribute::~_PackageXmlAttribute(void)
58 _PackageXmlAttribute::Construct(const char* pName, const char* pValue)
60 if (pName == 0 || pValue == 0)
65 __pName = new (std::nothrow) char[strlen(pName)+1];
66 SysTryReturn(NID_APP, __pName, false, E_OUT_OF_MEMORY, "__pName is null");
67 strcpy(__pName, pName);
69 __pValue = new (std::nothrow) char[strlen(pValue)+1];
70 SysTryReturn(NID_APP, __pValue, false, E_OUT_OF_MEMORY, "__pValue is null");
71 strcpy(__pValue, pValue);
77 _PackageXmlAttribute::Find(const char* pName)
84 if (__pName == 0 || __pValue == 0)
89 if (strcasecmp(pName, __pName) == 0)
96 return __pNext->Find(pName);
103 _PackageXmlAttribute::Add(const char* pName, const char* pValue)
105 if (pName == 0 || pValue == 0)
112 _PackageXmlAttribute* pNext = __pNext;
113 while (pNext->__pNext)
115 pNext = pNext->__pNext;
118 return pNext->Add(pName, pValue);
122 __pNext = new (std::nothrow) _PackageXmlAttribute();
123 SysTryReturn(NID_APP, __pNext, false, E_OUT_OF_MEMORY, "__pNext is null");
125 __pNext->Construct(pName, pValue);
132 _PackageXmlHandler::_PackageXmlHandler(void)
134 ,__pElementName(null)
140 _PackageXmlHandler::~_PackageXmlHandler(void)
145 delete[] __pElementName;
146 __pElementName = null;
150 _PackageXmlHandler::OnStartDocument(void)
156 _PackageXmlHandler::OnEndDocument(void)
162 _PackageXmlHandler::OnStartElement(const char* pName)
168 _PackageXmlHandler::OnEndElement(const char* pName)
174 _PackageXmlHandler::OnCharacters(const char* pCharacters)
180 _PackageXmlHandler::StartElement(void* pCtx, const xmlChar* pName, const xmlChar** ppAtts)
187 _PackageXmlHandler* pHandler = null;
188 pHandler = (_PackageXmlHandler*) pCtx;
189 bool xmlResult = false;
191 pHandler->SetElementName((const char *) pName);
195 _PackageXmlAttribute* pAttr = 0;
197 if (ppAtts[0] != null && ppAtts[1] != null)
199 pAttr = new (std::nothrow) _PackageXmlAttribute();
200 SysTryReturnVoidResult(NID_APP, pAttr, E_OUT_OF_MEMORY, "pAttr is null.");
202 pAttr->Construct((const char *)ppAtts[0], (const char *)ppAtts[1]);
206 while (ppAtts != null && ppAtts[0] != null && ppAtts[1] != null)
208 pAttr->Add((const char *)ppAtts[0], (const char *)ppAtts[1]);
212 pHandler->SetAttribute(pAttr);
215 xmlResult = pHandler->OnStartElement((const char *)pName);
216 if (xmlResult == false)
218 pHandler->SetError();
223 _PackageXmlHandler::EndElement(void* pCtx, const xmlChar* pName)
225 _PackageXmlHandler* pHandler = null;
226 pHandler = (_PackageXmlHandler*) pCtx;
227 bool xmlResult = false;
228 char* pCharacters = pHandler->GetCharacters();
230 if (pCharacters && (strlen(pCharacters) > 0))
232 xmlResult = pHandler->OnCharacters(pCharacters);
233 if (xmlResult == false)
235 pHandler->SetError();
239 xmlResult = pHandler->OnEndElement((const char *)pName);
240 if (xmlResult == false)
242 pHandler->SetError();
245 pHandler->DeleteElement();
246 pHandler->DeleteAttribute();
247 pHandler->DeleteCharacters();
251 _PackageXmlHandler::Characters(void* pCtx, const xmlChar* pCh, int len)
253 SysTryReturnVoidResult(NID_APP, pCh, E_SYSTEM, "pCh is null.");
255 _PackageXmlHandler* pHandler = null;
256 pHandler = (_PackageXmlHandler*) pCtx;
257 char* pCharacters = null;
259 if (pCh[0] == 0x20 || pCh[0] == 0x09 || pCh[0] == 0x0D || pCh[0] == 0x0A)
264 pCharacters = new (std::nothrow) char[len+1];
265 SysTryReturnVoidResult(NID_APP, pCharacters, E_OUT_OF_MEMORY, "pCharacters is null.");
267 strncpy(pCharacters, (const char *)pCh, len);
268 pCharacters[len] = 0;
270 pHandler->SetCharacters(pCharacters);
272 delete[] pCharacters;
276 _PackageXmlHandler::ParseNormalizedDocument(const char* pFilepath)
278 xmlSAXHandler* pSAXHandler = null;
279 xmlParserCtxtPtr ctxt = 0;
283 result r = E_SUCCESS;
285 char* pNormalizedBuf = null;
287 int normalizedSize = 0;
290 r = file.Construct(pFilepath, L"r");
291 TryCatch(r == E_SUCCESS, ret = false, "file.Construct is failed. [%s]", pFilepath);
293 r = file.GetAttributes(pFilepath, attr);
294 TryCatch(IsFailed(r) == false, ret = false, "file.GetAttributes is failed. [%s]", pFilepath);
296 size = (int)attr.GetFileSize();
297 TryCatch(size > 0, ret = false, "size is invalid. [%s]", pFilepath);
299 pBuf = new (std::nothrow) char[size+1];
300 TryCatch(pBuf, ret = false, "pBuf is null");
302 pNormalizedBuf = new (std::nothrow) char[size+1];
303 TryCatch(pNormalizedBuf, ret = false, "pNormalizedBuf is null");
305 memset(pBuf, 0, size+1);
306 memset(pNormalizedBuf, 0, size+1);
308 readSize = file.Read(pBuf, size);
309 TryCatch(readSize > 0, ret = false, "file.Read is failed. [%s][%d]", pFilepath, readSize);
311 normalizedSize = Normalize(pBuf, size, pNormalizedBuf);
312 TryCatch(normalizedSize > 0, ret = false, "normalizedSize [%d]", readSize);
314 ctxt = xmlCreateMemoryParserCtxt(pNormalizedBuf, normalizedSize);
315 TryCatch(ctxt, ret = false, "invalid xml file, %s", pFilepath);
317 pSAXHandler = new (std::nothrow) xmlSAXHandler;
318 TryCatch(pSAXHandler, ret = false, "pSAXHandler is null");
319 memset(pSAXHandler, 0, sizeof(xmlSAXHandler));
321 ctxt->userData = (void *)this;
323 pSAXHandler->startElement = _PackageXmlHandler::StartElement;
324 pSAXHandler->endElement = _PackageXmlHandler::EndElement;
325 pSAXHandler->characters = _PackageXmlHandler::Characters;
327 ctxt->sax = pSAXHandler;
329 xmlParseDocument(ctxt);
330 xmlFreeParserCtxt(ctxt);
332 TryCatch(GetError() != true, ret = false, "xml parsing error is occurred.");
336 delete[] pNormalizedBuf;
342 _PackageXmlHandler::Normalize(const char* pBuf, int size, char* pNormalizedBuf)
345 int normalizedIdx = 0;
347 while (pBuf[idx] && idx < size)
349 if (pBuf[idx] == 0x0D)
351 if (pBuf[idx + 1] == 0x0A)
355 pNormalizedBuf[normalizedIdx] = 0x0A;
358 else if((pBuf[idx] == 0X0A) && (pBuf[idx + 1] == 0x4d) && (pBuf[idx - 1] == 0x3E))
361 pNormalizedBuf[normalizedIdx] = pBuf[idx];
366 pNormalizedBuf[normalizedIdx] = pBuf[idx];
373 return normalizedIdx;
377 _PackageXmlHandler::SetElementName(const char* pElementName)
379 SysTryReturn(NID_APP, pElementName, false, E_SYSTEM, "pElementName is null");
383 delete[] __pElementName;
384 __pElementName = null;
387 __pElementName = new (std::nothrow) char[strlen(pElementName)+1];
388 SysTryReturn(NID_APP, __pElementName, false, E_OUT_OF_MEMORY, "__pElementName is null");
389 strcpy(__pElementName, pElementName);
391 __elementStack.Push(*new (std::nothrow) String(pElementName));
397 _PackageXmlHandler::GetElementName(void)
399 return __pElementName;
403 _PackageXmlHandler::DeleteElement(void)
405 delete[]__pElementName;
408 __elementStack.Pop();
412 _PackageXmlHandler::SetCharacters(const char* pCharacter)
414 SysTryReturn(NID_APP, pCharacter, false, E_SYSTEM, "pCharacter is null");
416 if (__pCharacters == null)
418 __pCharacters = new (std::nothrow) char[4096];
419 SysTryReturn(NID_APP, __pCharacters, false, E_OUT_OF_MEMORY, "__pCharacters is null");
421 memset(__pCharacters, 0, 4096);
424 strncat(__pCharacters, pCharacter, strlen(pCharacter));
430 _PackageXmlHandler::GetCharacters(void)
432 return __pCharacters;
436 _PackageXmlHandler::DeleteCharacters(void)
438 delete[] __pCharacters;
439 __pCharacters = null;
443 _PackageXmlHandler::SetAttribute(_PackageXmlAttribute* pAttr)
448 _PackageXmlAttribute*
449 _PackageXmlHandler::GetAttribute(void)
455 _PackageXmlHandler::DeleteAttribute(void)
462 _PackageXmlHandler::GetElementEnumeratorN(void)
464 return __elementStack.GetEnumeratorN();
468 _PackageXmlHandler::GetElementCount(void)
470 return __elementStack.GetCount();
474 _PackageXmlHandler::SetError(void)
480 _PackageXmlHandler::GetError(void)
486 _PackageParser::_PackageParser(void)
487 :__pPackageInfoImpl(null)
489 ,__pDefaultIconType(null)
490 ,__isDefaultName(false)
494 _PackageParser::~_PackageParser(void)
496 delete[] __pDefaultIconType;
497 __pDefaultIconType = null;
501 _PackageParser::Construct(PackageInfo* pPackageInfo)
503 SysTryReturn(NID_APP, pPackageInfo, false, E_INVALID_ARG, "pPackageInfo is null.");
505 _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo);
506 SysTryReturn(NID_APP, pPackageInfoImpl, false, E_SYSTEM, "pPackageInfoImpl is null.");
508 __pPackageInfoImpl = pPackageInfoImpl;
513 _PackageParser::Parse(const String& packagepath)
515 __packagePath = packagepath;
518 FileUnzipper unzipper;
520 Directory::Remove("/tmp/__manifest/", true);
521 Directory::Create("/tmp/__manifest/", false);
523 result r = unzipper.Construct(packagepath);
524 SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "unzipper.Construct() failed.");
526 r = unzipper.UnzipTo(L"/tmp/__manifest", L"info/manifest.xml");
527 SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "unzipper.UnzipTo() failed.");
529 res = ParseNormalizedDocument("/tmp/__manifest/info/manifest.xml");
531 Directory::Remove("/tmp/__manifest/", true);
537 _PackageParser::OnStartElement(const char* pName)
539 SysTryReturn(NID_APP, pName, true, E_SYSTEM, "pName is null.");
543 if (strcasecmp(pName, "UiApp") == 0)
545 status = OnUiAppStartElement();
547 else if (strcasecmp(pName, "ServiceApp") == 0)
549 status = OnServiceAppStartElement();
551 else if (strcasecmp(pName, "Icons") == 0)
553 status = OnIconsStartElement();
565 _PackageParser::OnEndElement(const char* pName)
567 SysTryReturn(NID_APP, pName, true, E_SYSTEM, "pName is null.");
571 if (strcasecmp(pName, "UiApp") == 0)
573 status = OnUiAppEndElement();
575 else if (strcasecmp(pName, "ServiceApp") == 0)
577 status = OnServiceAppEndElement();
579 else if (strcasecmp(pName, "DisplayNames") == 0)
581 status = OnDisplayNamesEndElement();
593 _PackageParser::OnCharacters(const char* pCharacters)
597 char* pName = GetElementName();
598 SysTryReturn(NID_APP, pName, false, E_SYSTEM, "pName is null.");
600 if (strcasecmp(pName, "Id") == 0)
602 status = OnIdValue(pCharacters);
604 else if (strcasecmp(pName, "Version") == 0)
606 status = OnVersionValue(pCharacters);
608 else if (strcasecmp(pName, "Url") == 0)
610 status = OnUrlValue(pCharacters);
612 else if (strcasecmp(pName, "Privilege") == 0)
614 status = OnPrivilegeValue(pCharacters);
616 else if (strcasecmp(pName, "DisplayName") == 0)
618 status = OnDisplayNameValue(pCharacters);
620 else if (strcasecmp(pName, "Author") == 0)
622 status = OnAuthorValue(pCharacters);
624 else if (strcasecmp(pName, "Description") == 0)
626 status = OnDescriptionValue(pCharacters);
628 else if (strcasecmp(pName, "Icon") == 0)
630 status = OnIconValue(pCharacters);
632 else if (strcasecmp(pName, "Category") == 0)
634 status = OnCategoryValue(pCharacters);
646 _PackageParser::OnUiAppStartElement(void)
648 __pAppInfo = new (std::nothrow) PackageAppInfo;
649 SysTryReturn(NID_APP, __pAppInfo, false, E_OUT_OF_MEMORY, "__pAppInfo is null.");
651 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(__pAppInfo);
652 SysTryReturn(NID_APP, pPackageAppInfoImpl, false, E_SYSTEM, "pPackageAppInfoImpl is null.");
654 _PackageXmlAttribute* pAttr = GetAttribute();
655 SysTryReturn(NID_APP, pAttr, true, E_SYSTEM, "pAttr is null");
657 ParseAppAttribute(pAttr, true);
663 _PackageParser::OnServiceAppStartElement(void)
665 __pAppInfo = new (std::nothrow) PackageAppInfo;
666 SysTryReturn(NID_APP, __pAppInfo, false, E_OUT_OF_MEMORY, "__pAppInfo is null.");
668 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(__pAppInfo);
669 SysTryReturn(NID_APP, pPackageAppInfoImpl, false, E_SYSTEM, "pPackageAppInfoImpl is null.");
671 _PackageXmlAttribute* pAttr = GetAttribute();
672 SysTryReturn(NID_APP, pAttr, true, E_SYSTEM, "pAttr is null");
674 ParseAppAttribute(pAttr, false);
680 _PackageParser::OnIconsStartElement(void)
684 String defaultIconType;
686 res = system_info_get_value_int(SYSTEM_INFO_KEY_SCREEN_WIDTH, &width);
687 if (res != SYSTEM_INFO_ERROR_NONE)
689 SysLog(NID_APP, "system_info_get_value_int(SYSTEM_INFO_KEY_SCREEN_WIDTH) failed. res = [%d]", res);
690 defaultIconType = L"Xhigh";
696 defaultIconType = L"High";
700 defaultIconType = L"Xhigh";
704 __pDefaultIconType = _StringConverter::CopyToCharArrayN(defaultIconType);
705 SysTryReturn(NID_APP, __pDefaultIconType, false, E_OUT_OF_MEMORY, "__pDefaultIconType is null.");
707 SysLog(NID_APP, "ScreenWidth = [%d], DefaultIconType = [%s]", width, __pDefaultIconType);
713 _PackageParser::OnUiAppEndElement(void)
715 __pPackageInfoImpl->AddPackageAppInfo(*__pAppInfo);
718 __isDefaultName = false;
724 _PackageParser::OnServiceAppEndElement(void)
726 __pPackageInfoImpl->AddPackageAppInfo(*__pAppInfo);
729 __isDefaultName = false;
735 _PackageParser::OnDisplayNamesEndElement(void)
743 _PackageParser::OnIdValue(const char* pCharacters)
745 SysLog(NID_APP, "Id = [%s]", pCharacters);
746 __pPackageInfoImpl->SetId(pCharacters);
752 _PackageParser::OnVersionValue(const char* pCharacters)
754 SysLog(NID_APP, "Version = [%s]", pCharacters);
755 __pPackageInfoImpl->SetVersion(pCharacters);
761 _PackageParser::OnAuthorValue(const char* pCharacters)
763 SysLog(NID_APP, "Author = [%s]", pCharacters);
764 __pPackageInfoImpl->SetAuthor(pCharacters);
770 _PackageParser::OnUrlValue(const char* pCharacters)
772 SysLog(NID_APP, "Url = [%s]", pCharacters);
773 __pPackageInfoImpl->SetUrl(pCharacters);
779 _PackageParser::OnPrivilegeValue(const char* pCharacters)
781 SysLog(NID_APP, "Privilege = [%s]", pCharacters);
782 __pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(pCharacters));
788 _PackageParser::OnIconValue(const char* pCharacters)
790 SysTryReturn(NID_APP, __pDefaultIconType, false, E_SYSTEM, "__pDefaultIconType is null");
792 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(__pAppInfo);
793 SysTryReturn(NID_APP, pPackageAppInfoImpl, false, E_SYSTEM, "pPackageAppInfoImpl is null.");
795 _PackageXmlAttribute* pAttr = GetAttribute();
796 SysTryReturn(NID_APP, pAttr, true, E_SYSTEM, "pAttr is null");
798 char* pSection = pAttr->Find("Section");
799 SysTryReturn(NID_APP, pSection, true, E_SYSTEM, "pSection is null");
804 if (strcasecmp(__pDefaultIconType, "Xhigh") == 0)
806 iconRelPath.Format(1024, L"shared/res/screen-density-xhigh/%s", pCharacters);
808 else if (strcasecmp(__pDefaultIconType, "High") == 0)
810 iconRelPath.Format(1024, L"shared/res/screen-density-high/%s", pCharacters);
814 SysTryReturn(NID_APP, 0, false, E_SYSTEM, "Invalid __pDefaultIconType [%s]", __pDefaultIconType);
817 if (strcasecmp(pSection, "MainMenu") == 0)
819 FileUnzipper unzipper;
820 String tmp(L"/tmp/__icon/");
821 Directory::Remove(tmp, true);
822 Directory::Create(tmp, false);
824 result r = unzipper.Construct(__packagePath);
825 SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "unzipper.Construct() failed.");
827 r = unzipper.UnzipTo(tmp, iconRelPath);
830 tempIconPath = tmp + iconRelPath;
831 pPackageAppInfoImpl->SetAppTempIconPath(tempIconPath);
835 SysLog(NID_APP, "UnzipTo() is failed.");
839 SysLog(NID_APP, "Section = [%s], Icon = [%ls], TempIcon = [%ls]", pSection, iconRelPath.GetPointer(), tempIconPath.GetPointer());
845 _PackageParser::OnDisplayNameValue(const char* pCharacters)
847 _PackageXmlAttribute* pAttr = 0;
848 char* pAttrValue = 0;
850 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(__pAppInfo);
851 SysTryReturn(NID_APP, pPackageAppInfoImpl, false, E_SYSTEM, "pPackageAppInfoImpl is null.");
853 pAttr = GetAttribute();
854 SysTryReturn(NID_APP, pAttr, true, E_SYSTEM, "pAttr is null");
856 pAttrValue = pAttr->Find("Locale");
857 SysTryReturn(NID_APP, pAttrValue, true, E_SYSTEM, "pAttrValue is null");
859 if (strcasecmp(pAttrValue, "eng-GB") == 0 || strcasecmp(pAttrValue, "eng-US") == 0)
861 pPackageAppInfoImpl->SetAppDisplayName(pCharacters);
863 if (__isDefaultName == true)
865 __pPackageInfoImpl->SetDisplayName(pCharacters);
869 String* pValue = new (std::nothrow) String;
870 StringUtil::Utf8ToString(pCharacters, *pValue);
872 pPackageAppInfoImpl->AddName(*(new (std::nothrow) String(pAttrValue)), *pValue);
874 SysLog(NID_APP, "DisplayName Locale = [%s][%s]", pAttrValue, pCharacters);
880 _PackageParser::OnDescriptionValue(const char* pCharacters)
882 _PackageXmlAttribute *pAttr = 0;
883 char *pAttrValue = 0;
885 pAttr = GetAttribute();
886 SysTryReturn(NID_APP, pAttr, true, E_SYSTEM, "pAttr is null");
888 pAttrValue = pAttr->Find("Locale");
889 SysTryReturn(NID_APP, pAttrValue, true, E_SYSTEM, "pAttrValue is null");
891 if (strcasecmp(pAttrValue, "eng-GB") == 0 || strcasecmp(pAttrValue, "eng-US") == 0)
893 __pPackageInfoImpl->SetDescription(pCharacters);
896 SysLog(NID_APP, "Description Locale =[%s][%s]", pAttrValue, pCharacters);
902 _PackageParser::OnCategoryValue(const char* pCharacters)
904 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(__pAppInfo);
905 SysTryReturn(NID_APP, pPackageAppInfoImpl, false, E_SYSTEM, "pPackageAppInfoImpl is null.");
907 pPackageAppInfoImpl->AddCategory(new (std::nothrow) String(pCharacters));
909 SysLog(NID_APP, "Category = [%s]", pCharacters);
915 _PackageParser::ParseAppAttribute(_PackageXmlAttribute* pAttr, bool isUiApp)
917 _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(__pAppInfo);
918 SysTryReturn(NID_APP, pPackageAppInfoImpl, false, E_SYSTEM, "pPackageAppInfoImpl is null.");
920 char* pName = pAttr->Find("Name");
921 SysTryReturn(NID_APP, pName, true, E_SYSTEM, "pName is null");
923 SysLog(NID_APP, "Name = [%s]", pName);
924 pPackageAppInfoImpl->SetAppName(pName);
926 AppId appId = __pPackageInfoImpl->GetId() + L"." + pName;
927 pPackageAppInfoImpl->SetAppId(appId);
929 char* pMain = pAttr->Find("Main");
932 SysLog(NID_APP, "Main = [%s]", pMain);
933 if (strcasecmp(pMain, "True") == 0)
935 __isDefaultName = true;
936 __pPackageInfoImpl->SetMainAppId(appId);
937 pPackageAppInfoImpl->SetMainApp(true);
943 char* pMenuIconVisible = pAttr->Find("MenuIconVisible");
944 if (pMenuIconVisible)
946 if (strcasecmp(pMenuIconVisible, "True") == 0)
948 pPackageAppInfoImpl->SetMenuIconVisible(true);
952 pPackageAppInfoImpl->SetMenuIconVisible(false);
955 SysLog(NID_APP, "MenuIconVisible = [%s]", pMenuIconVisible);
960 pPackageAppInfoImpl->SetMenuIconVisible(false);
966 } } } // Tizen::App::Package