| Index: ui/app_list/views/start_page_view.cc
|
| diff --git a/ui/app_list/views/start_page_view.cc b/ui/app_list/views/start_page_view.cc
|
| index 01ea2d608ce84fb1433bf51dca21b478eb9109ae..ab8be81a2d976b5f27b6fc08532c24f024fb9c3a 100644
|
| --- a/ui/app_list/views/start_page_view.cc
|
| +++ b/ui/app_list/views/start_page_view.cc
|
| @@ -14,7 +14,7 @@
|
| #include "ui/app_list/views/app_list_main_view.h"
|
| #include "ui/app_list/views/contents_view.h"
|
| #include "ui/app_list/views/search_box_view.h"
|
| -#include "ui/app_list/views/search_result_list_view.h"
|
| +#include "ui/app_list/views/search_result_container_view.h"
|
| #include "ui/app_list/views/search_result_tile_item_view.h"
|
| #include "ui/app_list/views/tile_item_view.h"
|
| #include "ui/gfx/canvas.h"
|
| @@ -63,6 +63,106 @@ class SearchBoxSpacerView : public views::View {
|
|
|
| } // namespace
|
|
|
| +// A container that holds the start page recommendation tiles and the all apps
|
| +// tile.
|
| +class StartPageView::StartPageTilesContainer
|
| + : public SearchResultContainerView {
|
| + public:
|
| + explicit StartPageTilesContainer(AllAppsTileItemView* all_apps_button);
|
| + ~StartPageTilesContainer() override;
|
| +
|
| + TileItemView* GetTileItemView(size_t index);
|
| +
|
| + const std::vector<SearchResultTileItemView*>& tile_views() const {
|
| + return search_result_tile_views_;
|
| + }
|
| +
|
| + AllAppsTileItemView* all_apps_button() { return all_apps_button_; }
|
| +
|
| + // Overridden from SearchResultContainerView:
|
| + int Update() override;
|
| + void UpdateSelectedIndex(int old_selected, int new_selected) override;
|
| + void OnContainerSelected(bool from_bottom) override;
|
| +
|
| + private:
|
| + std::vector<SearchResultTileItemView*> search_result_tile_views_;
|
| + AllAppsTileItemView* all_apps_button_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(StartPageTilesContainer);
|
| +};
|
| +
|
| +StartPageView::StartPageTilesContainer::StartPageTilesContainer(
|
| + AllAppsTileItemView* all_apps_button)
|
| + : all_apps_button_(all_apps_button) {
|
| + views::BoxLayout* tiles_layout_manager =
|
| + new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, kTileSpacing);
|
| + tiles_layout_manager->set_main_axis_alignment(
|
| + views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER);
|
| + SetLayoutManager(tiles_layout_manager);
|
| + set_background(
|
| + views::Background::CreateSolidBackground(kLabelBackgroundColor));
|
| +
|
| + // Add SearchResultTileItemViews to the container.
|
| + for (size_t i = 0; i < kNumStartPageTiles; ++i) {
|
| + SearchResultTileItemView* tile_item = new SearchResultTileItemView();
|
| + AddChildView(tile_item);
|
| + tile_item->SetParentBackgroundColor(kLabelBackgroundColor);
|
| + search_result_tile_views_.push_back(tile_item);
|
| + }
|
| +
|
| + // Also add a special "all apps" button to the end of the container.
|
| + all_apps_button_->UpdateIcon();
|
| + all_apps_button_->SetParentBackgroundColor(kLabelBackgroundColor);
|
| + AddChildView(all_apps_button_);
|
| +}
|
| +
|
| +StartPageView::StartPageTilesContainer::~StartPageTilesContainer() {
|
| +}
|
| +
|
| +TileItemView* StartPageView::StartPageTilesContainer::GetTileItemView(
|
| + size_t index) {
|
| + DCHECK_GT(kNumStartPageTiles + 1, index);
|
| + if (index == kNumStartPageTiles)
|
| + return all_apps_button_;
|
| +
|
| + return search_result_tile_views_[index];
|
| +}
|
| +
|
| +int StartPageView::StartPageTilesContainer::Update() {
|
| + std::vector<SearchResult*> display_results =
|
| + AppListModel::FilterSearchResultsByDisplayType(
|
| + results(), SearchResult::DISPLAY_RECOMMENDATION, kNumStartPageTiles);
|
| +
|
| + // Update the tile item results.
|
| + for (size_t i = 0; i < search_result_tile_views_.size(); ++i) {
|
| + SearchResult* item = nullptr;
|
| + if (i < display_results.size())
|
| + item = display_results[i];
|
| + search_result_tile_views_[i]->SetSearchResult(item);
|
| + }
|
| +
|
| + Layout();
|
| + parent()->Layout();
|
| + // Add 1 to the results size to account for the all apps button.
|
| + return display_results.size() + 1;
|
| +}
|
| +
|
| +void StartPageView::StartPageTilesContainer::UpdateSelectedIndex(
|
| + int old_selected,
|
| + int new_selected) {
|
| + if (old_selected >= 0)
|
| + GetTileItemView(old_selected)->SetSelected(false);
|
| +
|
| + if (new_selected >= 0)
|
| + GetTileItemView(new_selected)->SetSelected(true);
|
| +}
|
| +
|
| +void StartPageView::StartPageTilesContainer::OnContainerSelected(
|
| + bool from_bottom) {
|
| +}
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// StartPageView implementation:
|
| StartPageView::StartPageView(AppListMainView* app_list_main_view,
|
| AppListViewDelegate* view_delegate)
|
| : app_list_main_view_(app_list_main_view),
|
| @@ -70,16 +170,17 @@ StartPageView::StartPageView(AppListMainView* app_list_main_view,
|
| search_box_spacer_view_(new SearchBoxSpacerView(
|
| app_list_main_view->search_box_view()->GetPreferredSize())),
|
| instant_container_(new views::View),
|
| - tiles_container_(new views::View) {
|
| + tiles_container_(new StartPageTilesContainer(new AllAppsTileItemView(
|
| + app_list_main_view_->contents_view(),
|
| + view_delegate_->GetModel()->top_level_item_list()))) {
|
| // The view containing the start page WebContents and SearchBoxSpacerView.
|
| InitInstantContainer();
|
| AddChildView(instant_container_);
|
|
|
| // The view containing the start page tiles.
|
| - InitTilesContainer();
|
| AddChildView(tiles_container_);
|
|
|
| - SetResults(view_delegate_->GetModel()->results());
|
| + tiles_container_->SetResults(view_delegate_->GetModel()->results());
|
| Reset();
|
| }
|
|
|
| @@ -107,48 +208,27 @@ void StartPageView::InitInstantContainer() {
|
| instant_container_->AddChildView(search_box_spacer_view_);
|
| }
|
|
|
| -void StartPageView::InitTilesContainer() {
|
| - views::BoxLayout* tiles_layout_manager =
|
| - new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, kTileSpacing);
|
| - tiles_layout_manager->set_main_axis_alignment(
|
| - views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER);
|
| - tiles_container_->SetLayoutManager(tiles_layout_manager);
|
| - tiles_container_->set_background(
|
| - views::Background::CreateSolidBackground(kLabelBackgroundColor));
|
| -
|
| - // Add SearchResultTileItemViews to the container.
|
| - for (size_t i = 0; i < kNumStartPageTiles; ++i) {
|
| - SearchResultTileItemView* tile_item = new SearchResultTileItemView();
|
| - tiles_container_->AddChildView(tile_item);
|
| - tile_item->SetParentBackgroundColor(kLabelBackgroundColor);
|
| - search_result_tile_views_.push_back(tile_item);
|
| - }
|
| -
|
| - // Also add a special "all apps" button to the end of the container.
|
| - all_apps_button_ = new AllAppsTileItemView(
|
| - app_list_main_view_->contents_view(),
|
| - view_delegate_->GetModel()->top_level_item_list());
|
| - all_apps_button_->UpdateIcon();
|
| - all_apps_button_->SetParentBackgroundColor(kLabelBackgroundColor);
|
| - tiles_container_->AddChildView(all_apps_button_);
|
| -}
|
| -
|
| void StartPageView::Reset() {
|
| - Update();
|
| + tiles_container_->Update();
|
| }
|
|
|
| void StartPageView::UpdateForTesting() {
|
| - Update();
|
| + tiles_container_->Update();
|
| +}
|
| +
|
| +const std::vector<SearchResultTileItemView*>& StartPageView::tile_views()
|
| + const {
|
| + return tiles_container_->tile_views();
|
| }
|
|
|
| TileItemView* StartPageView::all_apps_button() const {
|
| - return all_apps_button_;
|
| + return tiles_container_->all_apps_button();
|
| }
|
|
|
| void StartPageView::OnShow() {
|
| DCHECK(app_list_main_view_->contents_view()->ShouldShowCustomPageClickzone());
|
| UpdateCustomPageClickzoneVisibility();
|
| - ClearSelectedIndex();
|
| + tiles_container_->ClearSelectedIndex();
|
| }
|
|
|
| void StartPageView::OnHide() {
|
| @@ -169,8 +249,9 @@ void StartPageView::Layout() {
|
| }
|
|
|
| bool StartPageView::OnKeyPressed(const ui::KeyEvent& event) {
|
| - if (selected_index() >= 0 &&
|
| - tiles_container_->child_at(selected_index())->OnKeyPressed(event))
|
| + int selected_index = tiles_container_->selected_index();
|
| + if (selected_index >= 0 &&
|
| + tiles_container_->child_at(selected_index)->OnKeyPressed(event))
|
| return true;
|
|
|
| int dir = 0;
|
| @@ -183,7 +264,7 @@ bool StartPageView::OnKeyPressed(const ui::KeyEvent& event) {
|
| break;
|
| case ui::VKEY_DOWN:
|
| // Down selects the first tile if nothing is selected.
|
| - if (!IsValidSelectionIndex(selected_index()))
|
| + if (!tiles_container_->IsValidSelectionIndex(selected_index))
|
| dir = 1;
|
| break;
|
| case ui::VKEY_TAB:
|
| @@ -196,23 +277,21 @@ bool StartPageView::OnKeyPressed(const ui::KeyEvent& event) {
|
| if (dir == 0)
|
| return false;
|
|
|
| - if (!IsValidSelectionIndex(selected_index())) {
|
| - SetSelectedIndex(dir == -1 ? num_results() - 1 : 0);
|
| + if (!tiles_container_->IsValidSelectionIndex(selected_index)) {
|
| + tiles_container_->SetSelectedIndex(
|
| + dir == -1 ? tiles_container_->num_results() - 1 : 0);
|
| return true;
|
| }
|
|
|
| - int selection_index = selected_index() + dir;
|
| - if (IsValidSelectionIndex(selection_index)) {
|
| - SetSelectedIndex(selection_index);
|
| + int selection_index = selected_index + dir;
|
| + if (tiles_container_->IsValidSelectionIndex(selection_index)) {
|
| + tiles_container_->SetSelectedIndex(selection_index);
|
| return true;
|
| }
|
|
|
| return false;
|
| }
|
|
|
| -void StartPageView::OnContainerSelected(bool from_bottom) {
|
| -}
|
| -
|
| gfx::Rect StartPageView::GetSearchBoxBounds() const {
|
| return search_box_spacer_view_->bounds();
|
| }
|
| @@ -233,39 +312,8 @@ void StartPageView::UpdateCustomPageClickzoneVisibility() {
|
| custom_page_clickzone->Hide();
|
| }
|
|
|
| -int StartPageView::Update() {
|
| - std::vector<SearchResult*> display_results =
|
| - AppListModel::FilterSearchResultsByDisplayType(
|
| - results(), SearchResult::DISPLAY_RECOMMENDATION, kNumStartPageTiles);
|
| -
|
| - // Update the tile item results.
|
| - for (size_t i = 0; i < search_result_tile_views_.size(); ++i) {
|
| - SearchResult* item = NULL;
|
| - if (i < display_results.size())
|
| - item = display_results[i];
|
| - search_result_tile_views_[i]->SetSearchResult(item);
|
| - }
|
| -
|
| - tiles_container_->Layout();
|
| - Layout();
|
| - // Add 1 to the results size to account for the all apps button.
|
| - return display_results.size() + 1;
|
| -}
|
| -
|
| -void StartPageView::UpdateSelectedIndex(int old_selected, int new_selected) {
|
| - if (old_selected >= 0)
|
| - GetTileItemView(old_selected)->SetSelected(false);
|
| -
|
| - if (new_selected >= 0)
|
| - GetTileItemView(new_selected)->SetSelected(true);
|
| -}
|
| -
|
| TileItemView* StartPageView::GetTileItemView(size_t index) {
|
| - DCHECK_GT(kNumStartPageTiles + 1, index);
|
| - if (index == kNumStartPageTiles)
|
| - return all_apps_button_;
|
| -
|
| - return search_result_tile_views_[index];
|
| + return tiles_container_->GetTileItemView(index);
|
| }
|
|
|
| } // namespace app_list
|
|
|