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 66b191f0f07bfd163baec676c736f28c80dc1426..7a325c8a7bc2033114871b29a70517189c6ae8db 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 |
@@ -215,6 +215,7 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
@Override |
protected void onClose(StateChangeReason reason) { |
+ destroySearchBarControl(); |
if (mOverlayPanelContent != null) { |
mOverlayPanelContent.destroyContentView(); |
} |
@@ -572,12 +573,6 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
} |
@Override |
- public BottomBarTextControl getBottomBarTextControl() { |
- // NOTE(pedrosimonetti): exposing superclass method to the interface. |
- return super.getBottomBarTextControl(); |
- } |
- |
- @Override |
public boolean shouldAnimatePanelCloseOnPromoteToTab() { |
return mSearchPanelFeatures.shouldAnimatePanelCloseOnPromoteToTab(); |
} |
@@ -585,20 +580,20 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
@Override |
public void displaySearchTerm(String searchTerm) { |
cancelSearchTermResolutionAnimation(); |
- getBottomBarTextControl().setSearchTerm(searchTerm); |
- resetBottomBarSearchTermVisibility(); |
+ getSearchBarControl().setSearchTerm(searchTerm); |
+ resetSearchBarTermOpacity(); |
} |
@Override |
public void displaySearchContext(String selection, String start, String end) { |
cancelSearchTermResolutionAnimation(); |
- getBottomBarTextControl().setSearchContext(selection, start, end); |
- resetBottomBarSearchContextVisibility(); |
+ getSearchBarControl().setSearchContext(selection, start, end); |
+ resetSearchBarContextOpacity(); |
} |
@Override |
public void onSearchTermResolutionResponse(String searchTerm) { |
- getBottomBarTextControl().setSearchTerm(searchTerm); |
+ getSearchBarControl().setSearchTerm(searchTerm); |
animateSearchTermResolution(); |
} |
@@ -618,6 +613,11 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
} |
@Override |
+ public boolean didLoadAnyUrl() { |
+ return mOverlayPanelContent != null && mOverlayPanelContent.didLoadAnyUrl(); |
+ } |
+ |
+ @Override |
public void updateTopControlState() { |
if (mOverlayPanelContent == null) return; |
@@ -635,11 +635,106 @@ public class ContextualSearchPanel extends ContextualSearchPanelAnimation |
} |
} |
+ // ============================================================================================ |
+ // ContextualSearchBarControl |
+ // ============================================================================================ |
+ |
+ private ContextualSearchBarControl mContextualSearchBarControl; |
+ private float mSearchBarContextOpacity = 1.f; |
+ private float mSearchBarTermOpacity = 1.f; |
+ |
+ /** |
+ * @return The opacity of the SearchBar's search context. |
+ */ |
+ public float getSearchBarContextOpacity() { |
+ return mSearchBarContextOpacity; |
+ } |
+ |
+ /** |
+ * @return The opacity of the SearchBar's search term. |
+ */ |
+ public float getSearchBarTermOpacity() { |
+ return mSearchBarTermOpacity; |
+ } |
+ |
+ /** |
+ * @return The Id of the Search Context View. |
+ */ |
+ public int getSearchContextViewId() { |
+ return getSearchBarControl().getSearchContextViewId(); |
+ } |
+ |
+ /** |
+ * @return The Id of the Search Term View. |
+ */ |
+ public int getSearchTermViewId() { |
+ return getSearchBarControl().getSearchTermViewId(); |
+ } |
+ |
+ /** |
+ * Creates the ContextualSearchBarControl, if needed. The Views are set to INVISIBLE, because |
+ * they won't actually be displayed on the screen (their snapshots will be displayed instead). |
+ */ |
+ protected ContextualSearchBarControl getSearchBarControl() { |
+ assert mContainerView != null; |
+ assert mResourceLoader != null; |
+ |
+ if (mContextualSearchBarControl == null) { |
+ mContextualSearchBarControl = |
+ new ContextualSearchBarControl(this, mContext, mContainerView, mResourceLoader); |
+ } |
+ |
+ assert mContextualSearchBarControl != null; |
+ return mContextualSearchBarControl; |
+ } |
+ |
+ /** |
+ * Destroys the ContextualSearchBarControl. |
+ */ |
+ protected void destroySearchBarControl() { |
+ if (mContextualSearchBarControl != null) { |
+ mContextualSearchBarControl.destroy(); |
+ mContextualSearchBarControl = null; |
+ } |
+ } |
+ |
@Override |
- public boolean didLoadAnyUrl() { |
- return mOverlayPanelContent != null && mOverlayPanelContent.didLoadAnyUrl(); |
+ protected void updateSearchBarTextOpacity(float percentage) { |
+ // The search context will start fading out before the search term starts fading in. |
+ // They will both be partially visible for overlapPercentage of the animation duration. |
+ float overlapPercentage = .75f; |
+ float fadingOutPercentage = Math.max(1 - (percentage / overlapPercentage), 0.f); |
+ float fadingInPercentage = |
+ Math.max(percentage - (1 - overlapPercentage), 0.f) / overlapPercentage; |
+ |
+ mSearchBarContextOpacity = fadingOutPercentage; |
+ mSearchBarTermOpacity = fadingInPercentage; |
+ } |
+ |
+ /** |
+ * Resets the SearchBar text opacity when a new search context is set. The search |
+ * context is made visible and the search term invisible. |
+ */ |
+ private void resetSearchBarContextOpacity() { |
+ mSearchBarContextOpacity = 1.f; |
+ mSearchBarTermOpacity = 0.f; |
+ } |
+ |
+ /** |
+ * Resets the SearchBar text opacity when a new search term is set. The search |
+ * term is made visible and the search context invisible. |
+ */ |
+ private void resetSearchBarTermOpacity() { |
+ mSearchBarContextOpacity = 0.f; |
+ mSearchBarTermOpacity = 1.f; |
} |
+ // ============================================================================================ |
+ // Panel Content |
+ // ============================================================================================ |
+ |
+ // TODO(pedrosimonetti): move content code to its own section. |
+ |
@Override |
public ContentViewCore getContentViewCore() { |
// Expose OverlayPanelContent method. |