Commit 905f9929 authored by Yue Li's avatar Yue Li Committed by Chromium LUCI CQ

Quick Answers: Handle locales within same language

Bug: b/175749033
Test: Run IntentGeneratorTest in chromeos_components_unittests
Change-Id: Ied55ab686db30005aebcc77dae04037e96e6e967
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2616480
Auto-Submit: Yue Li <updowndota@chromium.org>
Commit-Queue: Yue Li <updowndota@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Reviewed-by: default avatarJeroen Dhollander <jeroendh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841765}
parent 1523ef81
......@@ -15,6 +15,7 @@
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/services/machine_learning/public/cpp/service_connection.h"
#include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h"
#include "ui/base/l10n/l10n_util.h"
namespace chromeos {
namespace quick_answers {
......@@ -109,12 +110,17 @@ bool ShouldSkipDefinition(const std::string& text) {
return false;
}
bool IsPreferredLanguage(const std::string& detected_locale,
bool IsPreferredLanguage(const std::string& detected_language,
const std::string& preferred_languages_string) {
auto preferred_languages =
base::SplitString(preferred_languages_string, ",", base::TRIM_WHITESPACE,
base::SPLIT_WANT_NONEMPTY);
return base::Contains(preferred_languages, detected_locale);
for (const std::string& locale : preferred_languages) {
if (l10n_util::GetLanguage(locale) == detected_language)
return true;
}
return false;
}
} // namespace
......@@ -191,17 +197,17 @@ void IntentGenerator::AnnotationCallback(
void IntentGenerator::LanguageDetectorCallback(
const QuickAnswersRequest& request,
base::Optional<std::string> detected_locale) {
base::Optional<std::string> detected_language) {
language_detector_.reset();
// Generate translation intent if the detected language is different to the
// system language and is not one of the preferred languages.
if (detected_locale.has_value() &&
detected_locale.value() != request.context.device_properties.language &&
if (detected_language.has_value() &&
detected_language.value() != request.context.device_properties.language &&
!IsPreferredLanguage(
detected_locale.value(),
detected_language.value(),
request.context.device_properties.preferred_languages)) {
MaybeGenerateTranslationIntent(request, detected_locale.value());
MaybeGenerateTranslationIntent(request, detected_language.value());
return;
}
......@@ -224,7 +230,7 @@ void IntentGenerator::LanguageDetectorCallback(
void IntentGenerator::MaybeGenerateTranslationIntent(
const QuickAnswersRequest& request,
const std::string& detected_locale) {
const std::string& detected_language) {
DCHECK(complete_callback_);
if (!features::IsQuickAnswersTranslationEnabled()) {
......@@ -245,7 +251,7 @@ void IntentGenerator::MaybeGenerateTranslationIntent(
std::move(complete_callback_)
.Run(IntentInfo(request.selected_text, IntentType::kTranslation,
detected_locale,
detected_language,
request.context.device_properties.language));
}
......
......@@ -121,7 +121,7 @@ TEST_F(IntentGeneratorTest, TranslationIntentSameLanguage) {
EXPECT_EQ("quick answers", intent_info_.intent_text);
}
TEST_F(IntentGeneratorTest, TranslationIntentPreferredLanguage) {
TEST_F(IntentGeneratorTest, TranslationIntentPreferredLocale) {
std::vector<TextLanguagePtr> languages;
languages.push_back(DefaultLanguage());
UseFakeServiceConnection({}, languages);
......@@ -140,6 +140,25 @@ TEST_F(IntentGeneratorTest, TranslationIntentPreferredLanguage) {
EXPECT_EQ("quick answers", intent_info_.intent_text);
}
TEST_F(IntentGeneratorTest, TranslationIntentPreferredLanguage) {
std::vector<TextLanguagePtr> languages;
languages.push_back(DefaultLanguage());
UseFakeServiceConnection({}, languages);
QuickAnswersRequest request;
request.selected_text = "quick answers";
request.context.device_properties.language = "es";
request.context.device_properties.preferred_languages = "es-MX,en-US,zh-CN";
intent_generator_->GenerateIntent(request);
task_environment_.RunUntilIdle();
// Should not generate translation intent since the detected language is in
// the preferred languages list.
EXPECT_EQ(IntentType::kUnknown, intent_info_.intent_type);
EXPECT_EQ("quick answers", intent_info_.intent_text);
}
TEST_F(IntentGeneratorTest, TranslationIntentTextLengthAboveThreshold) {
std::vector<TextLanguagePtr> languages;
languages.push_back(DefaultLanguage());
......
......@@ -7,6 +7,7 @@
#include "base/callback.h"
#include "base/metrics/field_trial_params.h"
#include "chromeos/constants/chromeos_features.h"
#include "ui/base/l10n/l10n_util.h"
namespace chromeos {
namespace quick_answers {
......@@ -27,7 +28,7 @@ base::Optional<std::string> GetLanguageWithConfidence(
// highest to the lowest (according to the mojom method documentation).
if (!languages.empty() &&
languages.front()->confidence > confidence_threshold) {
return languages.front()->locale;
return l10n_util::GetLanguage(languages.front()->locale);
}
return base::nullopt;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment