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
// showing language menu after dismissing overflow menu.
private TranslateMenuHelper mOverflowMenuHelper;
private TranslateMenuHelper mLanguageMenuHelper;
private TintedImageButton mMenuButton;
private boolean mUserInteracted;
/** The controller for translate UI snackbars. */
class TranslateSnackbarController implements SnackbarController {
......@@ -98,6 +98,7 @@ class TranslateCompactInfoBar extends InfoBar
if (mInitialStep == TRANSLATING_INFOBAR) {
mTabLayout.getTabAt(TARGET_TAB_INDEX).select();
mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX);
mUserInteracted = true;
}
mTabLayout.addOnTabSelectedListener(this);
......@@ -134,11 +135,12 @@ class TranslateCompactInfoBar extends InfoBar
}
}
private void startTranslating(int tabPostion) {
if (TARGET_TAB_INDEX == tabPostion) {
private void startTranslating(int tabPosition) {
if (TARGET_TAB_INDEX == tabPosition) {
// Already on the target tab.
mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX);
onButtonClicked(ActionType.TRANSLATE);
mUserInteracted = true;
} else {
mTabLayout.getTabAt(TARGET_TAB_INDEX).select();
}
......@@ -165,12 +167,27 @@ class TranslateCompactInfoBar extends InfoBar
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
protected void onNativeDestroyed() {
mNativeTranslateInfoBarPtr = 0;
super.onNativeDestroyed();
}
@Override
public void onCloseButtonClicked() {
if (!mUserInteracted) {
onButtonClicked(ActionType.CANCEL);
}
super.onCloseButtonClicked();
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
......@@ -193,6 +210,7 @@ class TranslateCompactInfoBar extends InfoBar
@Override
public void onOverflowMenuItemClicked(int itemId) {
mUserInteracted = true;
switch (itemId) {
case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE:
initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE);
......
......@@ -63,12 +63,21 @@ void TranslateCompactInfoBar::ProcessButton(int action) {
// TODO(ramyasharma): Handle other button clicks.
translate::TranslateInfoBarDelegate* delegate = GetDelegate();
if (action == InfoBarAndroid::ACTION_TRANSLATE)
if (action == InfoBarAndroid::ACTION_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();
else
} else if (action == InfoBarAndroid::ACTION_CANCEL) {
delegate->TranslationDeclined();
} else {
DCHECK_EQ(InfoBarAndroid::ACTION_NONE, action);
}
}
void TranslateCompactInfoBar::SetJavaInfoBar(
......@@ -136,6 +145,11 @@ void TranslateCompactInfoBar::OnPageTranslated(
error_type);
}
bool TranslateCompactInfoBar::ShouldAutoAlwaysTranslate() {
translate::TranslateInfoBarDelegate* delegate = GetDelegate();
return delegate->ShouldAutoAlwaysTranslate();
}
translate::TranslateInfoBarDelegate* TranslateCompactInfoBar::GetDelegate() {
return delegate()->AsTranslateInfoBarDelegate();
}
......
......@@ -36,6 +36,9 @@ class TranslateCompactInfoBar
int option,
jboolean value);
// Check whether we should automatically trigger "Always Translate".
bool ShouldAutoAlwaysTranslate();
// ContentTranslateDriver::Observer implementation.
void OnPageTranslated(const std::string& original_lang,
const std::string& translated_lang,
......
......@@ -46,6 +46,10 @@ const int kAlwaysTranslateMinCount = 3;
const int kNeverTranslateMinCount = 3;
#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
const base::Feature kTranslateCompactUI{"TranslateCompactUI",
......@@ -298,6 +302,12 @@ void TranslateInfoBarDelegate::ShowNeverTranslateInfobar() {
}
#endif
bool TranslateInfoBarDelegate::ShouldAutoAlwaysTranslate() {
return (IsCompactUIEnabled() &&
prefs_->GetTranslationAcceptedCount(original_language_code()) ==
kAcceptCountThreshold);
}
// static
void TranslateInfoBarDelegate::GetAfterTranslateStrings(
std::vector<base::string16>* strings,
......@@ -378,7 +388,8 @@ int TranslateInfoBarDelegate::GetIconId() const {
void TranslateInfoBarDelegate::InfoBarDismissed() {
if (step_ != translate::TRANSLATE_STEP_BEFORE_TRANSLATE)
return;
if (IsCompactUIEnabled())
return;
// The user closed the infobar without clicking the translate button.
TranslationDeclined();
UMA_HISTOGRAM_BOOLEAN("Translate.DeclineTranslateCloseInfobar", true);
......
......@@ -167,6 +167,10 @@ class TranslateInfoBarDelegate : public infobars::InfoBarDelegate {
bool ShouldShowNeverTranslateShortcut();
bool ShouldShowAlwaysTranslateShortcut();
// Called by translate compact infobar. This check whether we should
// automatically trigger "Always Translate".
bool ShouldAutoAlwaysTranslate();
#if defined(OS_IOS)
// Shows the Infobar offering to never translate the language or the site.
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