Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Merge][AppLanguagePrompt] Add flag to not show prompt if ULP match
This CL adds a flag that does not show the AppLanguagePrompt if the Chrome UI base language matches they top ULP base language. The AppLanguagePrompt must be enabled for this flag to take effect. If the UI language and top ULP language do not match or there are no ULP languages then the previous behavior is used to determine if the prompt should be shown. This CL introduces the Language Bridge native code to pass the ULP languages back to Java from the ULPLanguageModel. This required moving JavaLanguageBridgeGetULPLanguagesWrapper from language_model_manager_factory.cc to language_bridged.cc so the JNI file was only imported in once location. Note: this was not a clean cherry-pick. https://crrev.com/c/3601371 conflicted with this CL. See the the diff from PS1 -> PS2 for what was edited. The diff of base -> PS2 is correct. (cherry picked from commit cf57677) Bug: 1315618 Change-Id: Ie2d29e8daa8b193fd9b5bfb572d61184ca79ad8c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3600929 Reviewed-by: Josh Simmons <jds@google.com> Commit-Queue: Trevor Perrier <perrier@chromium.org> Cr-Original-Commit-Position: refs/heads/main@{#995390} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3605849 Cr-Commit-Position: refs/branch-heads/5005@{#149} Cr-Branched-From: 5b4d945-refs/heads/main@{#992738}
- Loading branch information
Trevor Perrier
authored and
Chromium LUCI CQ
committed
Apr 25, 2022
1 parent
f84d145
commit ee38cd4
Showing
13 changed files
with
224 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
29 changes: 29 additions & 0 deletions
29
...language/android/java/src/org/chromium/chrome/browser/language/FakeLanguageBridgeJni.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
// Copyright 2022 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
package org.chromium.chrome.browser.language; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.LinkedHashSet; | ||
|
||
/** | ||
* Fake implementation of LanguageBridge native methods used for testing. | ||
*/ | ||
public class FakeLanguageBridgeJni implements LanguageBridge.Natives { | ||
private ArrayList<String> mULPLanguages; | ||
|
||
public FakeLanguageBridgeJni() { | ||
mULPLanguages = new ArrayList<String>(); | ||
} | ||
|
||
public void setULPLanguages(String[] languageCodes) { | ||
mULPLanguages = new ArrayList<>(Arrays.asList(languageCodes)); | ||
} | ||
|
||
@Override | ||
public void getULPModelLanguages(LinkedHashSet<String> set) { | ||
set.addAll(mULPLanguages); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
...er/language/android/java/src/org/chromium/chrome/browser/language/LanguageBridgeTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// Copyright 2022 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
package org.chromium.chrome.browser.language; | ||
|
||
import androidx.test.filters.SmallTest; | ||
|
||
import org.junit.Assert; | ||
import org.junit.Before; | ||
import org.junit.Rule; | ||
import org.junit.Test; | ||
import org.junit.runner.RunWith; | ||
import org.mockito.MockitoAnnotations; | ||
|
||
import org.chromium.base.test.util.CommandLineFlags; | ||
import org.chromium.base.test.util.JniMocker; | ||
import org.chromium.chrome.browser.flags.ChromeSwitches; | ||
// import org.chromium.browser.language.FakeLanguageBridgeJni; | ||
// import org.chromium.browser.language.LanguageBridge; | ||
// import org.chromium.browser.language.LanguageBridgeJni; | ||
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; | ||
|
||
/** | ||
* Tests for {@link LanguageBridge} which gets language lists from native | ||
*/ | ||
@RunWith(ChromeJUnit4ClassRunner.class) | ||
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) | ||
public class LanguageBridgeTest { | ||
@Rule | ||
public JniMocker mJniMocker = new JniMocker(); | ||
|
||
private FakeLanguageBridgeJni mFakeLanguageBridge; | ||
|
||
@Before | ||
public void setUp() throws Exception { | ||
MockitoAnnotations.initMocks(this); | ||
// Setup fake language bridge JNI interface | ||
mFakeLanguageBridge = new FakeLanguageBridgeJni(); | ||
String[] ulpLanguages = {"pt-BR", "en-US"}; | ||
mFakeLanguageBridge.setULPLanguages(ulpLanguages); | ||
mJniMocker.mock(LanguageBridgeJni.TEST_HOOKS, mFakeLanguageBridge); | ||
} | ||
|
||
@Test | ||
@SmallTest | ||
public void testIsTopULPBaseLanguage() { | ||
Assert.assertTrue(LanguageBridge.isTopULPBaseLanguage("pt")); | ||
Assert.assertTrue(LanguageBridge.isTopULPBaseLanguage("pt-PT")); | ||
Assert.assertTrue(LanguageBridge.isTopULPBaseLanguage("pt-BR")); | ||
Assert.assertFalse(LanguageBridge.isTopULPBaseLanguage("en")); | ||
Assert.assertFalse(LanguageBridge.isTopULPBaseLanguage("en-US")); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
// Copyright 2022 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "chrome/browser/language/android/language_bridge.h" | ||
|
||
#include "base/android/jni_array.h" | ||
#include "base/android/jni_string.h" | ||
#include "chrome/browser/language/android/jni_headers/LanguageBridge_jni.h" | ||
#include "chrome/browser/language/language_model_manager_factory.h" | ||
#include "chrome/browser/profiles/profile.h" | ||
#include "chrome/browser/profiles/profile_manager.h" | ||
#include "components/language/core/browser/language_model.h" | ||
#include "components/language/core/browser/language_model_manager.h" | ||
|
||
namespace language { | ||
std::vector<std::string> LanguageBridge::GetULPLanguages( | ||
std::string account_name) { | ||
JNIEnv* env = base::android::AttachCurrentThread(); | ||
base::android::ScopedJavaLocalRef<jstring> account_name_java = | ||
base::android::ConvertUTF8ToJavaString(env, account_name); | ||
base::android::ScopedJavaLocalRef<jobjectArray> languages_java = | ||
Java_LanguageBridge_getULPLanguages(env, account_name_java); | ||
|
||
const int num_langs = (*env).GetArrayLength(languages_java.obj()); | ||
std::vector<std::string> languages; | ||
for (int i = 0; i < num_langs; i++) { | ||
jstring language_name_java = | ||
(jstring)(*env).GetObjectArrayElement(languages_java.obj(), i); | ||
languages.emplace_back( | ||
base::android::ConvertJavaStringToUTF8(env, language_name_java)); | ||
} | ||
|
||
return languages; | ||
} | ||
} // namespace language | ||
|
||
static void JNI_LanguageBridge_GetULPModelLanguages( | ||
JNIEnv* env, | ||
const base::android::JavaParamRef<jobject>& set) { | ||
Profile* profile = ProfileManager::GetActiveUserProfile(); | ||
language::LanguageModel* language_model = | ||
LanguageModelManagerFactory::GetForBrowserContext(profile) | ||
->GetLanguageModel(language::LanguageModelManager::ModelType::ULP); | ||
if (!language_model) | ||
return; | ||
|
||
std::vector<language::LanguageModel::LanguageDetails> languageDetails = | ||
language_model->GetLanguages(); | ||
DCHECK(!languageDetails.empty()); | ||
|
||
std::vector<std::string> languages; | ||
for (const auto& details : languageDetails) { | ||
languages.push_back(details.lang_code); | ||
} | ||
Java_LanguageBridge_copyStringArrayToCollection( | ||
env, set, base::android::ToJavaArrayOfStrings(env, languages)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// Copyright 2022 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#ifndef CHROME_BROWSER_LANGUAGE_ANDROID_LANGUAGE_BRIDGE_H_ | ||
#define CHROME_BROWSER_LANGUAGE_ANDROID_LANGUAGE_BRIDGE_H_ | ||
|
||
#include <string> | ||
#include <vector> | ||
|
||
namespace language { | ||
class LanguageBridge { | ||
public: | ||
// Makes a blocking call to get ULP languages for |account_name| | ||
static std::vector<std::string> GetULPLanguages(std::string account_name); | ||
}; | ||
|
||
} // namespace language | ||
|
||
#endif // CHROME_BROWSER_LANGUAGE_ANDROID_LANGUAGE_BRIDGE_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters