| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
|
| index 0389b7f0fbc1b7b468f98c37dd2d8af3314c876d..199ad2cba091ee96f33fe3bd5d3b560ae0c8ca49 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java
|
| @@ -11,6 +11,7 @@ import android.view.View.OnClickListener;
|
| import android.widget.LinearLayout;
|
|
|
| import org.chromium.base.annotations.CalledByNative;
|
| +import org.chromium.base.metrics.RecordHistogram;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.infobar.translate.TranslateMenu;
|
| import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper;
|
| @@ -36,6 +37,44 @@ class TranslateCompactInfoBar extends InfoBar
|
| private long mNativeTranslateInfoBarPtr;
|
| private TranslateTabLayout mTabLayout;
|
|
|
| + private static final String INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE =
|
| + "Translate.CompactInfobar.Language.Translate";
|
| + private static final String INFOBAR_HISTOGRAM_MORE_LANGUAGES_LANGUAGE =
|
| + "Translate.CompactInfobar.Language.MoreLanguages";
|
| + private static final String INFOBAR_HISTOGRAM_PAGE_NOT_IN_LANGUAGE =
|
| + "Translate.CompactInfobar.Language.PageNotIn";
|
| + private static final String INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE =
|
| + "Translate.CompactInfobar.Language.AlwaysTranslate";
|
| + private static final String INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE =
|
| + "Translate.CompactInfobar.Language.NeverTranslate";
|
| + private static final String INFOBAR_HISTOGRAM = "Translate.CompactInfobar.Event";
|
| +
|
| + /**
|
| + * This is used to back a UMA histogram, so it should be treated as
|
| + * append-only. The values should not be changed or reused, and
|
| + * INFOBAR_HISTOGRAM_BOUNDARY should be the last.
|
| + */
|
| + private static final int INFOBAR_IMPRESSION = 0;
|
| + private static final int INFOBAR_TRANSLATE = 1;
|
| + private static final int INFOBAR_DECLINE = 2;
|
| + private static final int INFOBAR_OPTIONS = 3;
|
| + private static final int INFOBAR_MORE_LANGUAGES = 4;
|
| + private static final int INFOBAR_MORE_LANGUAGES_TRANSLATE = 5;
|
| + private static final int INFOBAR_PAGE_NOT_IN = 6;
|
| + private static final int INFOBAR_ALWAYS_TRANSLATE = 7;
|
| + private static final int INFOBAR_NEVER_TRANSLATE = 8;
|
| + private static final int INFOBAR_NEVER_TRANSLATE_SITE = 9;
|
| + private static final int INFOBAR_SCROLL_HIDE = 10;
|
| + private static final int INFOBAR_SCROLL_SHOW = 11;
|
| + private static final int INFOBAR_REVERT = 12;
|
| + private static final int INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION = 13;
|
| + private static final int INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION = 14;
|
| + private static final int INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRESSION = 15;
|
| + private static final int INFOBAR_SNACKBAR_CANCEL_ALWAYS = 16;
|
| + private static final int INFOBAR_SNACKBAR_CANCEL_NEVER_SITE = 17;
|
| + private static final int INFOBAR_SNACKBAR_CANCEL_NEVER = 18;
|
| + private static final int INFOBAR_HISTOGRAM_BOUNDARY = 19;
|
| +
|
| // Need 2 instances of TranslateMenuHelper to prevent a race condition bug which happens when
|
| // showing language menu after dismissing overflow menu.
|
| private TranslateMenuHelper mOverflowMenuHelper;
|
| @@ -58,26 +97,40 @@ class TranslateCompactInfoBar extends InfoBar
|
|
|
| @Override
|
| public void onAction(Object actionData) {
|
| - // TODO(ramyasharma): Add logging metric to track cancel actions.
|
| - // Do nothing.
|
| + switch (mMenuItemId) {
|
| + case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
|
| + recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_ALWAYS);
|
| + return;
|
| + case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
|
| + recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER);
|
| + return;
|
| + case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
|
| + recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER_SITE);
|
| + return;
|
| + default:
|
| + assert false : "Unsupported Menu Item Id, when handling snackbar action";
|
| + return;
|
| + }
|
| }
|
| };
|
|
|
| @CalledByNative
|
| private static InfoBar create(int initialStep, String sourceLanguageCode,
|
| String targetLanguageCode, boolean alwaysTranslate, boolean triggeredFromMenu,
|
| - String[] languages, String[] codes) {
|
| + String[] languages, String[] languageCodes, int[] hashCodes) {
|
| + recordInfobarAction(INFOBAR_IMPRESSION);
|
| return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targetLanguageCode,
|
| - alwaysTranslate, triggeredFromMenu, languages, codes);
|
| + alwaysTranslate, triggeredFromMenu, languages, languageCodes, hashCodes);
|
| }
|
|
|
| TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String targetLanguageCode,
|
| boolean alwaysTranslate, boolean triggeredFromMenu, String[] languages,
|
| - String[] codes) {
|
| + String[] languageCodes, int[] hashCodes) {
|
| super(R.drawable.infobar_translate_compact, null, null);
|
| +
|
| mInitialStep = initialStep;
|
| - mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCode, languages, codes,
|
| - alwaysTranslate, triggeredFromMenu);
|
| + mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCode, languages,
|
| + languageCodes, alwaysTranslate, triggeredFromMenu, hashCodes);
|
| }
|
|
|
| @Override
|
| @@ -107,6 +160,7 @@ class TranslateCompactInfoBar extends InfoBar
|
| mMenuButton.setOnClickListener(new OnClickListener() {
|
| @Override
|
| public void onClick(View v) {
|
| + recordInfobarAction(INFOBAR_OPTIONS);
|
| initMenuHelper(TranslateMenu.MENU_OVERFLOW);
|
| mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW);
|
| }
|
| @@ -192,9 +246,13 @@ class TranslateCompactInfoBar extends InfoBar
|
| public void onTabSelected(TabLayout.Tab tab) {
|
| switch (tab.getPosition()) {
|
| case SOURCE_TAB_INDEX:
|
| + recordInfobarAction(INFOBAR_REVERT);
|
| onButtonClicked(ActionType.TRANSLATE_SHOW_ORIGINAL);
|
| return;
|
| case TARGET_TAB_INDEX:
|
| + recordInfobarAction(INFOBAR_TRANSLATE);
|
| + recordInfobarLanguageData(
|
| + INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE, mOptions.targetLanguageCode());
|
| startTranslating(TARGET_TAB_INDEX);
|
| return;
|
| default:
|
| @@ -213,10 +271,14 @@ class TranslateCompactInfoBar extends InfoBar
|
| mUserInteracted = true;
|
| switch (itemId) {
|
| case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE:
|
| + recordInfobarAction(INFOBAR_MORE_LANGUAGES);
|
| initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE);
|
| mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE);
|
| return;
|
| case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
|
| + recordInfobarAction(INFOBAR_ALWAYS_TRANSLATE);
|
| + recordInfobarLanguageData(
|
| + INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE, mOptions.sourceLanguageCode());
|
| // Only show snackbar when "Always Translate" is enabled.
|
| if (!mOptions.alwaysTranslateLanguageState()) {
|
| createAndShowSnackbar(
|
| @@ -228,17 +290,22 @@ class TranslateCompactInfoBar extends InfoBar
|
| }
|
| return;
|
| case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
|
| + recordInfobarAction(INFOBAR_NEVER_TRANSLATE);
|
| + recordInfobarLanguageData(
|
| + INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE, mOptions.sourceLanguageCode());
|
| createAndShowSnackbar(
|
| getContext().getString(R.string.translate_snackbar_language_never,
|
| mOptions.sourceLanguageName()),
|
| Snackbar.UMA_TRANSLATE_NEVER, itemId);
|
| return;
|
| case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
|
| + recordInfobarAction(INFOBAR_NEVER_TRANSLATE_SITE);
|
| createAndShowSnackbar(
|
| getContext().getString(R.string.translate_snackbar_site_never),
|
| Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId);
|
| return;
|
| case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE:
|
| + recordInfobarAction(INFOBAR_PAGE_NOT_IN);
|
| initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE);
|
| mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE);
|
| return;
|
| @@ -251,6 +318,8 @@ class TranslateCompactInfoBar extends InfoBar
|
| public void onTargetMenuItemClicked(String code) {
|
| // Reset target code in both UI and native.
|
| if (mOptions.setTargetLanguage(code)) {
|
| + recordInfobarLanguageData(
|
| + INFOBAR_HISTOGRAM_MORE_LANGUAGES_LANGUAGE, mOptions.targetLanguageCode());
|
| nativeApplyStringTranslateOption(
|
| mNativeTranslateInfoBarPtr, TranslateOption.TARGET_CODE, code);
|
| // Adjust UI.
|
| @@ -263,6 +332,8 @@ class TranslateCompactInfoBar extends InfoBar
|
| public void onSourceMenuItemClicked(String code) {
|
| // Reset source code in both UI and native.
|
| if (mOptions.setSourceLanguage(code)) {
|
| + recordInfobarLanguageData(
|
| + INFOBAR_HISTOGRAM_PAGE_NOT_IN_LANGUAGE, mOptions.sourceLanguageCode());
|
| nativeApplyStringTranslateOption(
|
| mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, code);
|
| // Adjust UI.
|
| @@ -277,6 +348,20 @@ class TranslateCompactInfoBar extends InfoBar
|
| handleTranslateOptionPostSnackbar(itemId);
|
| return;
|
| }
|
| + switch (itemId) {
|
| + case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
|
| + recordInfobarAction(INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION);
|
| + break;
|
| + case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
|
| + recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION);
|
| + break;
|
| + case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
|
| + recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRESSION);
|
| + break;
|
| + default:
|
| + assert false : "Unsupported Menu Item Id, to show snackbar.";
|
| + }
|
| +
|
| getSnackbarManager().showSnackbar(
|
| Snackbar.make(title, new TranslateSnackbarController(itemId),
|
| Snackbar.TYPE_NOTIFICATION, umaType)
|
| @@ -301,6 +386,20 @@ class TranslateCompactInfoBar extends InfoBar
|
| nativeApplyBoolTranslateOption(
|
| mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSLATE_SITE, true);
|
| return;
|
| + default:
|
| + assert false : "Unsupported Menu Item Id, in handle post snackbar";
|
| + }
|
| + }
|
| +
|
| + private static void recordInfobarAction(int action) {
|
| + RecordHistogram.recordEnumeratedHistogram(
|
| + INFOBAR_HISTOGRAM, action, INFOBAR_HISTOGRAM_BOUNDARY);
|
| + }
|
| +
|
| + private void recordInfobarLanguageData(String histogram, String langCode) {
|
| + Integer hashCode = mOptions.getUMAHashCodeFromCode(langCode);
|
| + if (hashCode != null) {
|
| + RecordHistogram.recordSparseSlowlyHistogram(histogram, hashCode);
|
| }
|
| }
|
|
|
|
|