OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.infobar; | 5 package org.chromium.chrome.browser.infobar; |
6 | 6 |
7 import android.text.TextUtils; | 7 import android.text.TextUtils; |
8 | 8 |
9 import java.util.ArrayList; | 9 import java.util.ArrayList; |
10 import java.util.HashMap; | 10 import java.util.HashMap; |
11 import java.util.List; | 11 import java.util.List; |
12 import java.util.Map; | 12 import java.util.Map; |
13 | 13 |
14 /** | 14 /** |
15 * A class that keeps the state of the different translation options and | 15 * A class that keeps the state of the different translation options and |
16 * languages. | 16 * languages. |
17 */ | 17 */ |
18 public class TranslateOptions { | 18 public class TranslateOptions { |
19 /** | 19 /** |
20 * A container for Language Code and it's translated representation | 20 * A container for Language Code and it's translated representation and it's native UMA |
21 * For example for Spanish when viewed from a French locale, this will conta in es, Espagnol | 21 * specific hashcode. |
22 * For example for Spanish when viewed from a French locale, this will conta in es, Espagnol, | |
23 * 114573335 | |
22 **/ | 24 **/ |
23 public static class TranslateLanguagePair { | 25 public static class TranslateLanguageData { |
24 public final String mLanguageCode; | 26 public final String mLanguageCode; |
25 public final String mLanguageRepresentation; | 27 public final String mLanguageRepresentation; |
28 public final Integer mLanguageUMAHashCode; | |
26 | 29 |
27 public TranslateLanguagePair(String languageCode, String languageReprese ntation) { | 30 public TranslateLanguageData( |
31 String languageCode, String languageRepresentation, Integer uMAh ashCode) { | |
28 assert languageCode != null; | 32 assert languageCode != null; |
29 assert languageRepresentation != null; | 33 assert languageRepresentation != null; |
30 mLanguageCode = languageCode; | 34 mLanguageCode = languageCode; |
31 mLanguageRepresentation = languageRepresentation; | 35 mLanguageRepresentation = languageRepresentation; |
36 mLanguageUMAHashCode = uMAhashCode; | |
32 } | 37 } |
33 | 38 |
34 @Override | 39 @Override |
35 public boolean equals(Object obj) { | 40 public boolean equals(Object obj) { |
36 if (!(obj instanceof TranslateLanguagePair)) { | 41 if (!(obj instanceof TranslateLanguageData)) { |
37 return false; | 42 return false; |
38 } | 43 } |
39 TranslateLanguagePair other = (TranslateLanguagePair) obj; | 44 TranslateLanguageData other = (TranslateLanguageData) obj; |
40 return this.mLanguageCode.equals(other.mLanguageCode) | 45 return this.mLanguageCode.equals(other.mLanguageCode) |
41 && this.mLanguageRepresentation.equals(other.mLanguageRepres entation); | 46 && this.mLanguageRepresentation.equals(other.mLanguageRepres entation) |
47 && this.mLanguageUMAHashCode == other.mLanguageUMAHashCode; | |
42 } | 48 } |
43 | 49 |
44 @Override | 50 @Override |
45 public int hashCode() { | 51 public int hashCode() { |
46 return (mLanguageCode + mLanguageRepresentation).hashCode(); | 52 return (mLanguageCode + mLanguageRepresentation).hashCode(); |
47 } | 53 } |
48 | 54 |
49 @Override | 55 @Override |
50 public String toString() { | 56 public String toString() { |
51 return "mLanguageCode:" + mLanguageCode + " - mlanguageRepresentatio n " | 57 return "mLanguageCode:" + mLanguageCode + " - mlanguageRepresentatio n " |
52 + mLanguageRepresentation; | 58 + mLanguageRepresentation + " - mLanguageUMAHashCode " + mLa nguageUMAHashCode; |
53 } | 59 } |
54 } | 60 } |
55 | 61 |
56 // This would be an enum but they are not good for mobile. | 62 // This would be an enum but they are not good for mobile. |
57 // The checkBoundaries method below needs to be updated if new options are a dded. | 63 // The checkBoundaries method below needs to be updated if new options are a dded. |
58 private static final int NEVER_LANGUAGE = 0; | 64 private static final int NEVER_LANGUAGE = 0; |
59 private static final int NEVER_DOMAIN = 1; | 65 private static final int NEVER_DOMAIN = 1; |
60 private static final int ALWAYS_LANGUAGE = 2; | 66 private static final int ALWAYS_LANGUAGE = 2; |
61 | 67 |
62 private String mSourceLanguageCode; | 68 private String mSourceLanguageCode; |
63 private String mTargetLanguageCode; | 69 private String mTargetLanguageCode; |
64 | 70 |
65 private final ArrayList<TranslateLanguagePair> mAllLanguages; | 71 private final ArrayList<TranslateLanguageData> mAllLanguages; |
66 | 72 |
67 // language code to translated language name map | 73 // language code to translated language name map |
68 // Conceptually final | 74 // Conceptually final |
69 private Map<String, String> mCodeToRepresentation; | 75 private Map<String, String> mCodeToRepresentation; |
70 | 76 |
77 // Langage code to its UMA hashcode representation. | |
78 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.
| |
79 | |
71 // Will reflect the state before the object was ever modified | 80 // Will reflect the state before the object was ever modified |
72 private final boolean[] mOriginalOptions; | 81 private final boolean[] mOriginalOptions; |
73 | 82 |
74 private final String mOriginalSourceLanguageCode; | 83 private final String mOriginalSourceLanguageCode; |
75 private final String mOriginalTargetLanguageCode; | 84 private final String mOriginalTargetLanguageCode; |
76 private final boolean mTriggeredFromMenu; | 85 private final boolean mTriggeredFromMenu; |
77 | 86 |
78 private final boolean[] mOptions; | 87 private final boolean[] mOptions; |
79 | 88 |
80 private TranslateOptions(String sourceLanguageCode, String targetLanguageCod e, | 89 private TranslateOptions(String sourceLanguageCode, String targetLanguageCod e, |
81 ArrayList<TranslateLanguagePair> allLanguages, boolean neverLanguage , | 90 ArrayList<TranslateLanguageData> allLanguages, boolean neverLanguage , |
82 boolean neverDomain, boolean alwaysLanguage, boolean triggeredFromMe nu, | 91 boolean neverDomain, boolean alwaysLanguage, boolean triggeredFromMe nu, |
83 boolean[] originalOptions) { | 92 boolean[] originalOptions) { |
84 mOptions = new boolean[3]; | 93 mOptions = new boolean[3]; |
85 mOptions[NEVER_LANGUAGE] = neverLanguage; | 94 mOptions[NEVER_LANGUAGE] = neverLanguage; |
86 mOptions[NEVER_DOMAIN] = neverDomain; | 95 mOptions[NEVER_DOMAIN] = neverDomain; |
87 mOptions[ALWAYS_LANGUAGE] = alwaysLanguage; | 96 mOptions[ALWAYS_LANGUAGE] = alwaysLanguage; |
88 | 97 |
89 if (originalOptions == null) { | 98 if (originalOptions == null) { |
90 mOriginalOptions = mOptions.clone(); | 99 mOriginalOptions = mOptions.clone(); |
91 } else { | 100 } else { |
92 mOriginalOptions = originalOptions.clone(); | 101 mOriginalOptions = originalOptions.clone(); |
93 } | 102 } |
94 | 103 |
95 mSourceLanguageCode = sourceLanguageCode; | 104 mSourceLanguageCode = sourceLanguageCode; |
96 mTargetLanguageCode = targetLanguageCode; | 105 mTargetLanguageCode = targetLanguageCode; |
97 mOriginalSourceLanguageCode = mSourceLanguageCode; | 106 mOriginalSourceLanguageCode = mSourceLanguageCode; |
98 mOriginalTargetLanguageCode = mTargetLanguageCode; | 107 mOriginalTargetLanguageCode = mTargetLanguageCode; |
99 mTriggeredFromMenu = triggeredFromMenu; | 108 mTriggeredFromMenu = triggeredFromMenu; |
100 | 109 |
101 mAllLanguages = allLanguages; | 110 mAllLanguages = allLanguages; |
102 mCodeToRepresentation = new HashMap<String, String>(); | 111 mCodeToRepresentation = new HashMap<String, String>(); |
103 for (TranslateLanguagePair language : allLanguages) { | 112 mCodeToHashCodeRepresentation = new HashMap<String, Integer>(); |
113 for (TranslateLanguageData language : allLanguages) { | |
104 mCodeToRepresentation.put(language.mLanguageCode, language.mLanguage Representation); | 114 mCodeToRepresentation.put(language.mLanguageCode, language.mLanguage Representation); |
115 mCodeToHashCodeRepresentation.put( | |
116 language.mLanguageCode, language.mLanguageUMAHashCode); | |
105 } | 117 } |
106 } | 118 } |
107 | 119 |
108 /** | 120 /** |
109 * Creates a TranslateOptions by the given data. | 121 * Creates a TranslateOptions by the given data. |
110 */ | 122 */ |
111 public static TranslateOptions create(String sourceLanguageCode, String targ etLanguageCode, | 123 public static TranslateOptions create(String sourceLanguageCode, String targ etLanguageCode, |
112 String[] languages, String[] codes, boolean alwaysTranslate, | 124 String[] languages, String[] codes, boolean alwaysTranslate, boolean triggeredFromMenu, |
113 boolean triggeredFromMenu) { | 125 int[] hashCodes) { |
114 assert languages.length == codes.length; | 126 assert languages.length == codes.length; |
115 | 127 |
116 ArrayList<TranslateLanguagePair> languageList = new ArrayList<TranslateL anguagePair>(); | 128 ArrayList<TranslateLanguageData> languageList = new ArrayList<TranslateL anguageData>(); |
117 for (int i = 0; i < languages.length; ++i) { | 129 for (int i = 0; i < languages.length; ++i) { |
118 languageList.add(new TranslateLanguagePair(codes[i], languages[i])); | 130 Integer hashCode = null; |
131 if (hashCodes != null) { | |
132 hashCode = Integer.valueOf(hashCodes[i]); | |
133 } | |
134 | |
135 languageList.add(new TranslateLanguageData(codes[i], languages[i], h ashCode)); | |
119 } | 136 } |
120 return new TranslateOptions(sourceLanguageCode, targetLanguageCode, lang uageList, false, | 137 return new TranslateOptions(sourceLanguageCode, targetLanguageCode, lang uageList, false, |
121 false, alwaysTranslate, triggeredFromMenu, null); | 138 false, alwaysTranslate, triggeredFromMenu, null); |
122 } | 139 } |
123 | 140 |
124 /** | 141 /** |
125 * Returns a copy of the current instance. | 142 * Returns a copy of the current instance. |
126 */ | 143 */ |
127 TranslateOptions copy() { | 144 TranslateOptions copy() { |
128 return new TranslateOptions(mSourceLanguageCode, mTargetLanguageCode, mA llLanguages, | 145 return new TranslateOptions(mSourceLanguageCode, mTargetLanguageCode, mA llLanguages, |
(...skipping 22 matching lines...) Expand all Loading... | |
151 } | 168 } |
152 | 169 |
153 public boolean optionsChanged() { | 170 public boolean optionsChanged() { |
154 return (!mSourceLanguageCode.equals(mOriginalSourceLanguageCode)) | 171 return (!mSourceLanguageCode.equals(mOriginalSourceLanguageCode)) |
155 || (!mTargetLanguageCode.equals(mOriginalTargetLanguageCode)) | 172 || (!mTargetLanguageCode.equals(mOriginalTargetLanguageCode)) |
156 || (mOptions[NEVER_LANGUAGE] != mOriginalOptions[NEVER_LANGUAGE] ) | 173 || (mOptions[NEVER_LANGUAGE] != mOriginalOptions[NEVER_LANGUAGE] ) |
157 || (mOptions[NEVER_DOMAIN] != mOriginalOptions[NEVER_DOMAIN]) | 174 || (mOptions[NEVER_DOMAIN] != mOriginalOptions[NEVER_DOMAIN]) |
158 || (mOptions[ALWAYS_LANGUAGE] != mOriginalOptions[ALWAYS_LANGUAG E]); | 175 || (mOptions[ALWAYS_LANGUAGE] != mOriginalOptions[ALWAYS_LANGUAG E]); |
159 } | 176 } |
160 | 177 |
161 public List<TranslateLanguagePair> allLanguages() { | 178 public List<TranslateLanguageData> allLanguages() { |
162 return mAllLanguages; | 179 return mAllLanguages; |
163 } | 180 } |
164 | 181 |
165 public boolean neverTranslateLanguageState() { | 182 public boolean neverTranslateLanguageState() { |
166 return mOptions[NEVER_LANGUAGE]; | 183 return mOptions[NEVER_LANGUAGE]; |
167 } | 184 } |
168 | 185 |
169 public boolean alwaysTranslateLanguageState() { | 186 public boolean alwaysTranslateLanguageState() { |
170 return mOptions[ALWAYS_LANGUAGE]; | 187 return mOptions[ALWAYS_LANGUAGE]; |
171 } | 188 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
231 * @param languageCode ISO code for the language | 248 * @param languageCode ISO code for the language |
232 * @return The translated representation of the language, or "" if not found . | 249 * @return The translated representation of the language, or "" if not found . |
233 */ | 250 */ |
234 public String getRepresentationFromCode(String languageCode) { | 251 public String getRepresentationFromCode(String languageCode) { |
235 if (isValidLanguageCode(languageCode)) { | 252 if (isValidLanguageCode(languageCode)) { |
236 return mCodeToRepresentation.get(languageCode); | 253 return mCodeToRepresentation.get(languageCode); |
237 } | 254 } |
238 return ""; | 255 return ""; |
239 } | 256 } |
240 | 257 |
258 /** | |
259 * Gets the language's UMA hashcode representation from a given language cod e. | |
260 * @param languageCode ISO code for the language | |
261 * @return The UMA hashcode representation of the language, or null if not f ound. | |
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
| |
262 */ | |
263 public Integer getUMAHashCodeRepresentationFromCode(String languageCode) { | |
Leo
2017/05/12 04:46:16
remove Representation.
ramyasharma
2017/05/13 09:40:02
Done.
| |
264 if (isValidLanguageUMAHashCode(languageCode)) { | |
265 return mCodeToHashCodeRepresentation.get(languageCode); | |
266 } | |
267 return null; | |
268 } | |
269 | |
241 private boolean toggleState(int element, boolean newValue) { | 270 private boolean toggleState(int element, boolean newValue) { |
242 if (!checkElementBoundaries(element)) return false; | 271 if (!checkElementBoundaries(element)) return false; |
243 | 272 |
244 mOptions[element] = newValue; | 273 mOptions[element] = newValue; |
245 return true; | 274 return true; |
246 } | 275 } |
247 | 276 |
248 private boolean isValidLanguageCode(String languageCode) { | 277 private boolean isValidLanguageCode(String languageCode) { |
249 return !TextUtils.isEmpty(languageCode) && mCodeToRepresentation.contain sKey(languageCode); | 278 return !TextUtils.isEmpty(languageCode) && mCodeToRepresentation.contain sKey(languageCode); |
250 } | 279 } |
280 | |
281 private boolean isValidLanguageUMAHashCode(String languageCode) { | |
282 return !TextUtils.isEmpty(languageCode) | |
283 && mCodeToHashCodeRepresentation.containsKey(languageCode); | |
284 } | |
285 | |
251 private boolean canSetLanguage(String sourceCode, String targetCode) { | 286 private boolean canSetLanguage(String sourceCode, String targetCode) { |
252 return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode ) | 287 return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode ) |
253 && !sourceCode.equals(targetCode); | 288 && !sourceCode.equals(targetCode); |
254 } | 289 } |
255 | 290 |
256 private static boolean checkElementBoundaries(int element) { | 291 private static boolean checkElementBoundaries(int element) { |
257 return element >= NEVER_LANGUAGE && element <= ALWAYS_LANGUAGE; | 292 return element >= NEVER_LANGUAGE && element <= ALWAYS_LANGUAGE; |
258 } | 293 } |
259 | 294 |
260 @Override | 295 @Override |
261 public String toString() { | 296 public String toString() { |
262 return new StringBuilder() | 297 return new StringBuilder() |
263 .append(sourceLanguageCode()) | 298 .append(sourceLanguageCode()) |
264 .append(" -> ") | 299 .append(" -> ") |
265 .append(targetLanguageCode()) | 300 .append(targetLanguageCode()) |
266 .append(" - ") | 301 .append(" - ") |
267 .append("Never Language:") | 302 .append("Never Language:") |
268 .append(mOptions[NEVER_LANGUAGE]) | 303 .append(mOptions[NEVER_LANGUAGE]) |
269 .append(" Always Language:") | 304 .append(" Always Language:") |
270 .append(mOptions[ALWAYS_LANGUAGE]) | 305 .append(mOptions[ALWAYS_LANGUAGE]) |
271 .append(" Never Domain:") | 306 .append(" Never Domain:") |
272 .append(mOptions[NEVER_DOMAIN]) | 307 .append(mOptions[NEVER_DOMAIN]) |
273 .toString(); | 308 .toString(); |
274 } | 309 } |
275 } | 310 } |
OLD | NEW |