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