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

Unified Diff: ui/app_list/views/start_page_view.cc

Issue 439703002: Allow app list tiles to show search results in the experimental app list. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix athena Created 6 years, 4 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: 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 affdc2d938ed7cd9917ce68b5a6c0941516732da..374e9fcf35b81f5720cb7773758df4a5afe761a6 100644
--- a/ui/app_list/views/start_page_view.cc
+++ b/ui/app_list/views/start_page_view.cc
@@ -9,6 +9,7 @@
#include "ui/app_list/app_list_item.h"
#include "ui/app_list/app_list_model.h"
#include "ui/app_list/app_list_view_delegate.h"
+#include "ui/app_list/search_result.h"
#include "ui/app_list/views/app_list_main_view.h"
#include "ui/app_list/views/search_box_view.h"
#include "ui/app_list/views/search_result_list_view.h"
@@ -95,14 +96,15 @@ class DummySearchBoxView : public SearchBoxView {
StartPageView::StartPageView(AppListMainView* app_list_main_view,
AppListViewDelegate* view_delegate)
: app_list_main_view_(app_list_main_view),
- model_(NULL),
+ search_results_model_(NULL),
view_delegate_(view_delegate),
search_box_view_(new DummySearchBoxView(this, view_delegate_)),
results_view_(
new SearchResultListView(app_list_main_view, view_delegate)),
instant_container_(new views::View),
tiles_container_(new views::View),
- show_state_(SHOW_START_PAGE) {
+ show_state_(SHOW_START_PAGE),
+ update_factory_(this) {
// The view containing the start page WebContents and DummySearchBoxView.
InitInstantContainer();
AddChildView(instant_container_);
@@ -120,8 +122,8 @@ StartPageView::StartPageView(AppListMainView* app_list_main_view,
StartPageView::~StartPageView() {
view_delegate_->RemoveObserver(this);
- if (model_)
- model_->RemoveObserver(this);
+ if (search_results_model_)
+ search_results_model_->RemoveObserver(this);
}
void StartPageView::InitInstantContainer() {
@@ -168,29 +170,22 @@ void StartPageView::InitTilesContainer() {
void StartPageView::SetModel(AppListModel* model) {
DCHECK(model);
- if (model_)
- model_->RemoveObserver(this);
- model_ = model;
- model_->AddObserver(this);
- results_view_->SetResults(model_->results());
+ if (search_results_model_)
+ search_results_model_->RemoveObserver(this);
+ search_results_model_ = model->results();
+ search_results_model_->AddObserver(this);
+ results_view_->SetResults(search_results_model_);
Reset();
}
void StartPageView::Reset() {
SetShowState(SHOW_START_PAGE);
- if (!model_ || !model_->top_level_item_list())
- return;
-
- for (size_t i = 0; i < kNumStartPageTiles; ++i) {
- AppListItem* item = NULL;
- if (i < model_->top_level_item_list()->item_count())
- item = model_->top_level_item_list()->item_at(i);
- tile_views_[i]->SetAppListItem(item);
- }
+ Update();
}
void StartPageView::ShowSearchResults() {
SetShowState(SHOW_SEARCH_RESULTS);
+ Update();
}
void StartPageView::SetShowState(ShowState show_state) {
@@ -207,6 +202,9 @@ void StartPageView::SetShowState(ShowState show_state) {
show_state_ = show_state;
+ if (show_state_ == SHOW_START_PAGE)
+ search_box_view_->ClearSearch();
+
results_view_->UpdateAutoLaunchState();
if (show_state == SHOW_SEARCH_RESULTS)
results_view_->SetSelectedIndex(0);
@@ -236,6 +234,32 @@ void StartPageView::Layout() {
tiles_container_->SetBoundsRect(bounds);
}
+void StartPageView::Update() {
+ std::vector<SearchResult*> display_results =
+ AppListModel::FilterSearchResultsByDisplayType(search_results_model_,
+ SearchResult::DISPLAY_TILE,
+ kNumStartPageTiles);
+ for (size_t i = 0; i < kNumStartPageTiles; ++i) {
+ SearchResult* item = NULL;
+ if (i < display_results.size())
+ item = display_results[i];
+ tile_views_[i]->SetSearchResult(item);
+ }
+ tiles_container_->Layout();
+ Layout();
+ update_factory_.InvalidateWeakPtrs();
+}
+
+void StartPageView::ScheduleUpdate() {
+ // When search results are added one by one, each addition generates an update
+ // request. Consolidates those update requests into one Update call.
+ if (!update_factory_.HasWeakPtrs()) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&StartPageView::Update, update_factory_.GetWeakPtr()));
+ }
+}
+
void StartPageView::QueryChanged(SearchBoxView* sender) {
// Forward the search terms on to the real search box and clear the dummy
// search box.
@@ -248,20 +272,20 @@ void StartPageView::OnProfilesChanged() {
SetModel(view_delegate_->GetModel());
}
-void StartPageView::OnAppListModelStatusChanged() {
- Reset();
+void StartPageView::ListItemsAdded(size_t start, size_t count) {
+ ScheduleUpdate();
}
-void StartPageView::OnAppListItemAdded(AppListItem* item) {
- Reset();
+void StartPageView::ListItemsRemoved(size_t start, size_t count) {
+ ScheduleUpdate();
}
-void StartPageView::OnAppListItemDeleted() {
- Reset();
+void StartPageView::ListItemMoved(size_t index, size_t target_index) {
+ ScheduleUpdate();
}
-void StartPageView::OnAppListItemUpdated(AppListItem* item) {
- Reset();
+void StartPageView::ListItemsChanged(size_t start, size_t count) {
+ ScheduleUpdate();
}
} // namespace app_list

Powered by Google App Engine
This is Rietveld 408576698