Index: ui/app_list/views/contents_view.cc |
diff --git a/ui/app_list/views/contents_view.cc b/ui/app_list/views/contents_view.cc |
index bb8218bac9fae36adb5582ce4ed57db2839ca9d4..aad11258e7689f7a86aed7a4545fb07ffe878bc6 100644 |
--- a/ui/app_list/views/contents_view.cc |
+++ b/ui/app_list/views/contents_view.cc |
@@ -17,16 +17,48 @@ |
#include "ui/app_list/views/apps_grid_view.h" |
#include "ui/app_list/views/custom_launcher_page_view.h" |
#include "ui/app_list/views/search_box_view.h" |
-#include "ui/app_list/views/search_result_answer_card_view.h" |
#include "ui/app_list/views/search_result_list_view.h" |
#include "ui/app_list/views/search_result_page_view.h" |
#include "ui/app_list/views/search_result_tile_item_list_view.h" |
#include "ui/app_list/views/start_page_view.h" |
#include "ui/events/event.h" |
+#include "ui/views/layout/box_layout.h" |
#include "ui/views/view_model.h" |
#include "ui/views/widget/widget.h" |
namespace app_list { |
+ |
+namespace { |
+ |
+// Container of the search answer view. |
+class SearchAnswerContainerView : public views::View { |
+ public: |
+ explicit SearchAnswerContainerView(views::View* search_results_page_view) |
+ : search_results_page_view_(search_results_page_view) { |
+ views::BoxLayout* answer_container_layout = |
+ new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); |
+ answer_container_layout->set_main_axis_alignment( |
+ views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER); |
+ SetLayoutManager(answer_container_layout); |
+ } |
+ |
+ // views::View overrides: |
+ void ChildPreferredSizeChanged(View* child) override { |
+ if (visible()) |
+ search_results_page_view_->Layout(); |
+ } |
+ |
+ const char* GetClassName() const override { |
+ return "SearchAnswerContainerView"; |
+ } |
+ |
+ private: |
+ views::View* const search_results_page_view_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SearchAnswerContainerView); |
+}; |
+ |
+} // namespace |
ContentsView::ContentsView(AppListMainView* app_list_main_view) |
: model_(nullptr), |
@@ -34,6 +66,7 @@ |
search_results_page_view_(nullptr), |
start_page_view_(nullptr), |
custom_page_view_(nullptr), |
+ search_answer_container_view_(nullptr), |
app_list_main_view_(app_list_main_view), |
page_before_search_(0) { |
pagination_model_.SetTransitionDurations(kPageTransitionDurationInMs, |
@@ -43,6 +76,8 @@ |
ContentsView::~ContentsView() { |
pagination_model_.RemoveObserver(this); |
+ if (model_) |
+ model_->RemoveObserver(this); |
} |
void ContentsView::Init(AppListModel* model) { |
@@ -69,14 +104,14 @@ |
// Search results UI. |
search_results_page_view_ = new SearchResultPageView(); |
- // Search result containers. |
- views::View* const search_answer_view = |
- view_delegate->GetSearchAnswerWebView(); |
- if (search_answer_view) { |
- search_results_page_view_->AddSearchResultContainerView( |
- nullptr, new SearchResultAnswerCardView( |
- model_, search_results_page_view_, search_answer_view)); |
- } |
+ // Search answer container UI. |
+ search_answer_container_view_ = |
+ new SearchAnswerContainerView(search_results_page_view_); |
+ search_answer_container_view_->SetVisible(false); |
+ views::View* search_answer_view = view_delegate->GetSearchAnswerWebView(); |
+ if (search_answer_view) |
+ search_answer_container_view_->AddChildView(search_answer_view); |
+ search_results_page_view_->AddChildView(search_answer_container_view_); |
AppListModel::SearchResults* results = view_delegate->GetModel()->results(); |
search_results_page_view_->AddSearchResultContainerView( |
@@ -107,6 +142,8 @@ |
pagination_model_.SelectPage(initial_page_index, false); |
ActivePageChanged(); |
+ |
+ model_->AddObserver(this); |
} |
void ContentsView::CancelDrag() { |
@@ -487,4 +524,12 @@ |
UpdatePageBounds(); |
} |
+void ContentsView::OnSearchAnswerAvailableChanged(bool has_answer) { |
+ if (has_answer == search_answer_container_view_->visible()) |
+ return; |
+ |
+ search_answer_container_view_->SetVisible(has_answer); |
+ search_results_page_view_->Layout(); |
+} |
+ |
} // namespace app_list |