blob: 115856f9cf9806becadae1a9bf7ac15ef074d87a [file] [log] [blame]
// Copyright 2017 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 ASH_APP_LIST_MODEL_SEARCH_SEARCH_MODEL_H_
#define ASH_APP_LIST_MODEL_SEARCH_SEARCH_MODEL_H_
#include <memory>
#include <set>
#include <string>
#include <vector>
#include "ash/app_list/model/app_list_model_export.h"
#include "ash/app_list/model/search/search_box_model.h"
#include "ash/app_list/model/search/search_result.h"
#include "base/callback.h"
#include "ui/base/models/list_model.h"
namespace app_list {
class SearchBoxModel;
// A model of app list that holds two search related sub models:
// - SearchBoxModel: the model for SearchBoxView.
// - SearchResults: owning a list of SearchResult.
class APP_LIST_MODEL_EXPORT SearchModel {
public:
using SearchResults = ui::ListModel<SearchResult>;
SearchModel();
~SearchModel();
// Whether tablet mode is active. Controlled by AppListView.
void SetTabletMode(bool is_tablet_mode);
bool tablet_mode() const { return search_box_->is_tablet_mode(); }
void SetSearchEngineIsGoogle(bool is_google);
bool search_engine_is_google() const {
return search_box_->search_engine_is_google();
}
// Filters the given |results| by |display_type| and with exclusion of
// results in the |excludes|. The returned list is
// truncated to |max_results|.
static std::vector<SearchResult*> FilterSearchResultsByDisplayType(
SearchResults* results,
SearchResult::DisplayType display_type,
const std::set<std::string>& excludes,
size_t max_results);
// Filter the given |results| by those which |result_filter| returns true for.
// The returned list is truncated to |max_results|.
static std::vector<SearchResult*> FilterSearchResultsByFunction(
SearchResults* results,
const base::RepeatingCallback<bool(const SearchResult&)>& result_filter,
size_t max_results);
SearchBoxModel* search_box() { return search_box_.get(); }
SearchResults* results() { return results_.get(); }
void PublishResults(std::vector<std::unique_ptr<SearchResult>> new_results);
SearchResult* FindSearchResult(const std::string& id);
// Returns the first available SearchResult which has not been marked as
// hidden by its source. Returns null if no such result exists.
SearchResult* GetFirstVisibleResult();
// Deletes all search results. This is used in profile switches.
void DeleteAllResults();
// Delete result by the given id.
void DeleteResultById(const std::string& id);
private:
std::unique_ptr<SearchBoxModel> search_box_;
std::unique_ptr<SearchResults> results_;
DISALLOW_COPY_AND_ASSIGN(SearchModel);
};
} // namespace app_list
#endif // ASH_APP_LIST_MODEL_SEARCH_SEARCH_MODEL_H_