#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_SEARCH_CONTROLLER_H_
#define CHROME_BROWSER_UI_APP_LIST_SEARCH_SEARCH_CONTROLLER_H_
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/scoped_vector.h"
#include "base/timer/timer.h"
#include "chrome/browser/ui/app_list/search/mixer.h"
#include "ui/app_list/app_list_model.h"
#include "ui/app_list/speech_ui_model_observer.h"
class AppListControllerDelegate;
class Profile;
namespace app_list {
class History;
class SearchBoxModel;
class SearchProvider;
class SearchResult;
class SpeechUIModel;
class SearchController : public SpeechUIModelObserver {
public:
SearchController(Profile* profile,
SearchBoxModel* search_box,
AppListModel::SearchResults* results,
SpeechUIModel* speech_ui,
AppListControllerDelegate* list_controller);
virtual ~SearchController();
void Init();
void Start();
void Stop();
void OpenResult(SearchResult* result, int event_flags);
void InvokeResultAction(SearchResult* result,
int action_index,
int event_flags);
private:
typedef ScopedVector<SearchProvider> Providers;
void AddProvider(Mixer::GroupId group,
scoped_ptr<SearchProvider> provider);
void OnResultsChanged();
virtual void OnSpeechRecognitionStateChanged(
SpeechRecognitionState new_state) OVERRIDE;
Profile* profile_;
SearchBoxModel* search_box_;
SpeechUIModel* speech_ui_;
AppListControllerDelegate* list_controller_;
bool dispatching_query_;
Providers providers_;
scoped_ptr<Mixer> mixer_;
History* history_;
base::OneShotTimer<SearchController> stop_timer_;
DISALLOW_COPY_AND_ASSIGN(SearchController);
};
}
#endif