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 0389b7f0fbc1b7b468f98c37dd2d8af3314c876d..689fd1c0bf21b698d0cdc31174bdd166dc4f439e 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 |
| @@ -21,7 +21,7 @@ import org.chromium.chrome.browser.widget.TintedImageButton; |
| import org.chromium.ui.widget.Toast; |
| /** |
| - * Java version of the compcat translate infobar |
| + * Java version of the compact translate infobar. |
| */ |
| class TranslateCompactInfoBar extends InfoBar |
| implements TabLayout.OnTabSelectedListener, TranslateMenuHelper.TranslateMenuListener { |
| @@ -30,6 +30,15 @@ class TranslateCompactInfoBar extends InfoBar |
| private static final int SOURCE_TAB_INDEX = 0; |
| private static final int TARGET_TAB_INDEX = 1; |
| + // Action ID for Snackbar. |
| + // Actions performed by clicking on on the overflow menu. |
| + public static final int ACTION_OVERFLOW_ALWAYS_TRANSLATE = 0; |
| + public static final int ACTION_OVERFLOW_NEVER_SITE = 1; |
| + public static final int ACTION_OVERFLOW_NEVER_LANGUAGE = 2; |
| + // Actions triggered automatically (when translation or denied count reaches the threshold) |
|
mdjones
2017/05/12 17:12:01
nit: punctuation.
Marti Wong
2017/05/14 04:30:47
Done.
|
| + public static final int ACTION_AUTO_ALWAYS_TRANSLATE = 3; |
| + public static final int ACTION_AUTO_NEVER_LANGUAGE = 4; |
| + |
| private final int mInitialStep; |
| private final TranslateOptions mOptions; |
| @@ -45,21 +54,27 @@ class TranslateCompactInfoBar extends InfoBar |
| /** The controller for translate UI snackbars. */ |
| class TranslateSnackbarController implements SnackbarController { |
| - private final int mMenuItemId; |
| + private final int mActionId; |
| - public TranslateSnackbarController(int menuItemId) { |
| - mMenuItemId = menuItemId; |
| + public TranslateSnackbarController(int actionId) { |
| + mActionId = actionId; |
| } |
| @Override |
| public void onDismissNoAction(Object actionData) { |
| - handleTranslateOptionPostSnackbar(mMenuItemId); |
| + handleTranslateOptionPostSnackbar(mActionId); |
| } |
| @Override |
| public void onAction(Object actionData) { |
| // TODO(ramyasharma): Add logging metric to track cancel actions. |
| // Do nothing. |
| + |
| + // This snackbar is triggered automatically after a close button click. Need to dismiss |
| + // the infobar even user cancels the "Never Translate". |
|
mdjones
2017/05/12 17:12:00
nit: "even if the user"
Marti Wong
2017/05/14 04:30:47
Done.
|
| + if (mActionId == ACTION_AUTO_NEVER_LANGUAGE) { |
| + performCloseButtonActionWithoutDeniedCheck(); |
| + } |
| } |
| }; |
| @@ -171,7 +186,13 @@ class TranslateCompactInfoBar extends InfoBar |
| private void setAutoAlwaysTranslate() { |
| createAndShowSnackbar(getContext().getString(R.string.translate_snackbar_always_translate, |
| mOptions.sourceLanguageName(), mOptions.targetLanguageName()), |
| - Snackbar.UMA_TRANSLATE_ALWAYS, TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE); |
| + Snackbar.UMA_TRANSLATE_ALWAYS, ACTION_AUTO_ALWAYS_TRANSLATE); |
| + } |
| + |
| + private void setAutoNeverTranslate() { |
| + createAndShowSnackbar(getContext().getString(R.string.translate_snackbar_language_never, |
| + mOptions.sourceLanguageName()), |
| + Snackbar.UMA_TRANSLATE_NEVER, ACTION_AUTO_NEVER_LANGUAGE); |
| } |
| @Override |
| @@ -182,9 +203,26 @@ class TranslateCompactInfoBar extends InfoBar |
| @Override |
| public void onCloseButtonClicked() { |
| + // If mUserInteracted is false, it is regarded as a translation denied. |
| if (!mUserInteracted) { |
| + // This will increment the denied count. |
| onButtonClicked(ActionType.CANCEL); |
| + |
| + // Check if it should trigger the auto "never translate". |
| + if (!mOptions.neverTranslateLanguageState() |
| + && nativeShouldAutoNeverTranslate(mNativeTranslateInfoBarPtr)) { |
| + setAutoNeverTranslate(); |
| + // Postpone the infobar dismiss until the snackbar finished showing. Otherwise, the |
| + // reference to the native infobar is killed and there is no way for the snackbar to |
| + // perform the action. |
| + return; |
| + } |
| } |
| + // This line will dismiss this infobar |
| + performCloseButtonActionWithoutDeniedCheck(); |
| + } |
| + |
| + private void performCloseButtonActionWithoutDeniedCheck() { |
| super.onCloseButtonClicked(); |
| } |
| @@ -222,21 +260,21 @@ class TranslateCompactInfoBar extends InfoBar |
| createAndShowSnackbar( |
| getContext().getString(R.string.translate_snackbar_always_translate, |
| mOptions.sourceLanguageName(), mOptions.targetLanguageName()), |
| - Snackbar.UMA_TRANSLATE_ALWAYS, itemId); |
| + Snackbar.UMA_TRANSLATE_ALWAYS, ACTION_OVERFLOW_ALWAYS_TRANSLATE); |
| } else { |
| - handleTranslateOptionPostSnackbar(itemId); |
| + handleTranslateOptionPostSnackbar(ACTION_OVERFLOW_ALWAYS_TRANSLATE); |
| } |
| return; |
| case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: |
| createAndShowSnackbar( |
| getContext().getString(R.string.translate_snackbar_language_never, |
| mOptions.sourceLanguageName()), |
| - Snackbar.UMA_TRANSLATE_NEVER, itemId); |
| + Snackbar.UMA_TRANSLATE_NEVER, ACTION_OVERFLOW_NEVER_LANGUAGE); |
| return; |
| case TranslateMenu.ID_OVERFLOW_NEVER_SITE: |
| createAndShowSnackbar( |
| getContext().getString(R.string.translate_snackbar_site_never), |
| - Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId); |
| + Snackbar.UMA_TRANSLATE_NEVER_SITE, ACTION_OVERFLOW_NEVER_SITE); |
| return; |
| case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE: |
| initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE); |
| @@ -287,17 +325,21 @@ class TranslateCompactInfoBar extends InfoBar |
| private void handleTranslateOptionPostSnackbar(int itemId) { |
| switch (itemId) { |
| - case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: |
| + case ACTION_OVERFLOW_ALWAYS_TRANSLATE: |
| + case ACTION_AUTO_ALWAYS_TRANSLATE: |
| mOptions.toggleAlwaysTranslateLanguageState( |
| !mOptions.alwaysTranslateLanguageState()); |
| nativeApplyBoolTranslateOption(mNativeTranslateInfoBarPtr, |
| TranslateOption.ALWAYS_TRANSLATE, mOptions.alwaysTranslateLanguageState()); |
| return; |
| - case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: |
| + case ACTION_OVERFLOW_NEVER_LANGUAGE: |
| + case ACTION_AUTO_NEVER_LANGUAGE: |
| + // after applying this option, the infobar will dismiss |
|
mdjones
2017/05/12 17:12:00
nit: "after"->"After" and punctuation. Same for be
Marti Wong
2017/05/14 04:30:47
Done.
|
| nativeApplyBoolTranslateOption( |
| mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSLATE, true); |
| return; |
| - case TranslateMenu.ID_OVERFLOW_NEVER_SITE: |
| + case ACTION_OVERFLOW_NEVER_SITE: |
| + // after applying this option, the infobar will dismiss |
| nativeApplyBoolTranslateOption( |
| mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSLATE_SITE, true); |
| return; |
| @@ -308,4 +350,5 @@ class TranslateCompactInfoBar extends InfoBar |
| long nativeTranslateCompactInfoBar, int option, String value); |
| private native void nativeApplyBoolTranslateOption( |
| long nativeTranslateCompactInfoBar, int option, boolean value); |
| + private native boolean nativeShouldAutoNeverTranslate(long nativeTranslateCompactInfoBar); |
| } |