Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/ReaderModeInfoBar.java

Issue 2878543003: Hook up Reader Mode InfoBar (Closed)
Patch Set: fix disabled test Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698