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

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

Issue 2878543003: Hook up Reader Mode InfoBar (Closed)
Patch Set: replace uses of 'panel' where relevant 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.infobar; 5 package org.chromium.chrome.browser.infobar;
6 6
7 import android.util.TypedValue; 7 import android.util.TypedValue;
8 import android.view.Gravity; 8 import android.view.Gravity;
9 import android.view.View; 9 import android.view.View;
10 import android.widget.TextView; 10 import android.widget.TextView;
11 11
12 import org.chromium.base.ApiCompatibilityUtils; 12 import org.chromium.base.ApiCompatibilityUtils;
13 import org.chromium.base.annotations.CalledByNative; 13 import org.chromium.base.annotations.CalledByNative;
14 import org.chromium.chrome.R; 14 import org.chromium.chrome.R;
15 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel;
16 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange Reason;
15 import org.chromium.chrome.browser.dom_distiller.ReaderModeManager; 17 import org.chromium.chrome.browser.dom_distiller.ReaderModeManager;
16 import org.chromium.chrome.browser.tab.Tab; 18 import org.chromium.chrome.browser.tab.Tab;
19 import org.chromium.content_public.browser.WebContents;
20 import org.chromium.content_public.browser.WebContentsObserver;
17 21
18 /** 22 /**
19 * This is the InfoBar implementation of the Reader Mode UI. This is used in pla ce of the 23 * This is the InfoBar implementation of the Reader Mode UI. This is used in pla ce of the
20 * {@link OverlayPanel} implementation when Chrome Home is enabled. 24 * {@link OverlayPanel} implementation when Chrome Home is enabled.
21 */ 25 */
22 public class ReaderModeInfoBar extends InfoBar { 26 public class ReaderModeInfoBar extends InfoBar {
23 /** A handle to the {@link ReaderModeManager} to trigger page navigations. * / 27 /** A handle to the {@link ReaderModeManager} to trigger page navigations. * /
24 private static ReaderModeManager sManager; 28 private static ReaderModeManager sManager;
25 29
30 /** A {@link WebContentsObserver} to watch for page navigations. */
31 private WebContentsObserver mWebContentsObserver;
32
33 /** The {@link WebContents} that this infobar is operating on. */
34 private WebContents mWebContents;
35
26 /** 36 /**
27 * Default constructor. 37 * Default constructor.
28 */ 38 */
29 private ReaderModeInfoBar() { 39 private ReaderModeInfoBar() {
30 super(R.drawable.infobar_mobile_friendly, null, null); 40 super(R.drawable.infobar_mobile_friendly, null, null);
31 } 41 }
32 42
33 @Override 43 @Override
34 protected boolean usesCompactLayout() { 44 protected boolean usesCompactLayout() {
35 return true; 45 return true;
36 } 46 }
37 47
38 @Override 48 @Override
39 protected void createCompactLayoutContent(InfoBarCompactLayout layout) { 49 protected void createCompactLayoutContent(InfoBarCompactLayout layout) {
40 TextView prompt = new TextView(getContext()); 50 TextView prompt = new TextView(getContext());
41 prompt.setText(R.string.reader_view_text); 51 prompt.setText(R.string.reader_view_text);
42 prompt.setSingleLine(); 52 prompt.setSingleLine();
43 prompt.setTextSize(TypedValue.COMPLEX_UNIT_PX, 53 prompt.setTextSize(TypedValue.COMPLEX_UNIT_PX,
44 getContext().getResources().getDimension(R.dimen.infobar_text_si ze)); 54 getContext().getResources().getDimension(R.dimen.infobar_text_si ze));
45 prompt.setTextColor( 55 prompt.setTextColor(
46 ApiCompatibilityUtils.getColor(layout.getResources(), R.color.de fault_text_color)); 56 ApiCompatibilityUtils.getColor(layout.getResources(), R.color.de fault_text_color));
47 prompt.setGravity(Gravity.CENTER_VERTICAL); 57 prompt.setGravity(Gravity.CENTER_VERTICAL);
48 58
59 mWebContentsObserver = new WebContentsObserver() {
60 @Override
Ted C 2017/05/19 23:19:07 per some offline discussion, infobars "should" del
mdjones 2017/05/22 21:11:02 Done.
61 public void didStartNavigation(String url, boolean isInMainFrame,
62 boolean isSameDocument, boolean isErrorPage) {
63 if (!isInMainFrame) return;
64
65 // If a navigation was triggered close this infobar.
66 nativeHide(getNativeInfoBarPtr());
67 destroyWebContentsObserver();
68 }
69 };
70
71 mWebContents = sManager.getBasePageWebContents();
72 sManager.getBasePageWebContents().addObserver(mWebContentsObserver);
73
49 prompt.setOnClickListener(new View.OnClickListener() { 74 prompt.setOnClickListener(new View.OnClickListener() {
50 @Override 75 @Override
51 public void onClick(View v) { 76 public void onClick(View v) {
52 // TODO(mdjones): Trigger navigation from manager. 77 destroyWebContentsObserver();
78 sManager.navigateToReaderMode();
53 } 79 }
54 }); 80 });
55 81
56 layout.addContent(prompt, 1f); 82 layout.addContent(prompt, 1f);
57 } 83 }
58 84
85 @Override
59 public void onCloseButtonClicked() { 86 public void onCloseButtonClicked() {
60 super.onCloseButtonClicked(); 87 super.onCloseButtonClicked();
61 88 destroyWebContentsObserver();
62 // TODO(mdjones): Notifiy the manager that the infobar was closed. 89 sManager.onClosed(StateChangeReason.CLOSE_BUTTON);
63 } 90 }
64 91
65 /** 92 /**
93 * Detach and null the infobar's web contents observer.
94 */
95 private void destroyWebContentsObserver() {
96 if (mWebContentsObserver == null) return;
97
98 mWebContents.removeObserver(mWebContentsObserver);
99 mWebContentsObserver = null;
100 }
101
102 @Override
103 protected void onNativeDestroyed() {
104 super.onNativeDestroyed();
105 destroyWebContentsObserver();
106 }
107
108 /**
66 * Create and show the Reader Mode {@link InfoBar}. 109 * Create and show the Reader Mode {@link InfoBar}.
67 * @param tab The tab that the {@link InfoBar} should be shown in. 110 * @param tab The tab that the {@link InfoBar} should be shown in.
68 * @param manager The {@link ReaderModeManager} for this instance of Chrome. 111 * @param manager The {@link ReaderModeManager} for this instance of Chrome.
69 */ 112 */
70 public static void showReaderModeInfoBar(Tab tab, ReaderModeManager manager) { 113 public static void showReaderModeInfoBar(Tab tab, ReaderModeManager manager) {
71 sManager = manager; 114 sManager = manager;
72 nativeCreate(tab); 115 nativeCreate(tab);
73 } 116 }
74 117
75 /** 118 /**
76 * @return An instance of the {@link ReaderModeInfoBar}. 119 * @return An instance of the {@link ReaderModeInfoBar}.
77 */ 120 */
78 @CalledByNative 121 @CalledByNative
79 private static ReaderModeInfoBar create() { 122 private static ReaderModeInfoBar create() {
80 return new ReaderModeInfoBar(); 123 return new ReaderModeInfoBar();
81 } 124 }
82 125
83 private static native void nativeCreate(Tab tab); 126 private static native void nativeCreate(Tab tab);
127 private native void nativeHide(long nativeReaderModeInfoBar);
84 } 128 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698