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 @@ ...@@ -15,6 +15,7 @@
#include "chromeos/constants/chromeos_features.h" #include "chromeos/constants/chromeos_features.h"
#include "chromeos/services/machine_learning/public/cpp/service_connection.h" #include "chromeos/services/machine_learning/public/cpp/service_connection.h"
#include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h" #include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h"
#include "ui/base/l10n/l10n_util.h"
namespace chromeos { namespace chromeos {
namespace quick_answers { namespace quick_answers {
...@@ -109,12 +110,17 @@ bool ShouldSkipDefinition(const std::string& text) { ...@@ -109,12 +110,17 @@ bool ShouldSkipDefinition(const std::string& text) {
return false; return false;
} }
bool IsPreferredLanguage(const std::string& detected_locale, bool IsPreferredLanguage(const std::string& detected_language,
const std::string& preferred_languages_string) { const std::string& preferred_languages_string) {
auto preferred_languages = auto preferred_languages =
base::SplitString(preferred_languages_string, ",", base::TRIM_WHITESPACE, base::SplitString(preferred_languages_string, ",", base::TRIM_WHITESPACE,
base::SPLIT_WANT_NONEMPTY); 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 } // namespace
...@@ -191,17 +197,17 @@ void IntentGenerator::AnnotationCallback( ...@@ -191,17 +197,17 @@ void IntentGenerator::AnnotationCallback(
void IntentGenerator::LanguageDetectorCallback( void IntentGenerator::LanguageDetectorCallback(
const QuickAnswersRequest& request, const QuickAnswersRequest& request,
base::Optional<std::string> detected_locale) { base::Optional<std::string> detected_language) {
language_detector_.reset(); language_detector_.reset();
// Generate translation intent if the detected language is different to the // Generate translation intent if the detected language is different to the
// system language and is not one of the preferred languages. // system language and is not one of the preferred languages.
if (detected_locale.has_value() && if (detected_language.has_value() &&
detected_locale.value() != request.context.device_properties.language && detected_language.value() != request.context.device_properties.language &&
!IsPreferredLanguage( !IsPreferredLanguage(
detected_locale.value(), detected_language.value(),
request.context.device_properties.preferred_languages)) { request.context.device_properties.preferred_languages)) {
MaybeGenerateTranslationIntent(request, detected_locale.value()); MaybeGenerateTranslationIntent(request, detected_language.value());
return; return;
} }
...@@ -224,7 +230,7 @@ void IntentGenerator::LanguageDetectorCallback( ...@@ -224,7 +230,7 @@ void IntentGenerator::LanguageDetectorCallback(
void IntentGenerator::MaybeGenerateTranslationIntent( void IntentGenerator::MaybeGenerateTranslationIntent(
const QuickAnswersRequest& request, const QuickAnswersRequest& request,
const std::string& detected_locale) { const std::string& detected_language) {
DCHECK(complete_callback_); DCHECK(complete_callback_);
if (!features::IsQuickAnswersTranslationEnabled()) { if (!features::IsQuickAnswersTranslationEnabled()) {
...@@ -245,7 +251,7 @@ void IntentGenerator::MaybeGenerateTranslationIntent( ...@@ -245,7 +251,7 @@ void IntentGenerator::MaybeGenerateTranslationIntent(
std::move(complete_callback_) std::move(complete_callback_)
.Run(IntentInfo(request.selected_text, IntentType::kTranslation, .Run(IntentInfo(request.selected_text, IntentType::kTranslation,
detected_locale, detected_language,
request.context.device_properties.language)); request.context.device_properties.language));
} }
......
...@@ -121,7 +121,7 @@ TEST_F(IntentGeneratorTest, TranslationIntentSameLanguage) { ...@@ -121,7 +121,7 @@ TEST_F(IntentGeneratorTest, TranslationIntentSameLanguage) {
EXPECT_EQ("quick answers", intent_info_.intent_text); EXPECT_EQ("quick answers", intent_info_.intent_text);
} }
TEST_F(IntentGeneratorTest, TranslationIntentPreferredLanguage) { TEST_F(IntentGeneratorTest, TranslationIntentPreferredLocale) {
std::vector<TextLanguagePtr> languages; std::vector<TextLanguagePtr> languages;
languages.push_back(DefaultLanguage()); languages.push_back(DefaultLanguage());
UseFakeServiceConnection({}, languages); UseFakeServiceConnection({}, languages);
...@@ -140,6 +140,25 @@ TEST_F(IntentGeneratorTest, TranslationIntentPreferredLanguage) { ...@@ -140,6 +140,25 @@ TEST_F(IntentGeneratorTest, TranslationIntentPreferredLanguage) {
EXPECT_EQ("quick answers", intent_info_.intent_text); 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) { TEST_F(IntentGeneratorTest, TranslationIntentTextLengthAboveThreshold) {
std::vector<TextLanguagePtr> languages; std::vector<TextLanguagePtr> languages;
languages.push_back(DefaultLanguage()); languages.push_back(DefaultLanguage());
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/metrics/field_trial_params.h" #include "base/metrics/field_trial_params.h"
#include "chromeos/constants/chromeos_features.h" #include "chromeos/constants/chromeos_features.h"
#include "ui/base/l10n/l10n_util.h"
namespace chromeos { namespace chromeos {
namespace quick_answers { namespace quick_answers {
...@@ -27,7 +28,7 @@ base::Optional<std::string> GetLanguageWithConfidence( ...@@ -27,7 +28,7 @@ base::Optional<std::string> GetLanguageWithConfidence(
// highest to the lowest (according to the mojom method documentation). // highest to the lowest (according to the mojom method documentation).
if (!languages.empty() && if (!languages.empty() &&
languages.front()->confidence > confidence_threshold) { languages.front()->confidence > confidence_threshold) {
return languages.front()->locale; return l10n_util::GetLanguage(languages.front()->locale);
} }
return base::nullopt; 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