| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java
|
| index 4c5c2d1c197808bb03f3c9995a5f8d5352641d44..e2757438332e24a7e77bfb773c8586952f2b1148 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java
|
| @@ -17,28 +17,34 @@ import java.util.Map;
|
| */
|
| public class TranslateOptions {
|
| /**
|
| - * A container for Language Code and it's translated representation
|
| - * For example for Spanish when viewed from a French locale, this will contain es, Espagnol
|
| + * A container for Language Code and it's translated representation and it's native UMA
|
| + * specific hashcode.
|
| + * For example for Spanish when viewed from a French locale, this will contain es, Espagnol,
|
| + * 114573335
|
| **/
|
| - public static class TranslateLanguagePair {
|
| + public static class TranslateLanguageData {
|
| public final String mLanguageCode;
|
| public final String mLanguageRepresentation;
|
| + public final Integer mLanguageUMAHashCode;
|
|
|
| - public TranslateLanguagePair(String languageCode, String languageRepresentation) {
|
| + public TranslateLanguageData(
|
| + String languageCode, String languageRepresentation, Integer uMAhashCode) {
|
| assert languageCode != null;
|
| assert languageRepresentation != null;
|
| mLanguageCode = languageCode;
|
| mLanguageRepresentation = languageRepresentation;
|
| + mLanguageUMAHashCode = uMAhashCode;
|
| }
|
|
|
| @Override
|
| public boolean equals(Object obj) {
|
| - if (!(obj instanceof TranslateLanguagePair)) {
|
| + if (!(obj instanceof TranslateLanguageData)) {
|
| return false;
|
| }
|
| - TranslateLanguagePair other = (TranslateLanguagePair) obj;
|
| + TranslateLanguageData other = (TranslateLanguageData) obj;
|
| return this.mLanguageCode.equals(other.mLanguageCode)
|
| - && this.mLanguageRepresentation.equals(other.mLanguageRepresentation);
|
| + && this.mLanguageRepresentation.equals(other.mLanguageRepresentation)
|
| + && this.mLanguageUMAHashCode.equals(other.mLanguageUMAHashCode);
|
| }
|
|
|
| @Override
|
| @@ -49,7 +55,7 @@ public class TranslateOptions {
|
| @Override
|
| public String toString() {
|
| return "mLanguageCode:" + mLanguageCode + " - mlanguageRepresentation "
|
| - + mLanguageRepresentation;
|
| + + mLanguageRepresentation + " - mLanguageUMAHashCode " + mLanguageUMAHashCode;
|
| }
|
| }
|
|
|
| @@ -62,12 +68,15 @@ public class TranslateOptions {
|
| private String mSourceLanguageCode;
|
| private String mTargetLanguageCode;
|
|
|
| - private final ArrayList<TranslateLanguagePair> mAllLanguages;
|
| + private final ArrayList<TranslateLanguageData> mAllLanguages;
|
|
|
| // language code to translated language name map
|
| // Conceptually final
|
| private Map<String, String> mCodeToRepresentation;
|
|
|
| + // Langage code to its UMA hashcode representation.
|
| + private Map<String, Integer> mCodeToUMAHashCode;
|
| +
|
| // Will reflect the state before the object was ever modified
|
| private final boolean[] mOriginalOptions;
|
|
|
| @@ -78,7 +87,7 @@ public class TranslateOptions {
|
| private final boolean[] mOptions;
|
|
|
| private TranslateOptions(String sourceLanguageCode, String targetLanguageCode,
|
| - ArrayList<TranslateLanguagePair> allLanguages, boolean neverLanguage,
|
| + ArrayList<TranslateLanguageData> allLanguages, boolean neverLanguage,
|
| boolean neverDomain, boolean alwaysLanguage, boolean triggeredFromMenu,
|
| boolean[] originalOptions) {
|
| mOptions = new boolean[3];
|
| @@ -100,8 +109,10 @@ public class TranslateOptions {
|
|
|
| mAllLanguages = allLanguages;
|
| mCodeToRepresentation = new HashMap<String, String>();
|
| - for (TranslateLanguagePair language : allLanguages) {
|
| + mCodeToUMAHashCode = new HashMap<String, Integer>();
|
| + for (TranslateLanguageData language : allLanguages) {
|
| mCodeToRepresentation.put(language.mLanguageCode, language.mLanguageRepresentation);
|
| + mCodeToUMAHashCode.put(language.mLanguageCode, language.mLanguageUMAHashCode);
|
| }
|
| }
|
|
|
| @@ -109,13 +120,18 @@ public class TranslateOptions {
|
| * Creates a TranslateOptions by the given data.
|
| */
|
| public static TranslateOptions create(String sourceLanguageCode, String targetLanguageCode,
|
| - String[] languages, String[] codes, boolean alwaysTranslate,
|
| - boolean triggeredFromMenu) {
|
| + String[] languages, String[] codes, boolean alwaysTranslate, boolean triggeredFromMenu,
|
| + int[] hashCodes) {
|
| assert languages.length == codes.length;
|
|
|
| - ArrayList<TranslateLanguagePair> languageList = new ArrayList<TranslateLanguagePair>();
|
| + ArrayList<TranslateLanguageData> languageList = new ArrayList<TranslateLanguageData>();
|
| for (int i = 0; i < languages.length; ++i) {
|
| - languageList.add(new TranslateLanguagePair(codes[i], languages[i]));
|
| + Integer hashCode = null;
|
| + if (hashCodes != null) {
|
| + hashCode = Integer.valueOf(hashCodes[i]);
|
| + }
|
| +
|
| + languageList.add(new TranslateLanguageData(codes[i], languages[i], hashCode));
|
| }
|
| return new TranslateOptions(sourceLanguageCode, targetLanguageCode, languageList, false,
|
| false, alwaysTranslate, triggeredFromMenu, null);
|
| @@ -158,7 +174,7 @@ public class TranslateOptions {
|
| || (mOptions[ALWAYS_LANGUAGE] != mOriginalOptions[ALWAYS_LANGUAGE]);
|
| }
|
|
|
| - public List<TranslateLanguagePair> allLanguages() {
|
| + public List<TranslateLanguageData> allLanguages() {
|
| return mAllLanguages;
|
| }
|
|
|
| @@ -238,6 +254,18 @@ public class TranslateOptions {
|
| return "";
|
| }
|
|
|
| + /**
|
| + * Gets the language's UMA hashcode representation from a given language code.
|
| + * @param languageCode ISO code for the language
|
| + * @return The UMA hashcode representation of the language, or null if not found.
|
| + */
|
| + public Integer getUMAHashCodeFromCode(String languageCode) {
|
| + if (isValidLanguageUMAHashCode(languageCode)) {
|
| + return mCodeToUMAHashCode.get(languageCode);
|
| + }
|
| + return null;
|
| + }
|
| +
|
| private boolean toggleState(int element, boolean newValue) {
|
| if (!checkElementBoundaries(element)) return false;
|
|
|
| @@ -248,6 +276,11 @@ public class TranslateOptions {
|
| private boolean isValidLanguageCode(String languageCode) {
|
| return !TextUtils.isEmpty(languageCode) && mCodeToRepresentation.containsKey(languageCode);
|
| }
|
| +
|
| + private boolean isValidLanguageUMAHashCode(String languageCode) {
|
| + return !TextUtils.isEmpty(languageCode) && mCodeToUMAHashCode.containsKey(languageCode);
|
| + }
|
| +
|
| private boolean canSetLanguage(String sourceCode, String targetCode) {
|
| return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode)
|
| && !sourceCode.equals(targetCode);
|
|
|