blob: 406b4cf545239c637cf710aa422a9f9fbe8111fd [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 <vector>
#include "base/callback.h"
#include "base/macros.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:
using Results = std::vector<std::unique_ptr<SearchResult>>;
using ResultChangedCallback = base::Closure;
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);
// Swaps the internal results with |new_results|.
// This is useful when multiple results will be added, and the notification is
// desired to be done only once when all results are added.
void SwapResults(Results* new_results);
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_