Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(177)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateOptions.java

Issue 2873103003: Implements logging in the new compact translate UI. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698