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

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/ContextualSearchSupportedLayout.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 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_staging/src/org/chromium/chrome/browser/compositor/layouts/ContextualSearchSupportedLayout.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/ContextualSearchSupportedLayout.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/ContextualSearchSupportedLayout.java
new file mode 100644
index 0000000000000000000000000000000000000000..e37502ce067ec60f7d5d5f131279f7a72230954e
--- /dev/null
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/layouts/ContextualSearchSupportedLayout.java
@@ -0,0 +1,156 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.compositor.layouts;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.chromium.chrome.browser.compositor.LayerTitleCache;
+import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.ContextualSearchPanel;
+import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.ContextualSearchPanelHost;
+import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
+import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter;
+import org.chromium.chrome.browser.compositor.scene_layer.ContextualSearchSceneLayer;
+import org.chromium.chrome.browser.compositor.scene_layer.SceneLayer;
+import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
+import org.chromium.content.browser.ContentViewCore;
+import org.chromium.ui.resources.ResourceManager;
+
+import java.util.List;
+
+/**
+ * A {@link Layout} that can show a Contextual Search overlay that shows at the
+ * bottom and can be swiped upwards.
+ */
+public abstract class ContextualSearchSupportedLayout extends Layout {
+ /**
+ * The {@link ContextualSearchPanelHost} that allows the {@link ContextualSearchPanel} to
+ * communicate back to the Layout.
+ */
+ protected final ContextualSearchPanelHost mContextualSearchPanelHost;
+
+ /**
+ * The {@link ContextualSearchPanel} that represents the Contextual Search UI.
+ */
+ protected final ContextualSearchPanel mSearchPanel;
+
+ /**
+ * The {@link SceneLayer} that renders contextual search UI.
+ */
+ private final ContextualSearchSceneLayer mContextualSearchSceneLayer;
+
+ /**
+ * Size of half pixel in dps.
+ */
+ private final float mHalfPixelDp;
+
+ /**
+ * @param context The current Android context.
+ * @param updateHost The {@link LayoutUpdateHost} view for this layout.
+ * @param renderHost The {@link LayoutRenderHost} view for this layout.
+ * @param eventFilter The {@link EventFilter} that is needed for this view.
+ * @param panel The {@link ContextualSearchPanel} that represents the Contextual Search UI.
+ */
+ public ContextualSearchSupportedLayout(Context context, LayoutUpdateHost updateHost,
+ LayoutRenderHost renderHost, EventFilter eventFilter, ContextualSearchPanel panel) {
+ super(context, updateHost, renderHost, eventFilter);
+
+ mContextualSearchPanelHost = new ContextualSearchPanelHost() {
+ @Override
+ public void hideLayout(boolean immediately) {
+ ContextualSearchSupportedLayout.this.hideContextualSearch(immediately);
+ }
+ };
+
+ mSearchPanel = panel;
+ float dpToPx = context.getResources().getDisplayMetrics().density;
+ mHalfPixelDp = 0.5f / dpToPx;
+ mContextualSearchSceneLayer = new ContextualSearchSceneLayer(dpToPx, panel);
+ }
+
+ @Override
+ public void attachViews(ViewGroup container) {
+ mSearchPanel.setContainerView(container);
+ }
+
+ @Override
+ public void getAllViews(List<View> views) {
+ // TODO(dtrainor): If we move ContextualSearch to an overlay, pull the views from there
+ // instead in Layout.java.
+ if (mSearchPanel != null && mSearchPanel.getManagementDelegate() != null) {
+ ContentViewCore content =
+ mSearchPanel.getManagementDelegate().getSearchContentViewCore();
+ if (content != null) views.add(content.getContainerView());
+ }
+ super.getAllViews(views);
+ }
+
+ @Override
+ public void getAllContentViewCores(List<ContentViewCore> contents) {
+ // TODO(dtrainor): If we move ContextualSearch to an overlay, pull the content from there
+ // instead in Layout.java.
+ if (mSearchPanel != null && mSearchPanel.getManagementDelegate() != null) {
+ ContentViewCore content =
+ mSearchPanel.getManagementDelegate().getSearchContentViewCore();
+ if (content != null) contents.add(content);
+ }
+ super.getAllContentViewCores(contents);
+ }
+
+ @Override
+ public void show(long time, boolean animate) {
+ mSearchPanel.setHost(mContextualSearchPanelHost);
+ super.show(time, animate);
+ }
+
+ /**
+ * Hides the Contextual Search Supported Layout.
+ * @param immediately Whether it should be hidden immediately.
+ */
+ protected void hideContextualSearch(boolean immediately) {
+ // NOTE(pedrosimonetti): To be implemented by a supported Layout.
+ }
+
+ @Override
+ protected void notifySizeChanged(float width, float height, int orientation) {
+ super.notifySizeChanged(width, height, orientation);
+
+ // NOTE(pedrosimonetti): Due to some floating point madness, getHeight() and
+ // getHeightMinusTopControls() might not always be the same when the Toolbar is
+ // visible. For this reason, we're comparing to see if the difference between them
+ // is less than half pixel. If so, it means the Toolbar is visible.
+ final boolean isToolbarVisible = getHeight() - getHeightMinusTopControls() <= mHalfPixelDp;
+ mSearchPanel.onSizeChanged(width, height, isToolbarVisible);
+ }
+
+ @Override
+ protected boolean onUpdateAnimation(long time, boolean jumpToEnd) {
+ boolean parentAnimating = super.onUpdateAnimation(time, jumpToEnd);
+ boolean panelAnimating = mSearchPanel.onUpdateAnimation(time, jumpToEnd);
+ return panelAnimating || parentAnimating;
+ }
+
+ @Override
+ protected SceneLayer getSceneLayer() {
+ return mContextualSearchSceneLayer;
+ }
+
+ @Override
+ protected void updateSceneLayer(Rect viewport, Rect contentViewport,
+ LayerTitleCache layerTitleCache, TabContentManager tabContentManager,
+ ResourceManager resourceManager, ChromeFullscreenManager fullscreenManager) {
+ super.updateSceneLayer(viewport, contentViewport, layerTitleCache, tabContentManager,
+ resourceManager, fullscreenManager);
+ if (mContextualSearchSceneLayer == null || mSearchPanel.getManagementDelegate() == null) {
+ return;
+ }
+
+ ContentViewCore contentViewCore =
+ mSearchPanel.getManagementDelegate().getSearchContentViewCore();
+ mContextualSearchSceneLayer.update(contentViewCore, resourceManager);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698