Apply fallback for display name
authorDuyoung Jang <duyoung.jang@samsung.com>
Tue, 1 Oct 2013 07:24:31 +0000 (16:24 +0900)
committerDuyoung Jang <duyoung.jang@samsung.com>
Tue, 1 Oct 2013 07:27:13 +0000 (16:27 +0900)
Change-Id: I6250a9028e25677b2d2800c4356b9001ea271ee6
Signed-off-by: Duyoung Jang <duyoung.jang@samsung.com>
src/app/package/FAppPkg_PackageParser.cpp

index 8255c57..043ba99 100755 (executable)
@@ -29,6 +29,7 @@
 #include <FAppPkg_PackageInfoImpl.h>
 #include <FAppPkg_PackageParser.h>
 #include <FBase_StringConverter.h>
+#include <FSys_SettingInfoImpl.h>
 
 using namespace Tizen::App;
 using namespace Tizen::Base;
@@ -735,7 +736,74 @@ _PackageParser::OnServiceAppEndElement(void)
 bool
 _PackageParser::OnDisplayNamesEndElement(void)
 {
-       // fall-back
+       if ((FindElement("Accounts") == true) || (FindElement("AppWidgets") == true))
+       {
+               AppLog("Skip display name.");
+               return true;
+       }
+       else
+       {
+               AppLog("It's display name for UiApp, ServiceApp");
+       }
+
+       _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(__pAppInfo);
+       SysTryReturn(NID_APP, pPackageAppInfoImpl, false, E_SYSTEM, "pPackageAppInfoImpl is null.");
+
+       HashMap* pNameList = pPackageAppInfoImpl->GetNameList();
+       SysTryReturn(NID_APP, pNameList, false, E_SYSTEM, "pNameList is null.");
+
+       String locale;
+       result r = _SettingInfoImpl::GetValue(L"http://tizen.org/setting/locale.language", locale);
+       SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "GetValue(http://tizen.org/setting/locale.language) failed.");
+
+       locale.Replace(L"_", L"-");
+       SysLog(NID_APP, "system locale = [%ls]", locale.GetPointer());
+
+       if (pNameList->ContainsKey(locale) == true)
+       {
+               String* pValue = static_cast< String* > (pNameList->GetValue(locale));
+               SysTryReturn(NID_APP, pValue, false, E_SYSTEM, "pValue is null.");
+
+               pPackageAppInfoImpl->SetAppDisplayName(*pValue);
+               if (__isDefaultName == true)
+               {
+                       __pPackageInfoImpl->SetDisplayName(*pValue);
+               }
+               SysLog(NID_APP, "Exact - DisplayName = [%ls][%ls]", locale.GetPointer(), pValue->GetPointer());
+       }
+       else
+       {
+               std::unique_ptr< IList > pKeys(pNameList->GetKeysN());
+               SysTryReturn(NID_APP, pKeys, false, E_SYSTEM, "pKeys is null.");
+
+               for (int i = 0; i < pKeys->GetCount(); i++)
+               {
+                       String* pKey = dynamic_cast < String* >(pKeys->GetAt(i));
+                       if (pKey)
+                       {
+                               String language;
+                               r = pKey->SubString(0, 3, language);
+                               SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "SubString(%ls) failed.", pKey->GetPointer());
+
+                               AppLog("language = [%ls]", language.GetPointer());
+
+                               if (locale.Contains(language) == true)
+                               {
+                                       String* pValue = static_cast< String* > (pNameList->GetValue(*pKey));
+                                       SysTryReturn(NID_APP, pValue, false, E_SYSTEM, "pValue is null.");
+
+                                       pPackageAppInfoImpl->SetAppDisplayName(*pValue);
+                                       if (__isDefaultName == true)
+                                       {
+                                               __pPackageInfoImpl->SetDisplayName(*pValue);
+                                       }
+                                       SysLog(NID_APP, "Fallback - DisplayName = [%ls][%ls]", language.GetPointer(), pValue->GetPointer());
+
+                                       break;
+                               }
+                       }
+                }
+       }
 
        return true;
 }
@@ -943,7 +1011,7 @@ _PackageParser::OnDisplayNameValue(const char* pCharacters)
        pAttrValue = pAttr->Find("Locale");
        SysTryReturn(NID_APP, pAttrValue, true, E_SYSTEM, "pAttrValue is null");
 
-       if (strcasecmp(pAttrValue, "eng-GB") == 0 || strcasecmp(pAttrValue, "eng-US") == 0)
+       if (strcasecmp(pAttrValue, "eng-GB") == 0)
        {
                pPackageAppInfoImpl->SetAppDisplayName(pCharacters);