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

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.equals(other.mLanguageUMAHashCo de);
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> mCodeToUMAHashCode;
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 mCodeToUMAHashCode = 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 mCodeToUMAHashCode.put(language.mLanguageCode, language.mLanguageUMA HashCode);
105 } 116 }
106 } 117 }
107 118
108 /** 119 /**
109 * Creates a TranslateOptions by the given data. 120 * Creates a TranslateOptions by the given data.
110 */ 121 */
111 public static TranslateOptions create(String sourceLanguageCode, String targ etLanguageCode, 122 public static TranslateOptions create(String sourceLanguageCode, String targ etLanguageCode,
112 String[] languages, String[] codes, boolean alwaysTranslate, 123 String[] languages, String[] codes, boolean alwaysTranslate, boolean triggeredFromMenu,
113 boolean triggeredFromMenu) { 124 int[] hashCodes) {
114 assert languages.length == codes.length; 125 assert languages.length == codes.length;
115 126
116 ArrayList<TranslateLanguagePair> languageList = new ArrayList<TranslateL anguagePair>(); 127 ArrayList<TranslateLanguageData> languageList = new ArrayList<TranslateL anguageData>();
117 for (int i = 0; i < languages.length; ++i) { 128 for (int i = 0; i < languages.length; ++i) {
118 languageList.add(new TranslateLanguagePair(codes[i], languages[i])); 129 Integer hashCode = null;
130 if (hashCodes != null) {
131 hashCode = Integer.valueOf(hashCodes[i]);
132 }
133
134 languageList.add(new TranslateLanguageData(codes[i], languages[i], h ashCode));
119 } 135 }
120 return new TranslateOptions(sourceLanguageCode, targetLanguageCode, lang uageList, false, 136 return new TranslateOptions(sourceLanguageCode, targetLanguageCode, lang uageList, false,
121 false, alwaysTranslate, triggeredFromMenu, null); 137 false, alwaysTranslate, triggeredFromMenu, null);
122 } 138 }
123 139
124 /** 140 /**
125 * Returns a copy of the current instance. 141 * Returns a copy of the current instance.
126 */ 142 */
127 TranslateOptions copy() { 143 TranslateOptions copy() {
128 return new TranslateOptions(mSourceLanguageCode, mTargetLanguageCode, mA llLanguages, 144 return new TranslateOptions(mSourceLanguageCode, mTargetLanguageCode, mA llLanguages,
(...skipping 22 matching lines...) Expand all
151 } 167 }
152 168
153 public boolean optionsChanged() { 169 public boolean optionsChanged() {
154 return (!mSourceLanguageCode.equals(mOriginalSourceLanguageCode)) 170 return (!mSourceLanguageCode.equals(mOriginalSourceLanguageCode))
155 || (!mTargetLanguageCode.equals(mOriginalTargetLanguageCode)) 171 || (!mTargetLanguageCode.equals(mOriginalTargetLanguageCode))
156 || (mOptions[NEVER_LANGUAGE] != mOriginalOptions[NEVER_LANGUAGE] ) 172 || (mOptions[NEVER_LANGUAGE] != mOriginalOptions[NEVER_LANGUAGE] )
157 || (mOptions[NEVER_DOMAIN] != mOriginalOptions[NEVER_DOMAIN]) 173 || (mOptions[NEVER_DOMAIN] != mOriginalOptions[NEVER_DOMAIN])
158 || (mOptions[ALWAYS_LANGUAGE] != mOriginalOptions[ALWAYS_LANGUAG E]); 174 || (mOptions[ALWAYS_LANGUAGE] != mOriginalOptions[ALWAYS_LANGUAG E]);
159 } 175 }
160 176
161 public List<TranslateLanguagePair> allLanguages() { 177 public List<TranslateLanguageData> allLanguages() {
162 return mAllLanguages; 178 return mAllLanguages;
163 } 179 }
164 180
165 public boolean neverTranslateLanguageState() { 181 public boolean neverTranslateLanguageState() {
166 return mOptions[NEVER_LANGUAGE]; 182 return mOptions[NEVER_LANGUAGE];
167 } 183 }
168 184
169 public boolean alwaysTranslateLanguageState() { 185 public boolean alwaysTranslateLanguageState() {
170 return mOptions[ALWAYS_LANGUAGE]; 186 return mOptions[ALWAYS_LANGUAGE];
171 } 187 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 * @param languageCode ISO code for the language 247 * @param languageCode ISO code for the language
232 * @return The translated representation of the language, or "" if not found . 248 * @return The translated representation of the language, or "" if not found .
233 */ 249 */
234 public String getRepresentationFromCode(String languageCode) { 250 public String getRepresentationFromCode(String languageCode) {
235 if (isValidLanguageCode(languageCode)) { 251 if (isValidLanguageCode(languageCode)) {
236 return mCodeToRepresentation.get(languageCode); 252 return mCodeToRepresentation.get(languageCode);
237 } 253 }
238 return ""; 254 return "";
239 } 255 }
240 256
257 /**
258 * Gets the language's UMA hashcode representation from a given language cod e.
259 * @param languageCode ISO code for the language
260 * @return The UMA hashcode representation of the language, or null if not f ound.
261 */
262 public Integer getUMAHashCodeFromCode(String languageCode) {
263 if (isValidLanguageUMAHashCode(languageCode)) {
264 return mCodeToUMAHashCode.get(languageCode);
265 }
266 return null;
267 }
268
241 private boolean toggleState(int element, boolean newValue) { 269 private boolean toggleState(int element, boolean newValue) {
242 if (!checkElementBoundaries(element)) return false; 270 if (!checkElementBoundaries(element)) return false;
243 271
244 mOptions[element] = newValue; 272 mOptions[element] = newValue;
245 return true; 273 return true;
246 } 274 }
247 275
248 private boolean isValidLanguageCode(String languageCode) { 276 private boolean isValidLanguageCode(String languageCode) {
249 return !TextUtils.isEmpty(languageCode) && mCodeToRepresentation.contain sKey(languageCode); 277 return !TextUtils.isEmpty(languageCode) && mCodeToRepresentation.contain sKey(languageCode);
250 } 278 }
279
280 private boolean isValidLanguageUMAHashCode(String languageCode) {
281 return !TextUtils.isEmpty(languageCode) && mCodeToUMAHashCode.containsKe y(languageCode);
282 }
283
251 private boolean canSetLanguage(String sourceCode, String targetCode) { 284 private boolean canSetLanguage(String sourceCode, String targetCode) {
252 return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode ) 285 return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode )
253 && !sourceCode.equals(targetCode); 286 && !sourceCode.equals(targetCode);
254 } 287 }
255 288
256 private static boolean checkElementBoundaries(int element) { 289 private static boolean checkElementBoundaries(int element) {
257 return element >= NEVER_LANGUAGE && element <= ALWAYS_LANGUAGE; 290 return element >= NEVER_LANGUAGE && element <= ALWAYS_LANGUAGE;
258 } 291 }
259 292
260 @Override 293 @Override
261 public String toString() { 294 public String toString() {
262 return new StringBuilder() 295 return new StringBuilder()
263 .append(sourceLanguageCode()) 296 .append(sourceLanguageCode())
264 .append(" -> ") 297 .append(" -> ")
265 .append(targetLanguageCode()) 298 .append(targetLanguageCode())
266 .append(" - ") 299 .append(" - ")
267 .append("Never Language:") 300 .append("Never Language:")
268 .append(mOptions[NEVER_LANGUAGE]) 301 .append(mOptions[NEVER_LANGUAGE])
269 .append(" Always Language:") 302 .append(" Always Language:")
270 .append(mOptions[ALWAYS_LANGUAGE]) 303 .append(mOptions[ALWAYS_LANGUAGE])
271 .append(" Never Domain:") 304 .append(" Never Domain:")
272 .append(mOptions[NEVER_DOMAIN]) 305 .append(mOptions[NEVER_DOMAIN])
273 .toString(); 306 .toString();
274 } 307 }
275 } 308 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698