Commit e475c8f3 authored by Leo Zhang's avatar Leo Zhang Committed by Commit Bot

Enable "Offer to translate" for each language item.

Add native read/write functions for language's blocked state. Once the
user selects the enabled menu item, it will toggle the state.

Demo link:
https://googleo.users.x20web.corp.google.com/screenrecord/lang-settings-toggle.mp4

Bug: 783049
Change-Id: I3b144d1b0c23705931b480dc9a869a0efe0dae00
Reviewed-on: https://chromium-review.googlesource.com/848753Reviewed-by: default avatarTed Choc (back but slow, ping me) <tedchoc@chromium.org>
Commit-Queue: Leo Zhang <googleo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#526879}
parent 56459656
......@@ -958,6 +958,24 @@ public final class PrefServiceBridge {
nativeMoveAcceptLanguage(languageCode, offset);
}
/**
* @param languageCode A valid language code to check.
* @return Whether the given language is blocked by the user.
*/
public boolean isBlockedLanguage(String languageCode) {
return nativeIsBlockedLanguage(languageCode);
}
/**
* Sets the blocked state of a given language.
*
* @param languageCode A valid language code to change.
* @param blocked Whether to set language blocked.
*/
public void setLanguageBlockedState(String languageCode, boolean blocked) {
nativeSetLanguageBlockedState(languageCode, blocked);
}
private native boolean nativeIsContentSettingEnabled(int contentSettingType);
private native boolean nativeIsContentSettingManaged(int contentSettingType);
private native void nativeSetContentSettingEnabled(int contentSettingType, boolean allow);
......@@ -1146,6 +1164,8 @@ public final class PrefServiceBridge {
private native void nativeGetUserAcceptLanguages(List<String> list);
private native void nativeUpdateUserAcceptLanguages(String language, boolean add);
private native void nativeMoveAcceptLanguage(String language, int offset);
private native boolean nativeIsBlockedLanguage(String language);
private native void nativeSetLanguageBlockedState(String language, boolean blocked);
private native String nativeGetDownloadDefaultDirectory();
private native void nativeSetDownloadDefaultDirectory(String directory);
}
......@@ -49,8 +49,14 @@ public class LanguageListPreference extends Preference {
ArrayList<Item> menuItems = new ArrayList<>();
// Show "Offer to translate" option if "Chrome Translate" is enabled.
if (PrefServiceBridge.getInstance().isTranslateEnabled()) {
// Set this row checked if the language is unblocked.
int endIconResId =
PrefServiceBridge.getInstance().isBlockedLanguage(info.getCode())
? 0
: R.drawable.ic_check_googblue_24dp;
// Add checked icon at the end.
menuItems.add(new Item(mContext,
R.string.languages_item_option_offer_to_translate,
R.string.languages_item_option_offer_to_translate, endIconResId,
info.isSupported()));
}
......@@ -64,7 +70,10 @@ public class LanguageListPreference extends Preference {
@Override
public void onItemSelected(Item item) {
if (item.getTextId() == R.string.languages_item_option_offer_to_translate) {
// TODO(crbug/783049): Handle "offer to translate" event.
// Toggle current blocked state of this language.
boolean state = (item.getEndIconId() == 0);
PrefServiceBridge.getInstance().setLanguageBlockedState(
info.getCode(), !state);
} else if (item.getTextId() == R.string.remove) {
LanguagesManager.getInstance().removeFromAcceptLanguages(info.getCode());
}
......
......@@ -50,6 +50,7 @@
#include "components/strings/grit/components_locale_settings.h"
#include "components/translate/core/browser/translate_pref_names.h"
#include "components/translate/core/browser/translate_prefs.h"
#include "components/translate/core/common/translate_util.h"
#include "components/version_info/version_info.h"
#include "components/web_resource/web_resource_pref_names.h"
#include "content/public/browser/browser_thread.h"
......@@ -1223,6 +1224,35 @@ static void JNI_PrefServiceBridge_MoveAcceptLanguage(
}
}
static jboolean JNI_PrefServiceBridge_IsBlockedLanguage(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& language) {
std::unique_ptr<translate::TranslatePrefs> translate_prefs =
ChromeTranslateClient::CreateTranslatePrefs(GetPrefService());
std::string language_code(ConvertJavaStringToUTF8(env, language));
translate::ToTranslateLanguageSynonym(&language_code);
return translate_prefs->IsBlockedLanguage(language_code);
}
static void JNI_PrefServiceBridge_SetLanguageBlockedState(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& language,
jboolean blocked) {
std::unique_ptr<translate::TranslatePrefs> translate_prefs =
ChromeTranslateClient::CreateTranslatePrefs(GetPrefService());
std::string language_code(ConvertJavaStringToUTF8(env, language));
if (blocked) {
translate_prefs->BlockLanguage(language_code);
} else {
translate_prefs->UnblockLanguage(language_code);
}
}
static ScopedJavaLocalRef<jstring>
JNI_PrefServiceBridge_GetDownloadDefaultDirectory(
JNIEnv* env,
......
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