| Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java
|
| index 23e115f2a52abf5b5c1cba05939f8efc06fbd396..619b0e1dc4d2821df067bd502e03913b58d7c926 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java
|
| @@ -12,8 +12,12 @@ import android.widget.TextView;
|
| import org.chromium.base.ApiCompatibilityUtils;
|
| import org.chromium.base.annotations.CalledByNative;
|
| import org.chromium.chrome.R;
|
| +import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel;
|
| +import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChangeReason;
|
| import org.chromium.chrome.browser.dom_distiller.ReaderModeManager;
|
| import org.chromium.chrome.browser.tab.Tab;
|
| +import org.chromium.content_public.browser.WebContents;
|
| +import org.chromium.content_public.browser.WebContentsObserver;
|
|
|
| /**
|
| * This is the InfoBar implementation of the Reader Mode UI. This is used in place of the
|
| @@ -23,6 +27,12 @@ public class ReaderModeInfoBar extends InfoBar {
|
| /** A handle to the {@link ReaderModeManager} to trigger page navigations. */
|
| private static ReaderModeManager sManager;
|
|
|
| + /** A {@link WebContentsObserver} to watch for page navigations. */
|
| + private WebContentsObserver mWebContentsObserver;
|
| +
|
| + /** The {@link WebContents} that this infobar is operating on. */
|
| + private WebContents mWebContents;
|
| +
|
| /**
|
| * Default constructor.
|
| */
|
| @@ -46,20 +56,53 @@ public class ReaderModeInfoBar extends InfoBar {
|
| ApiCompatibilityUtils.getColor(layout.getResources(), R.color.default_text_color));
|
| prompt.setGravity(Gravity.CENTER_VERTICAL);
|
|
|
| + mWebContentsObserver = new WebContentsObserver() {
|
| + @Override
|
| + public void didStartNavigation(String url, boolean isInMainFrame,
|
| + boolean isSameDocument, boolean isErrorPage) {
|
| + if (!isInMainFrame) return;
|
| +
|
| + // If a navigation was triggered close this infobar.
|
| + nativeHide(getNativeInfoBarPtr());
|
| + destroyWebContentsObserver();
|
| + }
|
| + };
|
| +
|
| + mWebContents = sManager.getBasePageWebContents();
|
| + sManager.getBasePageWebContents().addObserver(mWebContentsObserver);
|
| +
|
| prompt.setOnClickListener(new View.OnClickListener() {
|
| @Override
|
| public void onClick(View v) {
|
| - // TODO(mdjones): Trigger navigation from manager.
|
| + destroyWebContentsObserver();
|
| + sManager.navigateToReaderMode();
|
| }
|
| });
|
|
|
| layout.addContent(prompt, 1f);
|
| }
|
|
|
| + @Override
|
| public void onCloseButtonClicked() {
|
| super.onCloseButtonClicked();
|
| + destroyWebContentsObserver();
|
| + sManager.onClosed(StateChangeReason.CLOSE_BUTTON);
|
| + }
|
| +
|
| + /**
|
| + * Detach and null the infobar's web contents observer.
|
| + */
|
| + private void destroyWebContentsObserver() {
|
| + if (mWebContentsObserver == null) return;
|
|
|
| - // TODO(mdjones): Notifiy the manager that the infobar was closed.
|
| + mWebContents.removeObserver(mWebContentsObserver);
|
| + mWebContentsObserver = null;
|
| + }
|
| +
|
| + @Override
|
| + protected void onNativeDestroyed() {
|
| + super.onNativeDestroyed();
|
| + destroyWebContentsObserver();
|
| }
|
|
|
| /**
|
| @@ -81,4 +124,5 @@ public class ReaderModeInfoBar extends InfoBar {
|
| }
|
|
|
| private static native void nativeCreate(Tab tab);
|
| + private native void nativeHide(long nativeReaderModeInfoBar);
|
| }
|
|
|