Chromium Code Reviews| 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 fbadb25bc70471b8b5dda92911d99d2116fce09d..9fb8ba6789dc692be3337b1aee57ba8c74147134 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 Integer INFOBAR_IMPRESSION = 0; |
|
mdjones
2017/05/12 16:20:17
nit: why are these all "Integer" objects and not "
ramyasharma
2017/05/13 09:40:02
Done.
|
| + private static final Integer INFOBAR_TRANSLATE = 1; |
| + private static final Integer INFOBAR_DECLINE = 2; |
| + private static final Integer INFOBAR_OPTIONS = 3; |
| + private static final Integer INFOBAR_MORE_LANGUAGES = 4; |
| + private static final Integer INFOBAR_MORE_LANGUAGES_TRANSLATE = 5; |
| + private static final Integer INFOBAR_PAGE_NOT_IN = 6; |
| + private static final Integer INFOBAR_ALWAYS_TRANSLATE = 7; |
| + private static final Integer INFOBAR_NEVER_TRANSLATE = 8; |
| + private static final Integer INFOBAR_NEVER_TRANSLATE_SITE = 9; |
| + private static final Integer INFOBAR_SCROLL_HIDE = 10; |
| + private static final Integer INFOBAR_SCROLL_SHOW = 11; |
| + private static final Integer INFOBAR_REVERT = 12; |
| + private static final Integer INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION = 13; |
| + private static final Integer INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION = 14; |
| + private static final Integer INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRESSION = 15; |
| + private static final Integer INFOBAR_SNACKBAR_CANCEL_ALWAYS = 16; |
| + private static final Integer INFOBAR_SNACKBAR_CANCEL_NEVER_SITE = 17; |
| + private static final Integer INFOBAR_SNACKBAR_CANCEL_NEVER = 18; |
| + private static final Integer 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,37 @@ 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; |
| + } |
| } |
| }; |
| @CalledByNative |
| private static InfoBar create(int initialStep, String sourceLanguageCode, |
| String targetLanguageCode, boolean alwaysTranslate, boolean triggeredFromMenu, |
| - String[] languages, String[] codes) { |
| + String[] languages, String[] codes, int[] hashCodes) { |
| + recordInfobarAction(INFOBAR_IMPRESSION); |
| return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targetLanguageCode, |
| - alwaysTranslate, triggeredFromMenu, languages, codes); |
| + alwaysTranslate, triggeredFromMenu, languages, codes, hashCodes); |
| } |
| TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String targetLanguageCode, |
| - boolean alwaysTranslate, boolean triggeredFromMenu, String[] languages, |
| - String[] codes) { |
| + boolean alwaysTranslate, boolean triggeredFromMenu, String[] languages, String[] codes, |
|
mdjones
2017/05/12 16:20:17
nit: "code" is used in a lot of names here. Can "S
ramyasharma
2017/05/13 09:40:02
Done.
|
| + int[] hashCodes) { |
| super(R.drawable.infobar_translate_compact, null, null); |
| + |
| mInitialStep = initialStep; |
| mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCode, languages, codes, |
| - alwaysTranslate, triggeredFromMenu); |
| + alwaysTranslate, triggeredFromMenu, hashCodes); |
| } |
| @Override |
| @@ -106,6 +156,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); |
| } |
| @@ -175,9 +226,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: |
| @@ -195,10 +250,14 @@ class TranslateCompactInfoBar extends InfoBar |
| public void onOverflowMenuItemClicked(int itemId) { |
| 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( |
| @@ -210,17 +269,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; |
| @@ -233,6 +297,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. |
| @@ -245,6 +311,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. |
| @@ -259,6 +327,18 @@ 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; |
| + } |
| + |
| getSnackbarManager().showSnackbar( |
| Snackbar.make(title, new TranslateSnackbarController(itemId), |
| Snackbar.TYPE_NOTIFICATION, umaType) |
| @@ -286,6 +366,18 @@ class TranslateCompactInfoBar extends InfoBar |
| } |
| } |
| + private static void recordInfobarAction(int action) { |
| + RecordHistogram.recordEnumeratedHistogram( |
| + INFOBAR_HISTOGRAM, action, INFOBAR_HISTOGRAM_BOUNDARY); |
| + } |
| + |
| + private void recordInfobarLanguageData(String histogram, String langCode) { |
| + Integer hashCode = mOptions.getUMAHashCodeRepresentationFromCode(langCode); |
| + if (hashCode != null) { |
| + RecordHistogram.recordSparseSlowlyHistogram(histogram, hashCode); |
| + } |
| + } |
| + |
| private native void nativeApplyStringTranslateOption( |
| long nativeTranslateCompactInfoBar, int option, String value); |
| private native void nativeApplyBoolTranslateOption( |