blob: 22f0f2c1e53207693284af461812e70485766c9c [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_APP_LIST_SEARCH_PROVIDER_H_
#define UI_APP_LIST_SEARCH_PROVIDER_H_
#include <memory>
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/scoped_vector.h"
#include "base/strings/string16.h"
#include "ui/app_list/app_list_export.h"
namespace app_list {
class SearchResult;
class APP_LIST_EXPORT SearchProvider {
public:
typedef ScopedVector<SearchResult> Results;
typedef base::Closure ResultChangedCallback;
SearchProvider();
virtual ~SearchProvider();
// Invoked to start a query.
virtual void Start(bool is_voice_query, const base::string16& query) = 0;
// Invoked to stop the current query and no more results changes.
virtual void Stop() = 0;
void set_result_changed_callback(const ResultChangedCallback& callback) {
result_changed_callback_ = callback;
}
const Results& results() const { return results_; }
protected:
// Interface for the derived class to generate search results.
void Add(std::unique_ptr<SearchResult> result);
void ClearResults();
private:
void FireResultChanged();
ResultChangedCallback result_changed_callback_;
Results results_;
DISALLOW_COPY_AND_ASSIGN(SearchProvider);
};
} // namespace app_list
#endif // UI_APP_LIST_SEARCH_PROVIDER_H_