Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java |
index bbfa1820c22aab12a54a743c8d6f0ba11328a4c8..0c216392e163865c59538215183e9bd292ef9fa6 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java |
@@ -13,6 +13,7 @@ import android.text.style.ClickableSpan; |
import android.view.View; |
import android.widget.CheckBox; |
+import org.chromium.base.CalledByNative; |
import org.chromium.chrome.R; |
import org.chromium.ui.base.DeviceFormFactor; |
@@ -34,25 +35,30 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener { |
public static final int ALWAYS_PANEL = 3; |
public static final int MAX_PANEL_INDEX = 4; |
+ private long mNativeTranslateInfoBarPtr; |
private int mInfoBarType; |
private final TranslateOptions mOptions; |
private int mOptionsPanelViewType; |
private TranslateSubPanel mSubPanel; |
private final boolean mShouldShowNeverBar; |
- private final TranslateInfoBarDelegate mTranslateDelegate; |
- public TranslateInfoBar(long nativeInfoBarPtr, TranslateInfoBarDelegate delegate, |
- int infoBarType, int sourceLanguageIndex, int targetLanguageIndex, |
- boolean autoTranslatePair, boolean shouldShowNeverBar, |
+ @CalledByNative |
+ private static InfoBar show(int translateBarType, int sourceLanguageIndex, |
+ int targetLanguageIndex, boolean autoTranslatePair, boolean showNeverInfobar, |
boolean triggeredFromMenu, String[] languages) { |
+ return new TranslateInfoBar(translateBarType, sourceLanguageIndex, targetLanguageIndex, |
+ autoTranslatePair, showNeverInfobar, triggeredFromMenu, languages); |
+ } |
+ |
+ private TranslateInfoBar(int infoBarType, int sourceLanguageIndex, int targetLanguageIndex, |
+ boolean autoTranslatePair, boolean shouldShowNeverBar, boolean triggeredFromMenu, |
+ String[] languages) { |
super(null, R.drawable.infobar_translate, null, null); |
- mTranslateDelegate = delegate; |
mOptions = new TranslateOptions(sourceLanguageIndex, targetLanguageIndex, languages, |
autoTranslatePair, triggeredFromMenu); |
mInfoBarType = infoBarType; |
mShouldShowNeverBar = shouldShowNeverBar; |
mOptionsPanelViewType = NO_PANEL; |
- setNativeInfoBar(nativeInfoBarPtr); |
} |
@Override |
@@ -61,7 +67,7 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener { |
// Make it behave exactly as the Nope Button. |
onButtonClicked(false); |
} else { |
- nativeOnCloseButtonClicked(mNativeInfoBarPtr); |
+ super.onCloseButtonClicked(); |
} |
} |
@@ -205,11 +211,7 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener { |
private void onTranslateInfoBarButtonClicked(int action) { |
onOptionsChanged(); |
- |
- // We need to re-check if the pointer is null now because applying options (like never |
- // translate this site) can sometimes trigger closing the InfoBar. |
- if (mNativeInfoBarPtr == 0) return; |
- nativeOnButtonClicked(mNativeInfoBarPtr, action, ""); |
+ onButtonClicked(action, ""); |
} |
@Override |
@@ -226,15 +228,12 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener { |
@Override |
public void onOptionsChanged() { |
- if (mNativeInfoBarPtr == 0) return; |
+ if (mNativeTranslateInfoBarPtr == 0) return; |
if (mOptions.optionsChanged()) { |
- mTranslateDelegate.applyTranslateOptions(mNativeInfoBarPtr, |
- mOptions.sourceLanguageIndex(), |
- mOptions.targetLanguageIndex(), |
- mOptions.alwaysTranslateLanguageState(), |
- mOptions.neverTranslateLanguageState(), |
- mOptions.neverTranslateDomainState()); |
+ nativeApplyTranslateOptions(mNativeTranslateInfoBarPtr, mOptions.sourceLanguageIndex(), |
+ mOptions.targetLanguageIndex(), mOptions.alwaysTranslateLanguageState(), |
+ mOptions.neverTranslateLanguageState(), mOptions.neverTranslateDomainState()); |
} |
} |
@@ -331,13 +330,28 @@ public class TranslateInfoBar extends InfoBar implements SubPanelListener { |
return mInfoBarType; |
} |
- void changeInfoBarTypeAndNativePointer(int infoBarType, long newNativePointer) { |
+ @CalledByNative |
+ private void setNativePtr(long nativePtr) { |
+ mNativeTranslateInfoBarPtr = nativePtr; |
+ } |
+ |
+ @Override |
+ protected void onNativeDestroyed() { |
+ mNativeTranslateInfoBarPtr = 0; |
+ super.onNativeDestroyed(); |
+ } |
+ |
+ @CalledByNative |
+ private void changeTranslateInfoBarType(int infoBarType) { |
if (infoBarType >= 0 && infoBarType < MAX_INFOBAR_INDEX) { |
mInfoBarType = infoBarType; |
- replaceNativePointer(newNativePointer); |
updateViewForCurrentState(createView()); |
} else { |
assert false : "Trying to change the InfoBar to a type that is invalid."; |
} |
} |
+ |
+ private native void nativeApplyTranslateOptions(long nativeTranslateInfoBar, |
+ int sourceLanguageIndex, int targetLanguageIndex, boolean alwaysTranslate, |
+ boolean neverTranslateLanguage, boolean neverTranslateSite); |
} |