| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ASH_BIRCH_BIRCH_MODEL_H_ |
| #define ASH_BIRCH_BIRCH_MODEL_H_ |
| |
| #include <optional> |
| #include <vector> |
| |
| #include "ash/ash_export.h" |
| #include "ash/birch/birch_client.h" |
| #include "ash/birch/birch_item.h" |
| #include "base/observer_list.h" |
| |
| namespace ash { |
| |
| class BirchWeatherProvider; |
| |
| // Birch model, which is used to aggregate and store relevant information from |
| // different providers. |
| class ASH_EXPORT BirchModel { |
| public: |
| // Birch Model Observers are notified when the list of items in the model |
| // has changed. |
| class Observer : public base::CheckedObserver { |
| public: |
| ~Observer() override = default; |
| |
| // TODO(b/305094143): Add a list of items to the model and call this |
| // function when the list of items changes. |
| virtual void OnItemsChanged() = 0; |
| }; |
| |
| BirchModel(); |
| BirchModel(const BirchModel&) = delete; |
| BirchModel& operator=(const BirchModel&) = delete; |
| ~BirchModel(); |
| |
| void AddObserver(Observer* observer); |
| void RemoveObserver(Observer* observer); |
| |
| // Send a request to the birch keyed service to fetch data into the model. |
| void RequestBirchDataFetch(); |
| |
| void SetFileSuggestItems(std::vector<BirchFileItem> file_suggest_items); |
| void SetRecentTabItems(std::vector<BirchTabItem> recent_tab_items); |
| void SetWeatherItems(std::vector<BirchWeatherItem> weather_items); |
| |
| void SetClient(BirchClient* client) { birch_client_ = client; } |
| |
| const std::vector<BirchFileItem>& GetFileSuggestItemsForTest() const { |
| return file_suggest_items_; |
| } |
| const std::vector<BirchTabItem>& GetTabsForTest() const { |
| return recent_tab_items_; |
| } |
| |
| const std::vector<BirchWeatherItem>& GetWeatherForTest() const { |
| return weather_items_; |
| } |
| |
| private: |
| // A type-specific list of items for all file suggestion items. |
| std::vector<BirchFileItem> file_suggest_items_; |
| |
| // A type-specific list of items for all tab items. |
| std::vector<BirchTabItem> recent_tab_items_; |
| |
| // A type-specific list of weather items. |
| std::vector<BirchWeatherItem> weather_items_; |
| |
| raw_ptr<BirchClient> birch_client_ = nullptr; |
| |
| std::unique_ptr<BirchWeatherProvider> weather_provider_; |
| |
| base::ObserverList<Observer> observers_; |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_BIRCH_BIRCH_MODEL_H_ |