OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/app_list/search/mixer.h" | 5 #include "chrome/browser/ui/app_list/search/mixer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "chrome/browser/ui/app_list/search/chrome_search_result.h" | 12 #include "chrome/browser/ui/app_list/search/chrome_search_result.h" |
13 #include "chrome/browser/ui/app_list/search/search_provider.h" | 13 #include "chrome/browser/ui/app_list/search/search_provider.h" |
14 | 14 |
15 namespace app_list { | 15 namespace app_list { |
16 | 16 |
17 namespace { | 17 namespace { |
18 | 18 |
19 // Maximum number of results to show. | 19 // Maximum number of results to show. |
20 const size_t kMaxResults = 6; | 20 const size_t kMaxResults = 6; |
21 const size_t kMaxMainGroupResults = 4; | 21 const size_t kMaxMainGroupResults = 4; |
22 const size_t kMaxWebstoreResults = 2; | 22 const size_t kMaxWebstoreResults = 2; |
| 23 const size_t kMaxPeopleResults = 2; |
23 | 24 |
24 // A value to indicate no max number of results limit. | 25 // A value to indicate no max number of results limit. |
25 const size_t kNoMaxResultsLimit = 0; | 26 const size_t kNoMaxResultsLimit = 0; |
26 | 27 |
27 // Used for sorting and mixing results. | 28 // Used for sorting and mixing results. |
28 struct SortData { | 29 struct SortData { |
29 SortData() | 30 SortData() |
30 : result(NULL), | 31 : result(NULL), |
31 score(0.0) { | 32 score(0.0) { |
32 } | 33 } |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 SortedResults results_; | 165 SortedResults results_; |
165 | 166 |
166 DISALLOW_COPY_AND_ASSIGN(Group); | 167 DISALLOW_COPY_AND_ASSIGN(Group); |
167 }; | 168 }; |
168 | 169 |
169 Mixer::Mixer(AppListModel::SearchResults* ui_results) | 170 Mixer::Mixer(AppListModel::SearchResults* ui_results) |
170 : ui_results_(ui_results) {} | 171 : ui_results_(ui_results) {} |
171 Mixer::~Mixer() {} | 172 Mixer::~Mixer() {} |
172 | 173 |
173 void Mixer::Init() { | 174 void Mixer::Init() { |
174 groups_.push_back(new Group(kMaxMainGroupResults, 2.0)); | 175 groups_.push_back(new Group(kMaxMainGroupResults, 3.0)); |
175 groups_.push_back(new Group(kNoMaxResultsLimit, 1.0)); | 176 groups_.push_back(new Group(kNoMaxResultsLimit, 2.0)); |
176 groups_.push_back(new Group(kMaxWebstoreResults, 0.0)); | 177 groups_.push_back(new Group(kMaxWebstoreResults, 1.0)); |
| 178 groups_.push_back(new Group(kMaxPeopleResults, 0.0)); |
177 } | 179 } |
178 | 180 |
179 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { | 181 void Mixer::AddProviderToGroup(GroupId group, SearchProvider* provider) { |
180 size_t group_index = static_cast<size_t>(group); | 182 size_t group_index = static_cast<size_t>(group); |
181 groups_[group_index]->AddProvider(provider); | 183 groups_[group_index]->AddProvider(provider); |
182 } | 184 } |
183 | 185 |
184 void Mixer::MixAndPublish(const KnownResults& known_results) { | 186 void Mixer::MixAndPublish(const KnownResults& known_results) { |
185 FetchResults(known_results); | 187 FetchResults(known_results); |
186 | 188 |
187 SortedResults results; | 189 SortedResults results; |
188 results.reserve(kMaxResults); | 190 results.reserve(kMaxResults); |
189 | 191 |
190 // Adds main group and web store results first. | 192 // Adds main group and web store results first. |
191 results.insert(results.end(), | 193 results.insert(results.end(), |
192 groups_[MAIN_GROUP]->results().begin(), | 194 groups_[MAIN_GROUP]->results().begin(), |
193 groups_[MAIN_GROUP]->results().end()); | 195 groups_[MAIN_GROUP]->results().end()); |
194 results.insert(results.end(), | 196 results.insert(results.end(), |
195 groups_[WEBSTORE_GROUP]->results().begin(), | 197 groups_[WEBSTORE_GROUP]->results().begin(), |
196 groups_[WEBSTORE_GROUP]->results().end()); | 198 groups_[WEBSTORE_GROUP]->results().end()); |
| 199 results.insert(results.end(), |
| 200 groups_[PEOPLE_GROUP]->results().begin(), |
| 201 groups_[PEOPLE_GROUP]->results().end()); |
197 | 202 |
198 // Collapse duplicate apps from local and web store. | 203 // Collapse duplicate apps from local and web store. |
199 RemoveDuplicates(&results); | 204 RemoveDuplicates(&results); |
200 | 205 |
201 DCHECK_GE(kMaxResults, results.size()); | 206 DCHECK_GE(kMaxResults, results.size()); |
202 size_t remaining_slots = kMaxResults - results.size(); | 207 size_t remaining_slots = kMaxResults - results.size(); |
203 | 208 |
204 // Reserves at least one slot for the omnibox result. If there is no available | 209 // Reserves at least one slot for the omnibox result. If there is no available |
205 // slot for omnibox results, removes the last one from web store. | 210 // slot for omnibox results, removes the last one from web store. |
206 const size_t omnibox_results = groups_[OMNIBOX_GROUP]->results().size(); | 211 const size_t omnibox_results = groups_[OMNIBOX_GROUP]->results().size(); |
(...skipping 15 matching lines...) Expand all Loading... |
222 | 227 |
223 void Mixer::FetchResults(const KnownResults& known_results) { | 228 void Mixer::FetchResults(const KnownResults& known_results) { |
224 for (Groups::iterator group_it = groups_.begin(); | 229 for (Groups::iterator group_it = groups_.begin(); |
225 group_it != groups_.end(); | 230 group_it != groups_.end(); |
226 ++group_it) { | 231 ++group_it) { |
227 (*group_it)->FetchResults(known_results); | 232 (*group_it)->FetchResults(known_results); |
228 } | 233 } |
229 } | 234 } |
230 | 235 |
231 } // namespace app_list | 236 } // namespace app_list |
OLD | NEW |