Chromium Code Reviews| 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 |