Index: chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.cc |
diff --git a/chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.cc b/chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.cc |
index dbd76004ac26d2c3115430ac6e1125f5da5cba85..7f08d1440110c0045809d207d9f11997306e836c 100644 |
--- a/chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.cc |
+++ b/chrome/browser/android/compositor/scene_layer/contextual_search_scene_layer.cc |
@@ -6,7 +6,9 @@ |
#include "base/android/jni_android.h" |
#include "base/android/jni_array.h" |
+#include "cc/layers/solid_color_layer.h" |
#include "chrome/browser/android/compositor/layer/contextual_search_layer.h" |
+#include "content/public/browser/android/compositor.h" |
#include "content/public/browser/android/content_view_core.h" |
#include "jni/ContextualSearchSceneLayer_jni.h" |
#include "ui/android/resources/resource_manager_impl.h" |
@@ -17,7 +19,28 @@ namespace android { |
ContextualSearchSceneLayer::ContextualSearchSceneLayer(JNIEnv* env, |
jobject jobj) |
- : SceneLayer(env, jobj) { |
+ : SceneLayer(env, jobj), |
+ base_page_brightness_(1.0f), |
+ content_container_(cc::Layer::Create()) { |
+ // Responsible for moving the base page without modifying the layer itself. |
+ content_container_->SetIsDrawable(true); |
+ content_container_->SetPosition(gfx::PointF(0.0f, 0.0f)); |
+} |
+ |
+void ContextualSearchSceneLayer::CreateContextualSearchLayer( |
pedro (no code reviews)
2016/05/04 22:59:34
TODO to move duplicated code to a super class?
mdjones
2016/05/05 00:46:20
Done.
|
+ JNIEnv* env, |
+ const JavaParamRef<jobject>& object, |
+ const JavaParamRef<jobject>& jresource_manager) { |
+ ui::ResourceManager* resource_manager = |
+ ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
+ contextual_search_layer_ = ContextualSearchLayer::Create(resource_manager); |
+ |
+ // The Contextual Search layer is initially invisible. |
+ contextual_search_layer_->layer()->SetHideLayerAndSubtree(true); |
+ |
+ // Add all layers to the tree; this is order dependent. |
+ layer()->AddChild(content_container_); |
+ layer()->AddChild(contextual_search_layer_->layer()); |
} |
ContextualSearchSceneLayer::~ContextualSearchSceneLayer() { |
@@ -41,6 +64,8 @@ void ContextualSearchSceneLayer::UpdateContextualSearchLayer( |
jint peek_promo_ripple_resource_id, |
jint peek_promo_text_resource_id, |
jfloat dp_to_px, |
+ jfloat base_page_brightness, |
+ jfloat base_page_offset, |
const JavaParamRef<jobject>& jcontent_view_core, |
jboolean search_promo_visible, |
jfloat search_promo_height, |
@@ -72,19 +97,7 @@ void ContextualSearchSceneLayer::UpdateContextualSearchLayer( |
jboolean progress_bar_visible, |
jfloat progress_bar_height, |
jfloat progress_bar_opacity, |
- jint progress_bar_completion, |
- const JavaParamRef<jobject>& jresource_manager) { |
- ui::ResourceManager* resource_manager = |
- ui::ResourceManagerImpl::FromJavaObject(jresource_manager); |
- // Lazily construct the contextual search layer, as the feature is only |
- // conditionally enabled. |
- if (!contextual_search_layer_.get()) { |
- if (!resource_manager) |
- return; |
- contextual_search_layer_ = ContextualSearchLayer::Create(resource_manager); |
- layer_->AddChild(contextual_search_layer_->layer()); |
- } |
- |
+ jint progress_bar_completion) { |
// NOTE(pedrosimonetti): The ContentViewCore might not exist at this time if |
// the Contextual Search Result has not been requested yet. In this case, |
// we'll pass NULL to Contextual Search's Layer Tree. |
@@ -93,6 +106,19 @@ void ContextualSearchSceneLayer::UpdateContextualSearchLayer( |
: content::ContentViewCore::GetNativeContentViewCore( |
env, jcontent_view_core); |
+ // Fade the base page out. |
+ if (base_page_brightness_ != base_page_brightness) { |
+ base_page_brightness_ = base_page_brightness; |
+ cc::FilterOperations filters; |
+ if (base_page_brightness < 1.f) |
+ filters.Append( |
+ cc::FilterOperation::CreateBrightnessFilter(base_page_brightness)); |
+ content_container_->SetFilters(filters); |
+ } |
+ |
+ // Move the base page contents up. |
+ content_container_->SetPosition(gfx::PointF(0.0f, base_page_offset)); |
+ |
contextual_search_layer_->SetProperties( |
search_bar_background_resource_id, |
search_context_resource_id, |
@@ -141,6 +167,35 @@ void ContextualSearchSceneLayer::UpdateContextualSearchLayer( |
progress_bar_height, |
progress_bar_opacity, |
progress_bar_completion); |
+ |
+ // Make the layer visible if it is not already. |
+ contextual_search_layer_->layer()->SetHideLayerAndSubtree(false); |
+} |
+ |
+void ContextualSearchSceneLayer::SetContentTree( |
+ JNIEnv* env, |
+ const JavaParamRef<jobject>& jobj, |
+ const JavaParamRef<jobject>& jcontent_tree) { |
+ SceneLayer* content_tree = FromJavaObject(env, jcontent_tree); |
+ if (!content_tree || !content_tree->layer()) return; |
+ |
+ if (!content_tree->layer()->parent() |
+ || (content_tree->layer()->parent()->id() != content_container_->id())) { |
+ content_container_->AddChild(content_tree->layer()); |
+ } |
+} |
+ |
+void ContextualSearchSceneLayer::HideTree(JNIEnv* env, |
+ const JavaParamRef<jobject>& jobj) { |
+ if (contextual_search_layer_) { |
+ contextual_search_layer_->layer()->SetHideLayerAndSubtree(true); |
+ } |
+ // Reset base page brightness. |
+ cc::FilterOperations filters; |
+ filters.Append(cc::FilterOperation::CreateBrightnessFilter(1.0f)); |
+ content_container_->SetFilters(filters); |
+ // Reset base page offset. |
+ content_container_->SetPosition(gfx::PointF(0.0f, 0.0f)); |
} |
static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& jobj) { |