[ios] Added input language code to search params, see #601

This commit is contained in:
Alex Zolotarev 2012-02-14 18:28:46 +03:00 committed by Alex Zolotarev
parent 113dcb47c8
commit 8584d984db
5 changed files with 25 additions and 3 deletions

View file

@ -18,7 +18,7 @@ int8_t StringUtf8Multilang::GetLangIndex(string const & lang)
if (lang == gLangs[i])
return static_cast<int8_t>(i);
return -1;
return UNSUPPORTED_LANGUAGE_CODE;
}
char const * StringUtf8Multilang::GetLangByCode(int8_t langCode)

View file

@ -35,6 +35,8 @@ class StringUtf8Multilang
size_t GetNextIndex(size_t i) const;
public:
static int8_t const UNSUPPORTED_LANGUAGE_CODE = -1;
/// @return UNSUPPORTED_LANGUAGE_CODE if language is not recognized
static int8_t GetLangIndex(string const & lang);
/// @return empty string if langCode is invalid
static char const * GetLangByCode(int8_t langCode);

View file

@ -76,7 +76,7 @@ size_t CategoriesHolder::LoadFromStream(string const & buffer)
continue;
}
int8_t langCode = StringUtf8Multilang::GetLangIndex(*iter);
if (langCode == -1)
if (langCode == StringUtf8Multilang::UNSUPPORTED_LANGUAGE_CODE)
{
LOG(LWARNING, ("Invalid language code:", *iter));
continue;

View file

@ -147,6 +147,8 @@ static void OnSearchResultCallback(search::Results const & res, int queryId)
{
params.m_query = [[queryString precomposedStringWithCompatibilityMapping] UTF8String];
params.m_callback = bind(&OnSearchResultCallback, _1, g_queryId);
// Set current keyboard input mode
params.SetInputLanguage([[UITextInputMode currentInputMode].primaryLanguage UTF8String]);
bool radarEnabled = m_radarButton.selected == YES;
CLLocation * l = m_locationManager.lastLocation;

View file

@ -1,5 +1,7 @@
#pragma once
#include "../coding/multilang_utf8_string.hpp"
#include "../geometry/point2d.hpp"
#include "../std/function.hpp"
@ -16,7 +18,9 @@ namespace search
public:
enum ModeT { All, NearMe };
SearchParams() : m_mode(All), m_validPos(false) {}
SearchParams() : m_mode(All),
m_inputLanguageCode(StringUtf8Multilang::UNSUPPORTED_LANGUAGE_CODE),
m_validPos(false) {}
inline void SetNearMeMode(bool b)
{
@ -30,6 +34,17 @@ namespace search
m_validPos = true;
}
/// @param[in] language can be "fr", "en-US", "ru_RU" etc.
inline void SetInputLanguage(string const & language)
{
// @TODO take into an account zh_pinyin, ko_rm and ja_rm
size_t delimPos = language.find("-");
if (delimPos == string::npos)
delimPos = language.find("_");
m_inputLanguageCode = StringUtf8Multilang::GetLangIndex(delimPos == string::npos
? language: language.substr(0, delimPos));
}
inline bool IsNearMeMode() const
{
// this mode is valid only with correct My Position
@ -41,6 +56,9 @@ namespace search
string m_query;
ModeT m_mode;
/// Can be -1 (@see StringUtf8Multilang::UNSUPPORTED_LANGUAGE_CODE) if input
/// language is not known
int8_t m_inputLanguageCode;
double m_lat, m_lon;
bool m_validPos;