Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3446)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateCompactInfoBar.java

Issue 2874393002: Automatically trigger Never-Translate in new translation infobar (Closed)
Patch Set: sync and merge Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/android/infobars/translate_compact_infobar.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c9263dcc6f31c63d15b4069654fc4e4834c588a7..9742e2dac707938be02a4ce3c73acc9467d19c7f 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
@@ -22,7 +22,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 {
@@ -31,6 +31,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.)
+ 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;
@@ -74,6 +83,7 @@ class TranslateCompactInfoBar extends InfoBar
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;
+ // TODO(martiw): create the values for the impressions/cancels of auto-always and auto-never.
// Need 2 instances of TranslateMenuHelper to prevent a race condition bug which happens when
// showing language menu after dismissing overflow menu.
@@ -84,27 +94,34 @@ 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) {
- switch (mMenuItemId) {
- case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
+ switch (mActionId) {
+ case ACTION_OVERFLOW_ALWAYS_TRANSLATE:
+ case ACTION_AUTO_ALWAYS_TRANSLATE:
recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_ALWAYS);
return;
- case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
+ case ACTION_OVERFLOW_NEVER_LANGUAGE:
+ recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER);
+ return;
+ case ACTION_AUTO_NEVER_LANGUAGE:
recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER);
+ // This snackbar is triggered automatically after a close button click. Need to
+ // dismiss the infobar even if the user cancels the "Never Translate".
+ performCloseButtonActionWithoutDeniedCheck();
return;
- case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
+ case ACTION_OVERFLOW_NEVER_SITE:
recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER_SITE);
return;
default:
@@ -225,7 +242,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
@@ -236,9 +259,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();
}
@@ -284,9 +324,9 @@ 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:
@@ -296,13 +336,13 @@ class TranslateCompactInfoBar extends InfoBar
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:
recordInfobarAction(INFOBAR_NEVER_TRANSLATE_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:
recordInfobarAction(INFOBAR_PAGE_NOT_IN);
@@ -350,20 +390,22 @@ class TranslateCompactInfoBar extends InfoBar
super.onStartedHiding();
}
- private void createAndShowSnackbar(String title, int umaType, int itemId) {
+ private void createAndShowSnackbar(String title, int umaType, int actionId) {
if (getSnackbarManager() == null) {
// Directly apply menu option, if snackbar system is not working.
- handleTranslateOptionPostSnackbar(itemId);
+ handleTranslateOptionPostSnackbar(actionId);
return;
}
- switch (itemId) {
- case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
+ switch (actionId) {
+ case ACTION_OVERFLOW_ALWAYS_TRANSLATE:
+ case ACTION_AUTO_ALWAYS_TRANSLATE:
recordInfobarAction(INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION);
break;
- case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
+ case ACTION_OVERFLOW_NEVER_LANGUAGE:
+ case ACTION_AUTO_NEVER_LANGUAGE:
recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION);
break;
- case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
+ case ACTION_OVERFLOW_NEVER_SITE:
recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRESSION);
break;
default:
@@ -371,26 +413,30 @@ class TranslateCompactInfoBar extends InfoBar
}
getSnackbarManager().showSnackbar(
- Snackbar.make(title, new TranslateSnackbarController(itemId),
+ Snackbar.make(title, new TranslateSnackbarController(actionId),
Snackbar.TYPE_NOTIFICATION, umaType)
.setSingleLine(false)
.setAction(
getContext().getString(R.string.translate_snackbar_cancel), null));
}
- private void handleTranslateOptionPostSnackbar(int itemId) {
- switch (itemId) {
- case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
+ private void handleTranslateOptionPostSnackbar(int actionId) {
+ switch (actionId) {
+ 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.
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;
@@ -415,4 +461,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);
}
« no previous file with comments | « no previous file | chrome/browser/ui/android/infobars/translate_compact_infobar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698