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); |