Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java |
index ff37a872fd28a07d09946f74a921e0d420733cd7..58bbf4758ce7bef40249d4fb0ffbac182f098c16 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java |
@@ -22,7 +22,7 @@ import org.chromium.content.browser.ContentViewCore; |
* Controls the Contextual Search Panel. |
*/ |
public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
- implements ContextualSearchPanelDelegate { |
+ implements ContextualSearchPanelDelegate, OverlayPanelContentFactory { |
/** |
* State of the Contextual Search Panel. |
@@ -108,14 +108,19 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
private ContextualSearchPanelHost mSearchPanelHost; |
/** |
+ * That factory that creates OverlayPanelContents. |
+ */ |
+ private OverlayPanelContentFactory mContentFactory; |
+ |
+ /** |
* Container for content the panel will show. |
*/ |
- private OverlayPanelContent mOverlayPanelContent; |
+ private OverlayPanelContent mContent; |
/** |
* Used for logging state changes. |
*/ |
- private ContextualSearchPanelMetrics mPanelMetrics; |
+ private final ContextualSearchPanelMetrics mPanelMetrics; |
/** |
* The object for handling global Contextual Search management duties |
@@ -132,12 +137,21 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
*/ |
public ContextualSearchPanel(Context context, LayoutUpdateHost updateHost) { |
super(context, updateHost); |
+ mContentFactory = this; |
mPanelMetrics = new ContextualSearchPanelMetrics(); |
} |
/** |
- * Create a new OverlayPanelContent object. This can be overridden for tests. |
+ * Destroy the panel's components. |
*/ |
+ public void destroy() { |
+ destroyOverlayPanelContent(); |
+ destroyPromoView(); |
+ destroyPeekPromoControl(); |
+ destroySearchBarControl(); |
+ } |
+ |
+ @Override |
public OverlayPanelContent createNewOverlayPanelContent() { |
OverlayPanelContent overlayPanelContent = new OverlayPanelContent( |
mManagementDelegate.getOverlayContentDelegate(), new PanelProgressObserver(), |
@@ -287,12 +301,8 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
} |
@Override |
- protected void onClose(StateChangeReason reason) { |
- destroySearchBarControl(); |
- destroyPeekPromoControl(); |
- if (mOverlayPanelContent != null) { |
- mOverlayPanelContent.destroyContentView(); |
- } |
+ protected void onClosed(StateChangeReason reason) { |
+ destroy(); |
mManagementDelegate.onCloseContextualSearch(reason); |
} |
@@ -321,7 +331,7 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
if (ty > 0 && getPanelState() == PanelState.MAXIMIZED) { |
// Resets the Search Content View scroll position when swiping the Panel down |
// after being maximized. |
- mOverlayPanelContent.resetContentViewScroll(); |
+ mContent.resetContentViewScroll(); |
} |
// Negative ty value means an upward movement so subtracting ty means expanding the panel. |
@@ -511,18 +521,28 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
* @return The vertical scroll position of the content. |
*/ |
public float getSearchContentViewVerticalScroll() { |
- return mOverlayPanelContent.getContentViewVerticalScroll(); |
+ return mContent.getContentViewVerticalScroll(); |
} |
/** |
* @return A new OverlayPanelContent if the instance was null or the existing one. |
*/ |
- public OverlayPanelContent getOverlayPanelContent() { |
+ protected OverlayPanelContent getOverlayPanelContent() { |
// Only create the content when necessary |
- if (mOverlayPanelContent == null) { |
- mOverlayPanelContent = createNewOverlayPanelContent(); |
+ if (mContent == null) { |
+ mContent = mContentFactory.createNewOverlayPanelContent(); |
+ } |
+ return mContent; |
+ } |
+ |
+ /** |
+ * Destroys the OverlayPanelContent. |
+ */ |
+ protected void destroyOverlayPanelContent() { |
+ if (mContent != null) { |
+ mContent.destroy(); |
+ mContent = null; |
} |
- return mOverlayPanelContent; |
} |
// ============================================================================================ |
@@ -690,7 +710,7 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
@Override |
public boolean isContentViewShowing() { |
- return mOverlayPanelContent != null && mOverlayPanelContent.isContentViewShowing(); |
+ return mContent != null && mContent.isContentViewShowing(); |
} |
@Override |
@@ -704,13 +724,13 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
} |
@Override |
- public boolean didLoadAnyUrl() { |
- return mOverlayPanelContent != null && mOverlayPanelContent.didLoadAnyUrl(); |
+ public boolean isProcessingPendingNavigation() { |
+ return mContent != null && mContent.isProcessingPendingNavigation(); |
} |
@Override |
public void updateTopControlState() { |
- if (mOverlayPanelContent == null) return; |
+ if (mContent == null) return; |
if (isFullscreenSizePanel()) { |
// Consider the ContentView height to be fullscreen, and inform the system that |
@@ -720,9 +740,9 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
// minus the Toolbar height. |
// |
// This is necessary to fix the bugs: crbug.com/510205 and crbug.com/510206 |
- mOverlayPanelContent.updateTopControlsState(false, true, false); |
+ mContent.updateTopControlsState(false, true, false); |
} else { |
- mOverlayPanelContent.updateTopControlsState(true, false, false); |
+ mContent.updateTopControlsState(true, false, false); |
} |
} |
@@ -942,34 +962,24 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
@Override |
public ContentViewCore getContentViewCore() { |
// Expose OverlayPanelContent method. |
- return mOverlayPanelContent != null ? mOverlayPanelContent.getContentViewCore() : null; |
+ return mContent != null ? mContent.getContentViewCore() : null; |
} |
@Override |
public void removeLastHistoryEntry(String historyUrl, long urlTimeMs) { |
- if (mOverlayPanelContent == null) return; |
+ if (mContent == null) return; |
// Expose OverlayPanelContent method. |
- mOverlayPanelContent.removeLastHistoryEntry(historyUrl, urlTimeMs); |
+ mContent.removeLastHistoryEntry(historyUrl, urlTimeMs); |
} |
@Override |
- public void setSearchContentViewVisibility(boolean isVisible) { |
- getOverlayPanelContent().setVisibility(isVisible); |
- } |
- |
- /** |
- * Destroy the native components associated with this panel's content. |
- */ |
- public void destroy() { |
- // It is possible that an OverlayPanelContent was never created for this panel. |
- if (mOverlayPanelContent != null) { |
- mOverlayPanelContent.destroy(); |
- } |
+ public void notifyPanelTouched() { |
+ getOverlayPanelContent().notifyPanelTouched(); |
} |
@Override |
@VisibleForTesting |
- public void setOverlayPanelContent(OverlayPanelContent panelContent) { |
- mOverlayPanelContent = panelContent; |
+ public void setOverlayPanelContentFactory(OverlayPanelContentFactory factory) { |
+ mContentFactory = factory; |
} |
} |