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 int INFOBAR_IMPRESSION = 0; |
| 58 private static final int INFOBAR_TRANSLATE = 1; |
| 59 private static final int INFOBAR_DECLINE = 2; |
| 60 private static final int INFOBAR_OPTIONS = 3; |
| 61 private static final int INFOBAR_MORE_LANGUAGES = 4; |
| 62 private static final int INFOBAR_MORE_LANGUAGES_TRANSLATE = 5; |
| 63 private static final int INFOBAR_PAGE_NOT_IN = 6; |
| 64 private static final int INFOBAR_ALWAYS_TRANSLATE = 7; |
| 65 private static final int INFOBAR_NEVER_TRANSLATE = 8; |
| 66 private static final int INFOBAR_NEVER_TRANSLATE_SITE = 9; |
| 67 private static final int INFOBAR_SCROLL_HIDE = 10; |
| 68 private static final int INFOBAR_SCROLL_SHOW = 11; |
| 69 private static final int INFOBAR_REVERT = 12; |
| 70 private static final int INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION = 13; |
| 71 private static final int INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION = 14; |
| 72 private static final int INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRESSION =
15; |
| 73 private static final int INFOBAR_SNACKBAR_CANCEL_ALWAYS = 16; |
| 74 private static final int INFOBAR_SNACKBAR_CANCEL_NEVER_SITE = 17; |
| 75 private static final int INFOBAR_SNACKBAR_CANCEL_NEVER = 18; |
| 76 private static final int 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 private TintedImageButton mMenuButton; | 82 private TintedImageButton mMenuButton; |
44 private boolean mUserInteracted; | 83 private boolean mUserInteracted; |
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 default: |
| 111 assert false : "Unsupported Menu Item Id, when handling snac
kbar action"; |
| 112 return; |
| 113 } |
63 } | 114 } |
64 }; | 115 }; |
65 | 116 |
66 @CalledByNative | 117 @CalledByNative |
67 private static InfoBar create(int initialStep, String sourceLanguageCode, | 118 private static InfoBar create(int initialStep, String sourceLanguageCode, |
68 String targetLanguageCode, boolean alwaysTranslate, boolean triggere
dFromMenu, | 119 String targetLanguageCode, boolean alwaysTranslate, boolean triggere
dFromMenu, |
69 String[] languages, String[] codes) { | 120 String[] languages, String[] languageCodes, int[] hashCodes) { |
| 121 recordInfobarAction(INFOBAR_IMPRESSION); |
70 return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targ
etLanguageCode, | 122 return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targ
etLanguageCode, |
71 alwaysTranslate, triggeredFromMenu, languages, codes); | 123 alwaysTranslate, triggeredFromMenu, languages, languageCodes, ha
shCodes); |
72 } | 124 } |
73 | 125 |
74 TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String t
argetLanguageCode, | 126 TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String t
argetLanguageCode, |
75 boolean alwaysTranslate, boolean triggeredFromMenu, String[] languag
es, | 127 boolean alwaysTranslate, boolean triggeredFromMenu, String[] languag
es, |
76 String[] codes) { | 128 String[] languageCodes, int[] hashCodes) { |
77 super(R.drawable.infobar_translate_compact, null, null); | 129 super(R.drawable.infobar_translate_compact, null, null); |
| 130 |
78 mInitialStep = initialStep; | 131 mInitialStep = initialStep; |
79 mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCod
e, languages, codes, | 132 mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCod
e, languages, |
80 alwaysTranslate, triggeredFromMenu); | 133 languageCodes, alwaysTranslate, triggeredFromMenu, hashCodes); |
81 } | 134 } |
82 | 135 |
83 @Override | 136 @Override |
84 protected boolean usesCompactLayout() { | 137 protected boolean usesCompactLayout() { |
85 return true; | 138 return true; |
86 } | 139 } |
87 | 140 |
88 @Override | 141 @Override |
89 protected void createCompactLayoutContent(InfoBarCompactLayout parent) { | 142 protected void createCompactLayoutContent(InfoBarCompactLayout parent) { |
90 LinearLayout content = | 143 LinearLayout content = |
91 (LinearLayout) LayoutInflater.from(getContext()) | 144 (LinearLayout) LayoutInflater.from(getContext()) |
92 .inflate(R.layout.infobar_translate_compact_content, par
ent, false); | 145 .inflate(R.layout.infobar_translate_compact_content, par
ent, false); |
93 | 146 |
94 mTabLayout = (TranslateTabLayout) content.findViewById(R.id.translate_in
fobar_tabs); | 147 mTabLayout = (TranslateTabLayout) content.findViewById(R.id.translate_in
fobar_tabs); |
95 mTabLayout.addTabs(mOptions.sourceLanguageName(), mOptions.targetLanguag
eName()); | 148 mTabLayout.addTabs(mOptions.sourceLanguageName(), mOptions.targetLanguag
eName()); |
96 | 149 |
97 // Set translating status in the beginning for pages translated automati
cally. | 150 // Set translating status in the beginning for pages translated automati
cally. |
98 if (mInitialStep == TRANSLATING_INFOBAR) { | 151 if (mInitialStep == TRANSLATING_INFOBAR) { |
99 mTabLayout.getTabAt(TARGET_TAB_INDEX).select(); | 152 mTabLayout.getTabAt(TARGET_TAB_INDEX).select(); |
100 mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX); | 153 mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX); |
101 mUserInteracted = true; | 154 mUserInteracted = true; |
102 } | 155 } |
103 | 156 |
104 mTabLayout.addOnTabSelectedListener(this); | 157 mTabLayout.addOnTabSelectedListener(this); |
105 | 158 |
106 mMenuButton = (TintedImageButton) content.findViewById(R.id.translate_in
fobar_menu_button); | 159 mMenuButton = (TintedImageButton) content.findViewById(R.id.translate_in
fobar_menu_button); |
107 mMenuButton.setOnClickListener(new OnClickListener() { | 160 mMenuButton.setOnClickListener(new OnClickListener() { |
108 @Override | 161 @Override |
109 public void onClick(View v) { | 162 public void onClick(View v) { |
| 163 recordInfobarAction(INFOBAR_OPTIONS); |
110 initMenuHelper(TranslateMenu.MENU_OVERFLOW); | 164 initMenuHelper(TranslateMenu.MENU_OVERFLOW); |
111 mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW); | 165 mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW); |
112 } | 166 } |
113 }); | 167 }); |
114 | 168 |
115 parent.addContent(content, 1.0f); | 169 parent.addContent(content, 1.0f); |
116 } | 170 } |
117 | 171 |
118 private void initMenuHelper(int menuType) { | 172 private void initMenuHelper(int menuType) { |
119 switch (menuType) { | 173 switch (menuType) { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 if (!mUserInteracted) { | 239 if (!mUserInteracted) { |
186 onButtonClicked(ActionType.CANCEL); | 240 onButtonClicked(ActionType.CANCEL); |
187 } | 241 } |
188 super.onCloseButtonClicked(); | 242 super.onCloseButtonClicked(); |
189 } | 243 } |
190 | 244 |
191 @Override | 245 @Override |
192 public void onTabSelected(TabLayout.Tab tab) { | 246 public void onTabSelected(TabLayout.Tab tab) { |
193 switch (tab.getPosition()) { | 247 switch (tab.getPosition()) { |
194 case SOURCE_TAB_INDEX: | 248 case SOURCE_TAB_INDEX: |
| 249 recordInfobarAction(INFOBAR_REVERT); |
195 onButtonClicked(ActionType.TRANSLATE_SHOW_ORIGINAL); | 250 onButtonClicked(ActionType.TRANSLATE_SHOW_ORIGINAL); |
196 return; | 251 return; |
197 case TARGET_TAB_INDEX: | 252 case TARGET_TAB_INDEX: |
| 253 recordInfobarAction(INFOBAR_TRANSLATE); |
| 254 recordInfobarLanguageData( |
| 255 INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE, mOptions.targetLan
guageCode()); |
198 startTranslating(TARGET_TAB_INDEX); | 256 startTranslating(TARGET_TAB_INDEX); |
199 return; | 257 return; |
200 default: | 258 default: |
201 assert false : "Unexpected Tab Index"; | 259 assert false : "Unexpected Tab Index"; |
202 } | 260 } |
203 } | 261 } |
204 | 262 |
205 @Override | 263 @Override |
206 public void onTabUnselected(TabLayout.Tab tab) {} | 264 public void onTabUnselected(TabLayout.Tab tab) {} |
207 | 265 |
208 @Override | 266 @Override |
209 public void onTabReselected(TabLayout.Tab tab) {} | 267 public void onTabReselected(TabLayout.Tab tab) {} |
210 | 268 |
211 @Override | 269 @Override |
212 public void onOverflowMenuItemClicked(int itemId) { | 270 public void onOverflowMenuItemClicked(int itemId) { |
213 mUserInteracted = true; | 271 mUserInteracted = true; |
214 switch (itemId) { | 272 switch (itemId) { |
215 case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE: | 273 case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE: |
| 274 recordInfobarAction(INFOBAR_MORE_LANGUAGES); |
216 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE); | 275 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE); |
217 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE); | 276 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE); |
218 return; | 277 return; |
219 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: | 278 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: |
| 279 recordInfobarAction(INFOBAR_ALWAYS_TRANSLATE); |
| 280 recordInfobarLanguageData( |
| 281 INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE, mOptions.so
urceLanguageCode()); |
220 // Only show snackbar when "Always Translate" is enabled. | 282 // Only show snackbar when "Always Translate" is enabled. |
221 if (!mOptions.alwaysTranslateLanguageState()) { | 283 if (!mOptions.alwaysTranslateLanguageState()) { |
222 createAndShowSnackbar( | 284 createAndShowSnackbar( |
223 getContext().getString(R.string.translate_snackbar_a
lways_translate, | 285 getContext().getString(R.string.translate_snackbar_a
lways_translate, |
224 mOptions.sourceLanguageName(), mOptions.targ
etLanguageName()), | 286 mOptions.sourceLanguageName(), mOptions.targ
etLanguageName()), |
225 Snackbar.UMA_TRANSLATE_ALWAYS, itemId); | 287 Snackbar.UMA_TRANSLATE_ALWAYS, itemId); |
226 } else { | 288 } else { |
227 handleTranslateOptionPostSnackbar(itemId); | 289 handleTranslateOptionPostSnackbar(itemId); |
228 } | 290 } |
229 return; | 291 return; |
230 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: | 292 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: |
| 293 recordInfobarAction(INFOBAR_NEVER_TRANSLATE); |
| 294 recordInfobarLanguageData( |
| 295 INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE, mOptions.sou
rceLanguageCode()); |
231 createAndShowSnackbar( | 296 createAndShowSnackbar( |
232 getContext().getString(R.string.translate_snackbar_langu
age_never, | 297 getContext().getString(R.string.translate_snackbar_langu
age_never, |
233 mOptions.sourceLanguageName()), | 298 mOptions.sourceLanguageName()), |
234 Snackbar.UMA_TRANSLATE_NEVER, itemId); | 299 Snackbar.UMA_TRANSLATE_NEVER, itemId); |
235 return; | 300 return; |
236 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: | 301 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: |
| 302 recordInfobarAction(INFOBAR_NEVER_TRANSLATE_SITE); |
237 createAndShowSnackbar( | 303 createAndShowSnackbar( |
238 getContext().getString(R.string.translate_snackbar_site_
never), | 304 getContext().getString(R.string.translate_snackbar_site_
never), |
239 Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId); | 305 Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId); |
240 return; | 306 return; |
241 case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE: | 307 case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE: |
| 308 recordInfobarAction(INFOBAR_PAGE_NOT_IN); |
242 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE); | 309 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE); |
243 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE); | 310 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE); |
244 return; | 311 return; |
245 default: | 312 default: |
246 assert false : "Unexpected overflow menu code"; | 313 assert false : "Unexpected overflow menu code"; |
247 } | 314 } |
248 } | 315 } |
249 | 316 |
250 @Override | 317 @Override |
251 public void onTargetMenuItemClicked(String code) { | 318 public void onTargetMenuItemClicked(String code) { |
252 // Reset target code in both UI and native. | 319 // Reset target code in both UI and native. |
253 if (mOptions.setTargetLanguage(code)) { | 320 if (mOptions.setTargetLanguage(code)) { |
| 321 recordInfobarLanguageData( |
| 322 INFOBAR_HISTOGRAM_MORE_LANGUAGES_LANGUAGE, mOptions.targetLa
nguageCode()); |
254 nativeApplyStringTranslateOption( | 323 nativeApplyStringTranslateOption( |
255 mNativeTranslateInfoBarPtr, TranslateOption.TARGET_CODE, cod
e); | 324 mNativeTranslateInfoBarPtr, TranslateOption.TARGET_CODE, cod
e); |
256 // Adjust UI. | 325 // Adjust UI. |
257 mTabLayout.replaceTabTitle(TARGET_TAB_INDEX, mOptions.getRepresentat
ionFromCode(code)); | 326 mTabLayout.replaceTabTitle(TARGET_TAB_INDEX, mOptions.getRepresentat
ionFromCode(code)); |
258 startTranslating(mTabLayout.getSelectedTabPosition()); | 327 startTranslating(mTabLayout.getSelectedTabPosition()); |
259 } | 328 } |
260 } | 329 } |
261 | 330 |
262 @Override | 331 @Override |
263 public void onSourceMenuItemClicked(String code) { | 332 public void onSourceMenuItemClicked(String code) { |
264 // Reset source code in both UI and native. | 333 // Reset source code in both UI and native. |
265 if (mOptions.setSourceLanguage(code)) { | 334 if (mOptions.setSourceLanguage(code)) { |
| 335 recordInfobarLanguageData( |
| 336 INFOBAR_HISTOGRAM_PAGE_NOT_IN_LANGUAGE, mOptions.sourceLangu
ageCode()); |
266 nativeApplyStringTranslateOption( | 337 nativeApplyStringTranslateOption( |
267 mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, cod
e); | 338 mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, cod
e); |
268 // Adjust UI. | 339 // Adjust UI. |
269 mTabLayout.replaceTabTitle(SOURCE_TAB_INDEX, mOptions.getRepresentat
ionFromCode(code)); | 340 mTabLayout.replaceTabTitle(SOURCE_TAB_INDEX, mOptions.getRepresentat
ionFromCode(code)); |
270 startTranslating(mTabLayout.getSelectedTabPosition()); | 341 startTranslating(mTabLayout.getSelectedTabPosition()); |
271 } | 342 } |
272 } | 343 } |
273 | 344 |
274 private void createAndShowSnackbar(String title, int umaType, int itemId) { | 345 private void createAndShowSnackbar(String title, int umaType, int itemId) { |
275 if (getSnackbarManager() == null) { | 346 if (getSnackbarManager() == null) { |
276 // Directly apply menu option, if snackbar system is not working. | 347 // Directly apply menu option, if snackbar system is not working. |
277 handleTranslateOptionPostSnackbar(itemId); | 348 handleTranslateOptionPostSnackbar(itemId); |
278 return; | 349 return; |
279 } | 350 } |
| 351 switch (itemId) { |
| 352 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: |
| 353 recordInfobarAction(INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION
); |
| 354 break; |
| 355 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: |
| 356 recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION)
; |
| 357 break; |
| 358 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: |
| 359 recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRES
SION); |
| 360 break; |
| 361 default: |
| 362 assert false : "Unsupported Menu Item Id, to show snackbar."; |
| 363 } |
| 364 |
280 getSnackbarManager().showSnackbar( | 365 getSnackbarManager().showSnackbar( |
281 Snackbar.make(title, new TranslateSnackbarController(itemId), | 366 Snackbar.make(title, new TranslateSnackbarController(itemId), |
282 Snackbar.TYPE_NOTIFICATION, umaType) | 367 Snackbar.TYPE_NOTIFICATION, umaType) |
283 .setSingleLine(false) | 368 .setSingleLine(false) |
284 .setAction( | 369 .setAction( |
285 getContext().getString(R.string.translate_snackb
ar_cancel), null)); | 370 getContext().getString(R.string.translate_snackb
ar_cancel), null)); |
286 } | 371 } |
287 | 372 |
288 private void handleTranslateOptionPostSnackbar(int itemId) { | 373 private void handleTranslateOptionPostSnackbar(int itemId) { |
289 switch (itemId) { | 374 switch (itemId) { |
290 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: | 375 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: |
291 mOptions.toggleAlwaysTranslateLanguageState( | 376 mOptions.toggleAlwaysTranslateLanguageState( |
292 !mOptions.alwaysTranslateLanguageState()); | 377 !mOptions.alwaysTranslateLanguageState()); |
293 nativeApplyBoolTranslateOption(mNativeTranslateInfoBarPtr, | 378 nativeApplyBoolTranslateOption(mNativeTranslateInfoBarPtr, |
294 TranslateOption.ALWAYS_TRANSLATE, mOptions.alwaysTransla
teLanguageState()); | 379 TranslateOption.ALWAYS_TRANSLATE, mOptions.alwaysTransla
teLanguageState()); |
295 return; | 380 return; |
296 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: | 381 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: |
297 nativeApplyBoolTranslateOption( | 382 nativeApplyBoolTranslateOption( |
298 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL
ATE, true); | 383 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL
ATE, true); |
299 return; | 384 return; |
300 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: | 385 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: |
301 nativeApplyBoolTranslateOption( | 386 nativeApplyBoolTranslateOption( |
302 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL
ATE_SITE, true); | 387 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL
ATE_SITE, true); |
303 return; | 388 return; |
| 389 default: |
| 390 assert false : "Unsupported Menu Item Id, in handle post snackba
r"; |
304 } | 391 } |
305 } | 392 } |
306 | 393 |
| 394 private static void recordInfobarAction(int action) { |
| 395 RecordHistogram.recordEnumeratedHistogram( |
| 396 INFOBAR_HISTOGRAM, action, INFOBAR_HISTOGRAM_BOUNDARY); |
| 397 } |
| 398 |
| 399 private void recordInfobarLanguageData(String histogram, String langCode) { |
| 400 Integer hashCode = mOptions.getUMAHashCodeFromCode(langCode); |
| 401 if (hashCode != null) { |
| 402 RecordHistogram.recordSparseSlowlyHistogram(histogram, hashCode); |
| 403 } |
| 404 } |
| 405 |
307 private native void nativeApplyStringTranslateOption( | 406 private native void nativeApplyStringTranslateOption( |
308 long nativeTranslateCompactInfoBar, int option, String value); | 407 long nativeTranslateCompactInfoBar, int option, String value); |
309 private native void nativeApplyBoolTranslateOption( | 408 private native void nativeApplyBoolTranslateOption( |
310 long nativeTranslateCompactInfoBar, int option, boolean value); | 409 long nativeTranslateCompactInfoBar, int option, boolean value); |
311 } | 410 } |
OLD | NEW |