| Index: chrome/browser/ui/app_list/search/app_search_provider.cc
|
| diff --git a/chrome/browser/ui/app_list/search/app_search_provider.cc b/chrome/browser/ui/app_list/search/app_search_provider.cc
|
| index 849d6612047830d4ee71f573494732f38c835a69..87fd8ad78aed677faad1e5f0f44cd322a14d392d 100644
|
| --- a/chrome/browser/ui/app_list/search/app_search_provider.cc
|
| +++ b/chrome/browser/ui/app_list/search/app_search_provider.cc
|
| @@ -14,6 +14,7 @@
|
| #include "chrome/browser/ui/app_list/search/app_result.h"
|
| #include "chrome/browser/ui/app_list/search/tokenized_string.h"
|
| #include "chrome/browser/ui/app_list/search/tokenized_string_match.h"
|
| +#include "extensions/browser/extension_prefs.h"
|
| #include "extensions/browser/extension_registry.h"
|
| #include "extensions/browser/extension_system.h"
|
| #include "extensions/common/extension.h"
|
| @@ -25,18 +26,21 @@ namespace app_list {
|
|
|
| class AppSearchProvider::App {
|
| public:
|
| - explicit App(const extensions::Extension* extension)
|
| + explicit App(const extensions::Extension* extension,
|
| + const base::Time& last_launch_time)
|
| : app_id_(extension->id()),
|
| - indexed_name_(base::UTF8ToUTF16(extension->name())) {
|
| - }
|
| + indexed_name_(base::UTF8ToUTF16(extension->name())),
|
| + last_launch_time_(last_launch_time) {}
|
| ~App() {}
|
|
|
| const std::string& app_id() const { return app_id_; }
|
| const TokenizedString& indexed_name() const { return indexed_name_; }
|
| + const base::Time& last_launch_time() const { return last_launch_time_; }
|
|
|
| private:
|
| const std::string app_id_;
|
| TokenizedString indexed_name_;
|
| + base::Time last_launch_time_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(App);
|
| };
|
| @@ -53,27 +57,45 @@ AppSearchProvider::AppSearchProvider(Profile* profile,
|
| AppSearchProvider::~AppSearchProvider() {}
|
|
|
| void AppSearchProvider::Start(const base::string16& query) {
|
| + StartImpl(base::Time::Now(), query);
|
| +}
|
| +
|
| +void AppSearchProvider::Stop() {
|
| +}
|
| +
|
| +void AppSearchProvider::StartImpl(const base::Time& current_time,
|
| + const base::string16& query) {
|
| const TokenizedString query_terms(query);
|
|
|
| ClearResults();
|
|
|
| - TokenizedStringMatch match;
|
| + bool show_recommendations = query.empty();
|
| + // Refresh list of apps to ensure we have the latest launch time information.
|
| + if (show_recommendations)
|
| + RefreshApps();
|
| +
|
| for (Apps::const_iterator app_it = apps_.begin();
|
| app_it != apps_.end();
|
| ++app_it) {
|
| - if (!match.Calculate(query_terms, (*app_it)->indexed_name()))
|
| - continue;
|
| -
|
| scoped_ptr<AppResult> result(
|
| new AppResult(profile_, (*app_it)->app_id(), list_controller_));
|
| - result->UpdateFromMatch((*app_it)->indexed_name(), match);
|
| + if (show_recommendations) {
|
| + result->set_title((*app_it)->indexed_name().text());
|
| + result->UpdateFromLastLaunched(current_time,
|
| + (*app_it)->last_launch_time());
|
| + } else {
|
| + TokenizedStringMatch match;
|
| + if (!match.Calculate(query_terms, (*app_it)->indexed_name()))
|
| + continue;
|
| +
|
| + result->UpdateFromMatch((*app_it)->indexed_name(), match);
|
| + }
|
| Add(result.PassAs<SearchResult>());
|
| }
|
| }
|
|
|
| -void AppSearchProvider::Stop() {}
|
| -
|
| void AppSearchProvider::AddApps(const extensions::ExtensionSet& extensions) {
|
| + extensions::ExtensionPrefs* prefs = extensions::ExtensionPrefs::Get(profile_);
|
| for (extensions::ExtensionSet::const_iterator iter = extensions.begin();
|
| iter != extensions.end(); ++iter) {
|
| const extensions::Extension* app = iter->get();
|
| @@ -84,7 +106,8 @@ void AppSearchProvider::AddApps(const extensions::ExtensionSet& extensions) {
|
| if (profile_->IsOffTheRecord() &&
|
| !extensions::util::CanLoadInIncognito(app, profile_))
|
| continue;
|
| - apps_.push_back(new App(app));
|
| +
|
| + apps_.push_back(new App(app, prefs->GetLastLaunchTime(app->id())));
|
| }
|
| }
|
|
|
|
|