OLD | NEW |
---|---|
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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.support.design.widget.TabLayout; | 7 import android.support.design.widget.TabLayout; |
8 import android.view.LayoutInflater; | 8 import android.view.LayoutInflater; |
9 import android.view.View; | 9 import android.view.View; |
10 import android.view.View.OnClickListener; | 10 import android.view.View.OnClickListener; |
11 import android.widget.LinearLayout; | 11 import android.widget.LinearLayout; |
12 | 12 |
13 import org.chromium.base.annotations.CalledByNative; | 13 import org.chromium.base.annotations.CalledByNative; |
14 import org.chromium.base.metrics.RecordHistogram; | |
14 import org.chromium.chrome.R; | 15 import org.chromium.chrome.R; |
15 import org.chromium.chrome.browser.infobar.translate.TranslateMenu; | 16 import org.chromium.chrome.browser.infobar.translate.TranslateMenu; |
16 import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper; | 17 import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper; |
17 import org.chromium.chrome.browser.infobar.translate.TranslateTabLayout; | 18 import org.chromium.chrome.browser.infobar.translate.TranslateTabLayout; |
18 import org.chromium.chrome.browser.snackbar.Snackbar; | 19 import org.chromium.chrome.browser.snackbar.Snackbar; |
19 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; | 20 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; |
20 import org.chromium.chrome.browser.widget.TintedImageButton; | 21 import org.chromium.chrome.browser.widget.TintedImageButton; |
21 import org.chromium.ui.widget.Toast; | 22 import org.chromium.ui.widget.Toast; |
22 | 23 |
23 /** | 24 /** |
24 * Java version of the compcat translate infobar | 25 * Java version of the compcat translate infobar |
25 */ | 26 */ |
26 class TranslateCompactInfoBar extends InfoBar | 27 class TranslateCompactInfoBar extends InfoBar |
27 implements TabLayout.OnTabSelectedListener, TranslateMenuHelper.Translat eMenuListener { | 28 implements TabLayout.OnTabSelectedListener, TranslateMenuHelper.Translat eMenuListener { |
28 public static final int TRANSLATING_INFOBAR = 1; | 29 public static final int TRANSLATING_INFOBAR = 1; |
29 | 30 |
30 private static final int SOURCE_TAB_INDEX = 0; | 31 private static final int SOURCE_TAB_INDEX = 0; |
31 private static final int TARGET_TAB_INDEX = 1; | 32 private static final int TARGET_TAB_INDEX = 1; |
32 | 33 |
33 private final int mInitialStep; | 34 private final int mInitialStep; |
34 private final TranslateOptions mOptions; | 35 private final TranslateOptions mOptions; |
35 | 36 |
36 private long mNativeTranslateInfoBarPtr; | 37 private long mNativeTranslateInfoBarPtr; |
37 private TranslateTabLayout mTabLayout; | 38 private TranslateTabLayout mTabLayout; |
38 | 39 |
40 private static final String INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE = | |
41 "Translate.CompactInfobar.Language.Translate"; | |
42 private static final String INFOBAR_HISTOGRAM_MORE_LANGUAGES_LANGUAGE = | |
43 "Translate.CompactInfobar.Language.MoreLanguages"; | |
44 private static final String INFOBAR_HISTOGRAM_PAGE_NOT_IN_LANGUAGE = | |
45 "Translate.CompactInfobar.Language.PageNotIn"; | |
46 private static final String INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE = | |
47 "Translate.CompactInfobar.Language.AlwaysTranslate"; | |
48 private static final String INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE = | |
49 "Translate.CompactInfobar.Language.NeverTranslate"; | |
50 private static final String INFOBAR_HISTOGRAM = "Translate.CompactInfobar.Ev ent"; | |
51 | |
52 /** | |
53 * This is used to back a UMA histogram, so it should be treated as | |
54 * append-only. The values should not be changed or reused, and | |
55 * INFOBAR_HISTOGRAM_BOUNDARY should be the last. | |
56 */ | |
57 private static final Integer INFOBAR_IMPRESSION = 0; | |
58 private static final Integer INFOBAR_TRANSLATE = 1; | |
59 private static final Integer INFOBAR_DECLINE = 2; | |
60 private static final Integer INFOBAR_OPTIONS = 3; | |
61 private static final Integer INFOBAR_MORE_LANGUAGES = 4; | |
62 private static final Integer INFOBAR_MORE_LANGUAGES_TRANSLATE = 5; | |
63 private static final Integer INFOBAR_PAGE_NOT_IN = 6; | |
64 private static final Integer INFOBAR_ALWAYS_TRANSLATE = 7; | |
65 private static final Integer INFOBAR_NEVER_TRANSLATE = 8; | |
66 private static final Integer INFOBAR_NEVER_TRANSLATE_SITE = 9; | |
67 private static final Integer INFOBAR_SCROLL_HIDE = 10; | |
68 private static final Integer INFOBAR_SCROLL_SHOW = 11; | |
69 private static final Integer INFOBAR_REVERT = 12; | |
70 private static final Integer INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION = 13; | |
71 private static final Integer INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION = 1 4; | |
72 private static final Integer INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRESSIO N = 15; | |
73 private static final Integer INFOBAR_SNACKBAR_CANCEL_ALWAYS = 16; | |
74 private static final Integer INFOBAR_SNACKBAR_CANCEL_NEVER_SITE = 17; | |
75 private static final Integer INFOBAR_SNACKBAR_CANCEL_NEVER = 18; | |
76 private static final Integer INFOBAR_HISTOGRAM_BOUNDARY = 19; | |
77 | |
39 // Need 2 instances of TranslateMenuHelper to prevent a race condition bug w hich happens when | 78 // Need 2 instances of TranslateMenuHelper to prevent a race condition bug w hich happens when |
40 // showing language menu after dismissing overflow menu. | 79 // showing language menu after dismissing overflow menu. |
41 private TranslateMenuHelper mOverflowMenuHelper; | 80 private TranslateMenuHelper mOverflowMenuHelper; |
42 private TranslateMenuHelper mLanguageMenuHelper; | 81 private TranslateMenuHelper mLanguageMenuHelper; |
43 | 82 |
44 private TintedImageButton mMenuButton; | 83 private TintedImageButton mMenuButton; |
45 | 84 |
46 /** The controller for translate UI snackbars. */ | 85 /** The controller for translate UI snackbars. */ |
47 class TranslateSnackbarController implements SnackbarController { | 86 class TranslateSnackbarController implements SnackbarController { |
48 private final int mMenuItemId; | 87 private final int mMenuItemId; |
49 | 88 |
50 public TranslateSnackbarController(int menuItemId) { | 89 public TranslateSnackbarController(int menuItemId) { |
51 mMenuItemId = menuItemId; | 90 mMenuItemId = menuItemId; |
52 } | 91 } |
53 | 92 |
54 @Override | 93 @Override |
55 public void onDismissNoAction(Object actionData) { | 94 public void onDismissNoAction(Object actionData) { |
56 handleTranslateOptionPostSnackbar(mMenuItemId); | 95 handleTranslateOptionPostSnackbar(mMenuItemId); |
57 } | 96 } |
58 | 97 |
59 @Override | 98 @Override |
60 public void onAction(Object actionData) { | 99 public void onAction(Object actionData) { |
61 // TODO(ramyasharma): Add logging metric to track cancel actions. | 100 switch (mMenuItemId) { |
62 // Do nothing. | 101 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: |
102 recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_ALWAYS); | |
103 return; | |
104 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: | |
105 recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER); | |
106 return; | |
107 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: | |
108 recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER_SITE); | |
109 return; | |
110 } | |
63 } | 111 } |
64 }; | 112 }; |
65 | 113 |
66 @CalledByNative | 114 @CalledByNative |
67 private static InfoBar create(int initialStep, String sourceLanguageCode, | 115 private static InfoBar create(int initialStep, String sourceLanguageCode, |
68 String targetLanguageCode, boolean alwaysTranslate, boolean triggere dFromMenu, | 116 String targetLanguageCode, boolean alwaysTranslate, boolean triggere dFromMenu, |
69 String[] languages, String[] codes) { | 117 String[] languages, String[] codes, int[] hashCodes) { |
118 recordInfobarAction(INFOBAR_IMPRESSION); | |
70 return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targ etLanguageCode, | 119 return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targ etLanguageCode, |
71 alwaysTranslate, triggeredFromMenu, languages, codes); | 120 alwaysTranslate, triggeredFromMenu, languages, codes, hashCodes) ; |
72 } | 121 } |
73 | 122 |
74 TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String t argetLanguageCode, | 123 TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String t argetLanguageCode, |
75 boolean alwaysTranslate, boolean triggeredFromMenu, String[] languag es, | 124 boolean alwaysTranslate, boolean triggeredFromMenu, String[] languag es, String[] codes, |
76 String[] codes) { | 125 int[] hashCodes) { |
77 super(R.drawable.infobar_translate_compact, null, null); | 126 super(R.drawable.infobar_translate_compact, null, null); |
127 | |
78 mInitialStep = initialStep; | 128 mInitialStep = initialStep; |
79 mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCod e, languages, codes, | 129 mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCod e, languages, codes, |
80 alwaysTranslate, triggeredFromMenu); | 130 alwaysTranslate, triggeredFromMenu, hashCodes); |
81 } | 131 } |
82 | 132 |
83 @Override | 133 @Override |
84 protected boolean usesCompactLayout() { | 134 protected boolean usesCompactLayout() { |
85 return true; | 135 return true; |
86 } | 136 } |
87 | 137 |
88 @Override | 138 @Override |
89 protected void createCompactLayoutContent(InfoBarCompactLayout parent) { | 139 protected void createCompactLayoutContent(InfoBarCompactLayout parent) { |
90 LinearLayout content = | 140 LinearLayout content = |
91 (LinearLayout) LayoutInflater.from(getContext()) | 141 (LinearLayout) LayoutInflater.from(getContext()) |
92 .inflate(R.layout.infobar_translate_compact_content, par ent, false); | 142 .inflate(R.layout.infobar_translate_compact_content, par ent, false); |
93 | 143 |
94 mTabLayout = (TranslateTabLayout) content.findViewById(R.id.translate_in fobar_tabs); | 144 mTabLayout = (TranslateTabLayout) content.findViewById(R.id.translate_in fobar_tabs); |
95 mTabLayout.addTabs(mOptions.sourceLanguageName(), mOptions.targetLanguag eName()); | 145 mTabLayout.addTabs(mOptions.sourceLanguageName(), mOptions.targetLanguag eName()); |
96 | 146 |
97 // Set translating status in the beginning for pages translated automati cally. | 147 // Set translating status in the beginning for pages translated automati cally. |
98 if (mInitialStep == TRANSLATING_INFOBAR) { | 148 if (mInitialStep == TRANSLATING_INFOBAR) { |
99 mTabLayout.getTabAt(TARGET_TAB_INDEX).select(); | 149 mTabLayout.getTabAt(TARGET_TAB_INDEX).select(); |
100 mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX); | 150 mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX); |
101 } | 151 } |
102 | 152 |
103 mTabLayout.addOnTabSelectedListener(this); | 153 mTabLayout.addOnTabSelectedListener(this); |
104 | 154 |
105 mMenuButton = (TintedImageButton) content.findViewById(R.id.translate_in fobar_menu_button); | 155 mMenuButton = (TintedImageButton) content.findViewById(R.id.translate_in fobar_menu_button); |
106 mMenuButton.setOnClickListener(new OnClickListener() { | 156 mMenuButton.setOnClickListener(new OnClickListener() { |
107 @Override | 157 @Override |
108 public void onClick(View v) { | 158 public void onClick(View v) { |
159 recordInfobarAction(INFOBAR_OPTIONS); | |
109 initMenuHelper(TranslateMenu.MENU_OVERFLOW); | 160 initMenuHelper(TranslateMenu.MENU_OVERFLOW); |
110 mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW); | 161 mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW); |
111 } | 162 } |
112 }); | 163 }); |
113 | 164 |
114 parent.addContent(content, 1.0f); | 165 parent.addContent(content, 1.0f); |
115 } | 166 } |
116 | 167 |
117 private void initMenuHelper(int menuType) { | 168 private void initMenuHelper(int menuType) { |
118 switch (menuType) { | 169 switch (menuType) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
168 @Override | 219 @Override |
169 protected void onNativeDestroyed() { | 220 protected void onNativeDestroyed() { |
170 mNativeTranslateInfoBarPtr = 0; | 221 mNativeTranslateInfoBarPtr = 0; |
171 super.onNativeDestroyed(); | 222 super.onNativeDestroyed(); |
172 } | 223 } |
173 | 224 |
174 @Override | 225 @Override |
175 public void onTabSelected(TabLayout.Tab tab) { | 226 public void onTabSelected(TabLayout.Tab tab) { |
176 switch (tab.getPosition()) { | 227 switch (tab.getPosition()) { |
177 case SOURCE_TAB_INDEX: | 228 case SOURCE_TAB_INDEX: |
229 recordInfobarAction(INFOBAR_REVERT); | |
178 onButtonClicked(ActionType.TRANSLATE_SHOW_ORIGINAL); | 230 onButtonClicked(ActionType.TRANSLATE_SHOW_ORIGINAL); |
179 return; | 231 return; |
180 case TARGET_TAB_INDEX: | 232 case TARGET_TAB_INDEX: |
233 recordInfobarAction(INFOBAR_TRANSLATE); | |
234 recordSparseInfobarLanguageData( | |
235 INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE, mOptions.targetLan guageCode()); | |
181 startTranslating(TARGET_TAB_INDEX); | 236 startTranslating(TARGET_TAB_INDEX); |
182 return; | 237 return; |
183 default: | 238 default: |
184 assert false : "Unexpected Tab Index"; | 239 assert false : "Unexpected Tab Index"; |
185 } | 240 } |
186 } | 241 } |
187 | 242 |
188 @Override | 243 @Override |
189 public void onTabUnselected(TabLayout.Tab tab) {} | 244 public void onTabUnselected(TabLayout.Tab tab) {} |
190 | 245 |
191 @Override | 246 @Override |
192 public void onTabReselected(TabLayout.Tab tab) {} | 247 public void onTabReselected(TabLayout.Tab tab) {} |
193 | 248 |
194 @Override | 249 @Override |
195 public void onOverflowMenuItemClicked(int itemId) { | 250 public void onOverflowMenuItemClicked(int itemId) { |
196 switch (itemId) { | 251 switch (itemId) { |
197 case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE: | 252 case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE: |
253 recordInfobarAction(INFOBAR_MORE_LANGUAGES); | |
198 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE); | 254 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE); |
199 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE); | 255 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE); |
200 return; | 256 return; |
201 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: | 257 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: |
258 recordInfobarAction(INFOBAR_ALWAYS_TRANSLATE); | |
259 recordSparseInfobarLanguageData( | |
260 INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE, mOptions.so urceLanguageCode()); | |
202 // Only show snackbar when "Always Translate" is enabled. | 261 // Only show snackbar when "Always Translate" is enabled. |
203 if (!mOptions.alwaysTranslateLanguageState()) { | 262 if (!mOptions.alwaysTranslateLanguageState()) { |
204 createAndShowSnackbar( | 263 createAndShowSnackbar( |
205 getContext().getString(R.string.translate_snackbar_a lways_translate, | 264 getContext().getString(R.string.translate_snackbar_a lways_translate, |
206 mOptions.sourceLanguageName(), mOptions.targ etLanguageName()), | 265 mOptions.sourceLanguageName(), mOptions.targ etLanguageName()), |
207 Snackbar.UMA_TRANSLATE_ALWAYS, itemId); | 266 Snackbar.UMA_TRANSLATE_ALWAYS, itemId); |
208 } else { | 267 } else { |
209 handleTranslateOptionPostSnackbar(itemId); | 268 handleTranslateOptionPostSnackbar(itemId); |
210 } | 269 } |
211 return; | 270 return; |
212 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: | 271 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: |
272 recordInfobarAction(INFOBAR_NEVER_TRANSLATE); | |
273 recordSparseInfobarLanguageData( | |
274 INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE, mOptions.sou rceLanguageCode()); | |
213 createAndShowSnackbar( | 275 createAndShowSnackbar( |
214 getContext().getString(R.string.translate_snackbar_langu age_never, | 276 getContext().getString(R.string.translate_snackbar_langu age_never, |
215 mOptions.sourceLanguageName()), | 277 mOptions.sourceLanguageName()), |
216 Snackbar.UMA_TRANSLATE_NEVER, itemId); | 278 Snackbar.UMA_TRANSLATE_NEVER, itemId); |
217 return; | 279 return; |
218 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: | 280 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: |
281 recordInfobarAction(INFOBAR_NEVER_TRANSLATE_SITE); | |
219 createAndShowSnackbar( | 282 createAndShowSnackbar( |
220 getContext().getString(R.string.translate_snackbar_site_ never), | 283 getContext().getString(R.string.translate_snackbar_site_ never), |
221 Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId); | 284 Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId); |
222 return; | 285 return; |
223 case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE: | 286 case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE: |
287 recordInfobarAction(INFOBAR_PAGE_NOT_IN); | |
224 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE); | 288 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE); |
225 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE); | 289 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE); |
226 return; | 290 return; |
227 default: | 291 default: |
228 assert false : "Unexpected overflow menu code"; | 292 assert false : "Unexpected overflow menu code"; |
229 } | 293 } |
230 } | 294 } |
231 | 295 |
232 @Override | 296 @Override |
233 public void onTargetMenuItemClicked(String code) { | 297 public void onTargetMenuItemClicked(String code) { |
234 // Reset target code in both UI and native. | 298 // Reset target code in both UI and native. |
235 if (mOptions.setTargetLanguage(code)) { | 299 if (mOptions.setTargetLanguage(code)) { |
300 recordSparseInfobarLanguageData( | |
301 INFOBAR_HISTOGRAM_MORE_LANGUAGES_LANGUAGE, mOptions.targetLa nguageCode()); | |
236 nativeApplyStringTranslateOption( | 302 nativeApplyStringTranslateOption( |
237 mNativeTranslateInfoBarPtr, TranslateOption.TARGET_CODE, cod e); | 303 mNativeTranslateInfoBarPtr, TranslateOption.TARGET_CODE, cod e); |
238 // Adjust UI. | 304 // Adjust UI. |
239 mTabLayout.replaceTabTitle(TARGET_TAB_INDEX, mOptions.getRepresentat ionFromCode(code)); | 305 mTabLayout.replaceTabTitle(TARGET_TAB_INDEX, mOptions.getRepresentat ionFromCode(code)); |
240 startTranslating(mTabLayout.getSelectedTabPosition()); | 306 startTranslating(mTabLayout.getSelectedTabPosition()); |
241 } | 307 } |
242 } | 308 } |
243 | 309 |
244 @Override | 310 @Override |
245 public void onSourceMenuItemClicked(String code) { | 311 public void onSourceMenuItemClicked(String code) { |
246 // Reset source code in both UI and native. | 312 // Reset source code in both UI and native. |
247 if (mOptions.setSourceLanguage(code)) { | 313 if (mOptions.setSourceLanguage(code)) { |
314 recordSparseInfobarLanguageData( | |
315 INFOBAR_HISTOGRAM_PAGE_NOT_IN_LANGUAGE, mOptions.sourceLangu ageCode()); | |
248 nativeApplyStringTranslateOption( | 316 nativeApplyStringTranslateOption( |
249 mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, cod e); | 317 mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, cod e); |
250 // Adjust UI. | 318 // Adjust UI. |
251 mTabLayout.replaceTabTitle(SOURCE_TAB_INDEX, mOptions.getRepresentat ionFromCode(code)); | 319 mTabLayout.replaceTabTitle(SOURCE_TAB_INDEX, mOptions.getRepresentat ionFromCode(code)); |
252 startTranslating(mTabLayout.getSelectedTabPosition()); | 320 startTranslating(mTabLayout.getSelectedTabPosition()); |
253 } | 321 } |
254 } | 322 } |
255 | 323 |
256 private void createAndShowSnackbar(String title, int umaType, int itemId) { | 324 private void createAndShowSnackbar(String title, int umaType, int itemId) { |
257 if (getSnackbarManager() == null) { | 325 if (getSnackbarManager() == null) { |
258 // Directly apply menu option, if snackbar system is not working. | 326 // Directly apply menu option, if snackbar system is not working. |
259 handleTranslateOptionPostSnackbar(itemId); | 327 handleTranslateOptionPostSnackbar(itemId); |
260 return; | 328 return; |
261 } | 329 } |
330 switch (itemId) { | |
331 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: | |
332 recordInfobarAction(INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION ); | |
333 break; | |
334 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: | |
335 recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION) ; | |
336 break; | |
337 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: | |
338 recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRES SION); | |
339 break; | |
340 } | |
341 | |
262 getSnackbarManager().showSnackbar( | 342 getSnackbarManager().showSnackbar( |
263 Snackbar.make(title, new TranslateSnackbarController(itemId), | 343 Snackbar.make(title, new TranslateSnackbarController(itemId), |
264 Snackbar.TYPE_NOTIFICATION, umaType) | 344 Snackbar.TYPE_NOTIFICATION, umaType) |
265 .setSingleLine(false) | 345 .setSingleLine(false) |
266 .setAction( | 346 .setAction( |
267 getContext().getString(R.string.translate_snackb ar_cancel), null)); | 347 getContext().getString(R.string.translate_snackb ar_cancel), null)); |
268 } | 348 } |
269 | 349 |
270 private void handleTranslateOptionPostSnackbar(int itemId) { | 350 private void handleTranslateOptionPostSnackbar(int itemId) { |
271 switch (itemId) { | 351 switch (itemId) { |
272 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: | 352 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: |
273 mOptions.toggleAlwaysTranslateLanguageState( | 353 mOptions.toggleAlwaysTranslateLanguageState( |
274 !mOptions.alwaysTranslateLanguageState()); | 354 !mOptions.alwaysTranslateLanguageState()); |
275 nativeApplyBoolTranslateOption(mNativeTranslateInfoBarPtr, | 355 nativeApplyBoolTranslateOption(mNativeTranslateInfoBarPtr, |
276 TranslateOption.ALWAYS_TRANSLATE, mOptions.alwaysTransla teLanguageState()); | 356 TranslateOption.ALWAYS_TRANSLATE, mOptions.alwaysTransla teLanguageState()); |
277 return; | 357 return; |
278 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: | 358 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: |
279 nativeApplyBoolTranslateOption( | 359 nativeApplyBoolTranslateOption( |
280 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL ATE, true); | 360 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL ATE, true); |
281 return; | 361 return; |
282 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: | 362 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: |
283 nativeApplyBoolTranslateOption( | 363 nativeApplyBoolTranslateOption( |
284 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL ATE_SITE, true); | 364 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL ATE_SITE, true); |
285 return; | 365 return; |
286 } | 366 } |
287 } | 367 } |
288 | 368 |
369 private static void recordInfobarAction(int action) { | |
370 RecordHistogram.recordEnumeratedHistogram( | |
371 INFOBAR_HISTOGRAM, action, INFOBAR_HISTOGRAM_BOUNDARY); | |
372 } | |
373 | |
374 private void recordSparseInfobarLanguageData(String histogram, String langCo de) { | |
Ilya Sherman
2017/05/11 20:25:05
Optional nit: "Sparse" seems like an implementatio
ramyasharma
2017/05/12 01:50:10
Done.
| |
375 Integer hashCode = mOptions.getUMAHashCodeRepresentationFromCode(langCod e); | |
376 if (hashCode != null) { | |
377 RecordHistogram.recordSparseSlowlyHistogram(histogram, hashCode); | |
378 } | |
379 } | |
380 | |
289 private native void nativeApplyStringTranslateOption( | 381 private native void nativeApplyStringTranslateOption( |
290 long nativeTranslateCompactInfoBar, int option, String value); | 382 long nativeTranslateCompactInfoBar, int option, String value); |
291 private native void nativeApplyBoolTranslateOption( | 383 private native void nativeApplyBoolTranslateOption( |
292 long nativeTranslateCompactInfoBar, int option, boolean value); | 384 long nativeTranslateCompactInfoBar, int option, boolean value); |
293 } | 385 } |
OLD | NEW |