Commit 8628a9e9 authored by martiw's avatar martiw Committed by Commit bot

Automatically trigger Always-Translate

In the new translation infobar, when the number consecutive translations
reaches a threshold, it will trigger Always-Translate automatically.
This CL is trying to implement this feature without altering the
behavior of the existing infobars.

BUG=703887

Review-Url: https://codereview.chromium.org/2871783003
Cr-Commit-Position: refs/heads/master@{#471196}
parent 96d623e0
...@@ -40,8 +40,8 @@ class TranslateCompactInfoBar extends InfoBar ...@@ -40,8 +40,8 @@ class TranslateCompactInfoBar extends InfoBar
// showing language menu after dismissing overflow menu. // showing language menu after dismissing overflow menu.
private TranslateMenuHelper mOverflowMenuHelper; private TranslateMenuHelper mOverflowMenuHelper;
private TranslateMenuHelper mLanguageMenuHelper; private TranslateMenuHelper mLanguageMenuHelper;
private TintedImageButton mMenuButton; private TintedImageButton mMenuButton;
private boolean mUserInteracted;
/** The controller for translate UI snackbars. */ /** The controller for translate UI snackbars. */
class TranslateSnackbarController implements SnackbarController { class TranslateSnackbarController implements SnackbarController {
...@@ -98,6 +98,7 @@ class TranslateCompactInfoBar extends InfoBar ...@@ -98,6 +98,7 @@ class TranslateCompactInfoBar extends InfoBar
if (mInitialStep == TRANSLATING_INFOBAR) { if (mInitialStep == TRANSLATING_INFOBAR) {
mTabLayout.getTabAt(TARGET_TAB_INDEX).select(); mTabLayout.getTabAt(TARGET_TAB_INDEX).select();
mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX); mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX);
mUserInteracted = true;
} }
mTabLayout.addOnTabSelectedListener(this); mTabLayout.addOnTabSelectedListener(this);
...@@ -134,11 +135,12 @@ class TranslateCompactInfoBar extends InfoBar ...@@ -134,11 +135,12 @@ class TranslateCompactInfoBar extends InfoBar
} }
} }
private void startTranslating(int tabPostion) { private void startTranslating(int tabPosition) {
if (TARGET_TAB_INDEX == tabPostion) { if (TARGET_TAB_INDEX == tabPosition) {
// Already on the target tab. // Already on the target tab.
mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX); mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX);
onButtonClicked(ActionType.TRANSLATE); onButtonClicked(ActionType.TRANSLATE);
mUserInteracted = true;
} else { } else {
mTabLayout.getTabAt(TARGET_TAB_INDEX).select(); mTabLayout.getTabAt(TARGET_TAB_INDEX).select();
} }
...@@ -165,12 +167,27 @@ class TranslateCompactInfoBar extends InfoBar ...@@ -165,12 +167,27 @@ class TranslateCompactInfoBar extends InfoBar
mNativeTranslateInfoBarPtr = nativePtr; mNativeTranslateInfoBarPtr = nativePtr;
} }
@CalledByNative
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);
}
@Override @Override
protected void onNativeDestroyed() { protected void onNativeDestroyed() {
mNativeTranslateInfoBarPtr = 0; mNativeTranslateInfoBarPtr = 0;
super.onNativeDestroyed(); super.onNativeDestroyed();
} }
@Override
public void onCloseButtonClicked() {
if (!mUserInteracted) {
onButtonClicked(ActionType.CANCEL);
}
super.onCloseButtonClicked();
}
@Override @Override
public void onTabSelected(TabLayout.Tab tab) { public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) { switch (tab.getPosition()) {
...@@ -193,6 +210,7 @@ class TranslateCompactInfoBar extends InfoBar ...@@ -193,6 +210,7 @@ class TranslateCompactInfoBar extends InfoBar
@Override @Override
public void onOverflowMenuItemClicked(int itemId) { public void onOverflowMenuItemClicked(int itemId) {
mUserInteracted = true;
switch (itemId) { switch (itemId) {
case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE: case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE:
initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE); initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE);
......
...@@ -63,12 +63,21 @@ void TranslateCompactInfoBar::ProcessButton(int action) { ...@@ -63,12 +63,21 @@ void TranslateCompactInfoBar::ProcessButton(int action) {
// TODO(ramyasharma): Handle other button clicks. // TODO(ramyasharma): Handle other button clicks.
translate::TranslateInfoBarDelegate* delegate = GetDelegate(); translate::TranslateInfoBarDelegate* delegate = GetDelegate();
if (action == InfoBarAndroid::ACTION_TRANSLATE) if (action == InfoBarAndroid::ACTION_TRANSLATE) {
delegate->Translate(); delegate->Translate();
else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) if (!delegate->ShouldAlwaysTranslate() &&
delegate->ShouldAutoAlwaysTranslate()) {
JNIEnv* env = base::android::AttachCurrentThread();
Java_TranslateCompactInfoBar_setAutoAlwaysTranslate(env,
GetJavaInfoBar());
}
} else if (action == InfoBarAndroid::ACTION_TRANSLATE_SHOW_ORIGINAL) {
delegate->RevertTranslation(); delegate->RevertTranslation();
else } else if (action == InfoBarAndroid::ACTION_CANCEL) {
delegate->TranslationDeclined();
} else {
DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action); DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action);
}
} }
void TranslateCompactInfoBar::SetJavaInfoBar( void TranslateCompactInfoBar::SetJavaInfoBar(
...@@ -136,6 +145,11 @@ void TranslateCompactInfoBar::OnPageTranslated( ...@@ -136,6 +145,11 @@ void TranslateCompactInfoBar::OnPageTranslated(
error_type); error_type);
} }
bool TranslateCompactInfoBar::ShouldAutoAlwaysTranslate() {
translate::TranslateInfoBarDelegate* delegate = GetDelegate();
return delegate->ShouldAutoAlwaysTranslate();
}
translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() { translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() {
return delegate()->AsTranslateInfoBarDelegate(); return delegate()->AsTranslateInfoBarDelegate();
} }
......
...@@ -36,6 +36,9 @@ class TranslateCompactInfoBar ...@@ -36,6 +36,9 @@ class TranslateCompactInfoBar
int option, int option,
jboolean value); jboolean value);
// Check whether we should automatically trigger "Always Translate".
bool ShouldAutoAlwaysTranslate();
// ContentTranslateDriver::Observer implementation. // ContentTranslateDriver::Observer implementation.
void OnPageTranslated(const std::string& original_lang, void OnPageTranslated(const std::string& original_lang,
const std::string& translated_lang, const std::string& translated_lang,
......
...@@ -46,6 +46,10 @@ const int kAlwaysTranslateMinCount = 3; ...@@ -46,6 +46,10 @@ const int kAlwaysTranslateMinCount = 3;
const int kNeverTranslateMinCount = 3; const int kNeverTranslateMinCount = 3;
#endif #endif
// For Compact UI, if number of consecutive translations is equal to this
// number, infobar will automatically trigger "Always Translate".
const int kAcceptCountThreshold = 5;
} // namespace } // namespace
const base::Feature kTranslateCompactUI{"TranslateCompactUI", const base::Feature kTranslateCompactUI{"TranslateCompactUI",
...@@ -298,6 +302,12 @@ void TranslateInfoBarDelegate::ShowNeverTranslateInfobar() { ...@@ -298,6 +302,12 @@ void TranslateInfoBarDelegate::ShowNeverTranslateInfobar() {
} }
#endif #endif
bool TranslateInfoBarDelegate::ShouldAutoAlwaysTranslate() {
return (IsCompactUIEnabled() &&
prefs_->GetTranslationAcceptedCount(original_language_code()) ==
kAcceptCountThreshold);
}
// static // static
void TranslateInfoBarDelegate::GetAfterTranslateStrings( void TranslateInfoBarDelegate::GetAfterTranslateStrings(
std::vector<base::string16>* strings, std::vector<base::string16>* strings,
...@@ -378,7 +388,8 @@ int TranslateInfoBarDelegate::GetIconId() const { ...@@ -378,7 +388,8 @@ int TranslateInfoBarDelegate::GetIconId() const {
void TranslateInfoBarDelegate::InfoBarDismissed() { void TranslateInfoBarDelegate::InfoBarDismissed() {
if (step_ != translate::TRANSLATE_STEP_BEFORE_TRANSLATE) if (step_ != translate::TRANSLATE_STEP_BEFORE_TRANSLATE)
return; return;
if (IsCompactUIEnabled())
return;
// The user closed the infobar without clicking the translate button. // The user closed the infobar without clicking the translate button.
TranslationDeclined(); TranslationDeclined();
UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true); UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true);
......
...@@ -167,6 +167,10 @@ class TranslateInfoBarDelegate : public infobars::InfoBarDelegate { ...@@ -167,6 +167,10 @@ class TranslateInfoBarDelegate : public infobars::InfoBarDelegate {
bool ShouldShowNeverTranslateShortcut(); bool ShouldShowNeverTranslateShortcut();
bool ShouldShowAlwaysTranslateShortcut(); bool ShouldShowAlwaysTranslateShortcut();
// Called by translate compact infobar. This check whether we should
// automatically trigger "Always Translate".
bool ShouldAutoAlwaysTranslate();
#if defined(OS_IOS) #if defined(OS_IOS)
// Shows the Infobar offering to never translate the language or the site. // Shows the Infobar offering to never translate the language or the site.
void ShowNeverTranslateInfobar(); void ShowNeverTranslateInfobar();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment