| 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 |