Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7155)

Unified Diff: chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc

Issue 224093013: Allow country-specific languages in UI list at OOBE. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update after review. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
diff --git a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
index eb0637d6814d79ac3892cb7471ccd5aa2024d973..9c4766f03d2f85333124cb5c8f848ca663994e9c 100644
--- a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
@@ -72,6 +72,32 @@ void AddOptgroupOtherLayouts(base::ListValue* input_methods_list) {
input_methods_list->Append(optgroup);
}
+std::string CalculateSelectedLanguage(const std::string& requested_locale,
Nikita (slow) 2014/04/07 04:54:27 nit: Add comment.
Alexander Alekseev 2014/04/07 16:56:28 Done.
+ const std::string& loaded_locale) {
+ const size_t dash_pos_requested = requested_locale.find_first_of('-');
+
+ // Requested language doesn't have specific country.
Nikita (slow) 2014/04/07 04:54:27 nit: It's better to use "region" instead of "count
Alexander Alekseev 2014/04/07 16:56:28 Done.
+ if (dash_pos_requested == std::string::npos || dash_pos_requested == 0)
+ return loaded_locale;
+
+ const size_t dash_pos_loaded = loaded_locale.find_first_of('-');
+
+ // loaded_locale doesn't have 'country' name and requested_locale
+ // is a country-specific language of loaded_locale.
+ if (dash_pos_loaded == std::string::npos || dash_pos_loaded == 0) {
+ if (requested_locale.substr(0, dash_pos_requested) == loaded_locale)
+ return requested_locale;
+ // languages differ
Nikita (slow) 2014/04/07 04:54:27 nit: Capitalize comment.
Alexander Alekseev 2014/04/07 16:56:28 Done.
+ return loaded_locale;
+ }
+ // Both locales are country-specific. Check that languages are the same.
+ if (requested_locale.substr(0, dash_pos_requested) ==
+ loaded_locale.substr(0, dash_pos_loaded))
+ return requested_locale;
+
+ return loaded_locale;
+}
+
} // namespace
namespace chromeos {
@@ -239,13 +265,25 @@ struct NetworkScreenHandlerOnLanguageChangedCallbackData {
// static
void NetworkScreenHandler::OnLanguageChangedCallback(
scoped_ptr<NetworkScreenHandlerOnLanguageChangedCallbackData> context,
- const std::string& /*requested locale*/,
- const std::string& /*loaded_locale*/,
- const bool /*success*/) {
+ const std::string& requested_locale,
+ const std::string& loaded_locale,
+ const bool success) {
if (!context or !context->handler_)
return;
NetworkScreenHandler* const self = context->handler_.get();
+
+ if (success) {
+ if (requested_locale == loaded_locale) {
+ self->selected_language_code_ = requested_locale;
+ } else {
+ self->selected_language_code_ =
+ CalculateSelectedLanguage(requested_locale, loaded_locale);
+ }
+ } else {
+ self->selected_language_code_ = loaded_locale;
+ }
+
self->ReloadLocalizedContent();
AccessibilityManager::Get()->OnLocaleChanged();
@@ -374,7 +412,6 @@ bool NetworkScreenHandler::IsDerelict() {
return time_on_oobe_ >= derelict_detection_timeout_;
}
-// static
base::ListValue* NetworkScreenHandler::GetLanguageList() {
const std::string app_locale = g_browser_process->GetApplicationLocale();
input_method::InputMethodManager* manager =
@@ -416,7 +453,13 @@ base::ListValue* NetworkScreenHandler::GetLanguageList() {
language_info->SetString("value", value);
language_info->SetString("title", display_name);
- language_info->SetBoolean("selected", value == app_locale);
+ if (selected_language_code_.empty()) {
+ if (value == app_locale)
+ language_info->SetBoolean("selected", true);
+ } else {
+ if (value == selected_language_code_)
+ language_info->SetBoolean("selected", true);
+ }
}
return languages_list;
}

Powered by Google App Engine
This is Rietveld 408576698