| 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 d9aefd6b4cb78da5e524dd3aea1675cbe40ae5b5..fbadb25bc70471b8b5dda92911d99d2116fce09d 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
|
| @@ -16,6 +16,7 @@ import org.chromium.chrome.browser.infobar.translate.TranslateMenu;
|
| import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper;
|
| import org.chromium.chrome.browser.infobar.translate.TranslateTabLayout;
|
| import org.chromium.chrome.browser.snackbar.Snackbar;
|
| +import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
|
| import org.chromium.chrome.browser.widget.TintedImageButton;
|
| import org.chromium.ui.widget.Toast;
|
|
|
| @@ -42,6 +43,26 @@ class TranslateCompactInfoBar extends InfoBar
|
|
|
| private TintedImageButton mMenuButton;
|
|
|
| + /** The controller for translate UI snackbars. */
|
| + class TranslateSnackbarController implements SnackbarController {
|
| + private final int mMenuItemId;
|
| +
|
| + public TranslateSnackbarController(int menuItemId) {
|
| + mMenuItemId = menuItemId;
|
| + }
|
| +
|
| + @Override
|
| + public void onDismissNoAction(Object actionData) {
|
| + handleTranslateOptionPostSnackbar(mMenuItemId);
|
| + }
|
| +
|
| + @Override
|
| + public void onAction(Object actionData) {
|
| + // TODO(ramyasharma): Add logging metric to track cancel actions.
|
| + // Do nothing.
|
| + }
|
| + };
|
| +
|
| @CalledByNative
|
| private static InfoBar create(int initialStep, String sourceLanguageCode,
|
| String targetLanguageCode, boolean alwaysTranslate, boolean triggeredFromMenu,
|
| @@ -178,24 +199,26 @@ class TranslateCompactInfoBar extends InfoBar
|
| mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE);
|
| return;
|
| case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
|
| - mOptions.toggleAlwaysTranslateLanguageState(
|
| - !mOptions.alwaysTranslateLanguageState());
|
| - nativeApplyBoolTranslateOption(mNativeTranslateInfoBarPtr,
|
| - TranslateOption.ALWAYS_TRANSLATE, mOptions.alwaysTranslateLanguageState());
|
| // Only show snackbar when "Always Translate" is enabled.
|
| - if (mOptions.alwaysTranslateLanguageState()) {
|
| - showSnackbar(TranslateSnackbarType.ALWAYS_TRANSLATE);
|
| + if (!mOptions.alwaysTranslateLanguageState()) {
|
| + createAndShowSnackbar(
|
| + getContext().getString(R.string.translate_snackbar_always_translate,
|
| + mOptions.sourceLanguageName(), mOptions.targetLanguageName()),
|
| + Snackbar.UMA_TRANSLATE_ALWAYS, itemId);
|
| + } else {
|
| + handleTranslateOptionPostSnackbar(itemId);
|
| }
|
| return;
|
| case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
|
| - nativeApplyBoolTranslateOption(
|
| - mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSLATE, true);
|
| - showSnackbar(TranslateSnackbarType.NEVER_TRANSLATE);
|
| + createAndShowSnackbar(
|
| + getContext().getString(R.string.translate_snackbar_language_never,
|
| + mOptions.sourceLanguageName()),
|
| + Snackbar.UMA_TRANSLATE_NEVER, itemId);
|
| return;
|
| case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
|
| - nativeApplyBoolTranslateOption(
|
| - mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSLATE_SITE, true);
|
| - showSnackbar(TranslateSnackbarType.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:
|
| initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE);
|
| @@ -230,29 +253,37 @@ class TranslateCompactInfoBar extends InfoBar
|
| }
|
| }
|
|
|
| - private void showSnackbar(int snackbarType) {
|
| - if (snackbarType == TranslateSnackbarType.NEVER_TRANSLATE) {
|
| - createAndShowSnackbar(getContext().getString(R.string.translate_snackbar_language_never,
|
| - mOptions.sourceLanguageName()),
|
| - Snackbar.UMA_TRANSLATE_NEVER);
|
| - } else if (snackbarType == TranslateSnackbarType.ALWAYS_TRANSLATE) {
|
| - createAndShowSnackbar(
|
| - getContext().getString(R.string.translate_snackbar_always_translate,
|
| - mOptions.sourceLanguageName(), mOptions.targetLanguageName()),
|
| - Snackbar.UMA_TRANSLATE_ALWAYS);
|
| - } else if (snackbarType == TranslateSnackbarType.NEVER_TRANSLATE_SITE) {
|
| - createAndShowSnackbar(getContext().getString(R.string.translate_snackbar_site_never),
|
| - Snackbar.UMA_TRANSLATE_NEVER_SITE);
|
| + private void createAndShowSnackbar(String title, int umaType, int itemId) {
|
| + if (getSnackbarManager() == null) {
|
| + // Directly apply menu option, if snackbar system is not working.
|
| + handleTranslateOptionPostSnackbar(itemId);
|
| + return;
|
| }
|
| + getSnackbarManager().showSnackbar(
|
| + Snackbar.make(title, new TranslateSnackbarController(itemId),
|
| + Snackbar.TYPE_NOTIFICATION, umaType)
|
| + .setSingleLine(false)
|
| + .setAction(
|
| + getContext().getString(R.string.translate_snackbar_cancel), null));
|
| }
|
|
|
| - private void createAndShowSnackbar(String title, int type) {
|
| - if (getSnackbarManager() == null) {
|
| - return;
|
| + private void handleTranslateOptionPostSnackbar(int itemId) {
|
| + switch (itemId) {
|
| + case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
|
| + mOptions.toggleAlwaysTranslateLanguageState(
|
| + !mOptions.alwaysTranslateLanguageState());
|
| + nativeApplyBoolTranslateOption(mNativeTranslateInfoBarPtr,
|
| + TranslateOption.ALWAYS_TRANSLATE, mOptions.alwaysTranslateLanguageState());
|
| + return;
|
| + case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
|
| + nativeApplyBoolTranslateOption(
|
| + mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSLATE, true);
|
| + return;
|
| + case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
|
| + nativeApplyBoolTranslateOption(
|
| + mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSLATE_SITE, true);
|
| + return;
|
| }
|
| - getSnackbarManager().showSnackbar(Snackbar.make(title, new TranslateSnackbarController(),
|
| - Snackbar.TYPE_NOTIFICATION, type)
|
| - .setSingleLine(false));
|
| }
|
|
|
| private native void nativeApplyStringTranslateOption(
|
|
|