Chromium Code Reviews| 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..7a7400499fc3ccb7b745f1fdc31b20dfcd4c40e5 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 == 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> mCodeToHashCodeRepresentation; |
|
Leo
2017/05/12 04:46:16
s/mCodeToHashCodeRepresentation/mCodeToUMAHashCode
ramyasharma
2017/05/13 09:40:02
Thanks, good idea. Done.
|
| + |
| // 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,11 @@ public class TranslateOptions { |
| mAllLanguages = allLanguages; |
| mCodeToRepresentation = new HashMap<String, String>(); |
| - for (TranslateLanguagePair language : allLanguages) { |
| + mCodeToHashCodeRepresentation = new HashMap<String, Integer>(); |
| + for (TranslateLanguageData language : allLanguages) { |
| mCodeToRepresentation.put(language.mLanguageCode, language.mLanguageRepresentation); |
| + mCodeToHashCodeRepresentation.put( |
| + language.mLanguageCode, language.mLanguageUMAHashCode); |
| } |
| } |
| @@ -109,13 +121,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 +175,7 @@ public class TranslateOptions { |
| || (mOptions[ALWAYS_LANGUAGE] != mOriginalOptions[ALWAYS_LANGUAGE]); |
| } |
| - public List<TranslateLanguagePair> allLanguages() { |
| + public List<TranslateLanguageData> allLanguages() { |
| return mAllLanguages; |
| } |
| @@ -238,6 +255,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. |
|
pdyson
2017/05/12 04:58:40
Does this allow tracking of new languages or will
ramyasharma
2017/05/13 09:40:02
It will allow tracking of new languages, null is r
|
| + */ |
| + public Integer getUMAHashCodeRepresentationFromCode(String languageCode) { |
|
Leo
2017/05/12 04:46:16
remove Representation.
ramyasharma
2017/05/13 09:40:02
Done.
|
| + if (isValidLanguageUMAHashCode(languageCode)) { |
| + return mCodeToHashCodeRepresentation.get(languageCode); |
| + } |
| + return null; |
| + } |
| + |
| private boolean toggleState(int element, boolean newValue) { |
| if (!checkElementBoundaries(element)) return false; |
| @@ -248,6 +277,12 @@ public class TranslateOptions { |
| private boolean isValidLanguageCode(String languageCode) { |
| return !TextUtils.isEmpty(languageCode) && mCodeToRepresentation.containsKey(languageCode); |
| } |
| + |
| + private boolean isValidLanguageUMAHashCode(String languageCode) { |
| + return !TextUtils.isEmpty(languageCode) |
| + && mCodeToHashCodeRepresentation.containsKey(languageCode); |
| + } |
| + |
| private boolean canSetLanguage(String sourceCode, String targetCode) { |
| return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode) |
| && !sourceCode.equals(targetCode); |