| 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 d8c720999d6614d4569b563f406632ca2e665162..3d6e37304e1d6cdc47a319f4eb806c7d105e66e6 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
|
| @@ -8,6 +8,7 @@ import android.support.design.widget.TabLayout;
|
| import android.view.LayoutInflater;
|
| import android.view.View;
|
| import android.view.View.OnClickListener;
|
| +import android.view.View.OnLayoutChangeListener;
|
| import android.widget.LinearLayout;
|
|
|
| import org.chromium.base.annotations.CalledByNative;
|
| @@ -24,9 +25,8 @@ import org.chromium.ui.widget.Toast;
|
| /**
|
| * Java version of the compact translate infobar.
|
| */
|
| -class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelectedListener,
|
| - TranslateMenuHelper.TranslateMenuListener,
|
| - View.OnLayoutChangeListener {
|
| +class TranslateCompactInfoBar extends InfoBar
|
| + implements TabLayout.OnTabSelectedListener, TranslateMenuHelper.TranslateMenuListener {
|
| public static final int TRANSLATING_INFOBAR = 1;
|
|
|
| private static final int SOURCE_TAB_INDEX = 0;
|
| @@ -102,7 +102,8 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
| private TranslateMenuHelper mOverflowMenuHelper;
|
| private TranslateMenuHelper mLanguageMenuHelper;
|
| private TintedImageButton mMenuButton;
|
| - private boolean mUserInteracted;
|
| +
|
| + private boolean mMenuExpanded;
|
|
|
| /** The controller for translate UI snackbars. */
|
| class TranslateSnackbarController implements SnackbarController {
|
| @@ -133,7 +134,7 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
| recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_AUTO_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();
|
| + closeInfobar(false);
|
| return;
|
| case ACTION_OVERFLOW_NEVER_SITE:
|
| recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER_SITE);
|
| @@ -176,18 +177,25 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
| .inflate(R.layout.infobar_translate_compact_content, parent, false);
|
|
|
| mTabLayout = (TranslateTabLayout) content.findViewById(R.id.translate_infobar_tabs);
|
| - mTabLayout.addOnLayoutChangeListener(this);
|
| mTabLayout.addTabs(mOptions.sourceLanguageName(), mOptions.targetLanguageName());
|
|
|
| // Set translating status in the beginning for pages translated automatically.
|
| if (mInitialStep == TRANSLATING_INFOBAR) {
|
| mTabLayout.getTabAt(TARGET_TAB_INDEX).select();
|
| mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX);
|
| - mUserInteracted = true;
|
| }
|
|
|
| mTabLayout.addOnTabSelectedListener(this);
|
|
|
| + // Dismiss all menus when there is layout changed. (which will cause menu misplacement.)
|
| + mTabLayout.addOnLayoutChangeListener(new OnLayoutChangeListener() {
|
| + @Override
|
| + public void onLayoutChange(View v, int left, int top, int right, int bottom,
|
| + int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
| + dismissMenus();
|
| + }
|
| + });
|
| +
|
| mMenuButton = (TintedImageButton) content.findViewById(R.id.translate_infobar_menu_button);
|
| mMenuButton.setOnClickListener(new OnClickListener() {
|
| @Override
|
| @@ -195,6 +203,7 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
| recordInfobarAction(INFOBAR_OPTIONS);
|
| initMenuHelper(TranslateMenu.MENU_OVERFLOW);
|
| mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW);
|
| + mMenuExpanded = true;
|
| }
|
| });
|
|
|
| @@ -226,7 +235,6 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
| // Already on the target tab.
|
| mTabLayout.showProgressBarOnTab(TARGET_TAB_INDEX);
|
| onButtonClicked(ActionType.TRANSLATE);
|
| - mUserInteracted = true;
|
| } else {
|
| mTabLayout.getTabAt(TARGET_TAB_INDEX).select();
|
| }
|
| @@ -261,43 +269,32 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
| 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
|
| protected void onNativeDestroyed() {
|
| mNativeTranslateInfoBarPtr = 0;
|
| super.onNativeDestroyed();
|
| }
|
|
|
| - @Override
|
| - public void onCloseButtonClicked() {
|
| - // If mUserInteracted is false, it is regarded as a translation denied.
|
| - if (!mUserInteracted) {
|
| - recordInfobarAction(INFOBAR_DECLINE);
|
| - // 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;
|
| - }
|
| + private void closeInfobar(boolean explicitly) {
|
| + // Check if we should trigger the auto "never translate" if infobar is closed explicitly.
|
| + if (explicitly
|
| + && nativeShouldAutoNeverTranslate(mNativeTranslateInfoBarPtr, mMenuExpanded)) {
|
| + createAndShowSnackbar(getContext().getString(R.string.translate_snackbar_language_never,
|
| + mOptions.sourceLanguageName()),
|
| + Snackbar.UMA_TRANSLATE_NEVER, ACTION_AUTO_NEVER_LANGUAGE);
|
| + // 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;
|
| }
|
| recordInfobarAction(INFOBAR_CLOSE);
|
| // This line will dismiss this infobar.
|
| - performCloseButtonActionWithoutDeniedCheck();
|
| + super.onCloseButtonClicked();
|
| }
|
|
|
| - private void performCloseButtonActionWithoutDeniedCheck() {
|
| - super.onCloseButtonClicked();
|
| + @Override
|
| + public void onCloseButtonClicked() {
|
| + closeInfobar(true);
|
| }
|
|
|
| @Override
|
| @@ -327,7 +324,6 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
|
|
| @Override
|
| public void onOverflowMenuItemClicked(int itemId) {
|
| - mUserInteracted = true;
|
| switch (itemId) {
|
| case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE:
|
| recordInfobarAction(INFOBAR_MORE_LANGUAGES);
|
| @@ -402,13 +398,6 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
| }
|
| }
|
|
|
| - @Override
|
| - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
|
| - int oldTop, int oldRight, int oldBottom) {
|
| - // Dismiss all menus when there is layout changed. (which will cause menu misplacement.)
|
| - dismissMenus();
|
| - }
|
| -
|
| // Dismiss all overflow menus that remains open.
|
| // This is called when infobar started hiding or layout changed.
|
| private void dismissMenus() {
|
| @@ -514,5 +503,6 @@ class TranslateCompactInfoBar extends InfoBar implements TabLayout.OnTabSelected
|
| long nativeTranslateCompactInfoBar, int option, String value);
|
| private native void nativeApplyBoolTranslateOption(
|
| long nativeTranslateCompactInfoBar, int option, boolean value);
|
| - private native boolean nativeShouldAutoNeverTranslate(long nativeTranslateCompactInfoBar);
|
| + private native boolean nativeShouldAutoNeverTranslate(
|
| + long nativeTranslateCompactInfoBar, boolean menuExpanded);
|
| }
|
|
|