#include "ash/birch/test_birch_client.h"
#include "ash/birch/birch_item.h"
#include "ash/birch/birch_model.h"
#include "ash/constants/ash_pref_names.h"
#include "ash/session/session_controller_impl.h"
#include "ash/shell.h"
#include "components/prefs/pref_service.h"
#include "ui/base/models/image_model.h"
namespace ash {
template <typename T>
TestBirchDataProvider<T>::TestBirchDataProvider(
DataFetchedCallback data_fetched_callback,
const std::string& pref_name)
: data_fetched_callback_(data_fetched_callback), pref_name_(pref_name) {}
template <typename T>
TestBirchDataProvider<T>::~TestBirchDataProvider() = default;
template <typename T>
void TestBirchDataProvider<T>::ClearItems() {
items_.clear();
}
template <typename T>
void TestBirchDataProvider<T>::RunDataProviderChangedCallback() {
NotifyDataProviderChanged();
}
template <typename T>
void TestBirchDataProvider<T>::RequestBirchDataFetch() {
data_fetched_callback_.Run(
(pref_name_.empty() || Shell::Get()
->session_controller()
->GetPrimaryUserPrefService()
->GetBoolean(pref_name_))
? items_
: std::vector<T>());
}
template class TestBirchDataProvider<BirchLostMediaItem>;
template class TestBirchDataProvider<BirchWeatherItem>;
template class TestBirchDataProvider<BirchCoralItem>;
TestBirchClient::TestBirchClient(BirchModel* birch_model) {
calendar_provider_ =
std::make_unique<TestBirchDataProvider<BirchCalendarItem>>(
base::BindRepeating(&TestBirchClient::HandleCalendarFetch,
base::Unretained(this)),
prefs::kBirchUseCalendar);
file_provider_ = std::make_unique<TestBirchDataProvider<BirchFileItem>>(
base::BindRepeating(&BirchModel::SetFileSuggestItems,
base::Unretained(birch_model)),
prefs::kBirchUseFileSuggest);
tab_provider_ = std::make_unique<TestBirchDataProvider<BirchTabItem>>(
base::BindRepeating(&BirchModel::SetRecentTabItems,
base::Unretained(birch_model)),
prefs::kBirchUseChromeTabs);
last_active_provider_ =
std::make_unique<TestBirchDataProvider<BirchLastActiveItem>>(
base::BindRepeating(&BirchModel::SetLastActiveItems,
base::Unretained(birch_model)),
prefs::kBirchUseChromeTabs);
most_visited_provider_ =
std::make_unique<TestBirchDataProvider<BirchMostVisitedItem>>(
base::BindRepeating(&BirchModel::SetMostVisitedItems,
base::Unretained(birch_model)),
prefs::kBirchUseChromeTabs);
self_share_provider_ =
std::make_unique<TestBirchDataProvider<BirchSelfShareItem>>(
base::BindRepeating(&BirchModel::SetSelfShareItems,
base::Unretained(birch_model)),
prefs::kBirchUseChromeTabs);
lost_media_provider_ =
std::make_unique<TestBirchDataProvider<BirchLostMediaItem>>(
base::BindRepeating(&BirchModel::SetLostMediaItems,
base::Unretained(birch_model)),
prefs::kBirchUseLostMedia);
release_notes_provider_ =
std::make_unique<TestBirchDataProvider<BirchReleaseNotesItem>>(
base::BindRepeating(&BirchModel::SetReleaseNotesItems,
base::Unretained(birch_model)),
std::string());
CHECK(test_dir_.CreateUniqueTempDir());
}
TestBirchClient::~TestBirchClient() = default;
void TestBirchClient::SetCalendarItems(
const std::vector<BirchCalendarItem>& items) {
calendar_provider_->set_items(items);
}
void TestBirchClient::SetFileSuggestItems(
const std::vector<BirchFileItem>& items) {
file_provider_->set_items(items);
}
void TestBirchClient::SetRecentTabsItems(
const std::vector<BirchTabItem>& items) {
tab_provider_->set_items(items);
}
void TestBirchClient::SetLastActiveItems(
const std::vector<BirchLastActiveItem>& items) {
last_active_provider_->set_items(items);
}
void TestBirchClient::SetMostVisitedItems(
const std::vector<BirchMostVisitedItem>& items) {
most_visited_provider_->set_items(items);
}
void TestBirchClient::SetReleaseNotesItems(
const std::vector<BirchReleaseNotesItem>& items) {
release_notes_provider_->set_items(items);
}
void TestBirchClient::SetSelfShareItems(
const std::vector<BirchSelfShareItem>& items) {
self_share_provider_->set_items(items);
}
void TestBirchClient::SetLostMediaItems(
const std::vector<BirchLostMediaItem>& items) {
lost_media_provider_->set_items(items);
}
void TestBirchClient::Reset() {
calendar_provider_->ClearItems();
file_provider_->ClearItems();
tab_provider_->ClearItems();
last_active_provider_->ClearItems();
release_notes_provider_->ClearItems();
self_share_provider_->ClearItems();
lost_media_provider_->ClearItems();
}
BirchDataProvider* TestBirchClient::GetCalendarProvider() {
return calendar_provider_.get();
}
BirchDataProvider* TestBirchClient::GetFileSuggestProvider() {
return file_provider_.get();
}
BirchDataProvider* TestBirchClient::GetRecentTabsProvider() {
return tab_provider_.get();
}
BirchDataProvider* TestBirchClient::GetLastActiveProvider() {
return last_active_provider_.get();
}
BirchDataProvider* TestBirchClient::GetMostVisitedProvider() {
return most_visited_provider_.get();
}
BirchDataProvider* TestBirchClient::GetSelfShareProvider() {
return self_share_provider_.get();
}
BirchDataProvider* TestBirchClient::GetLostMediaProvider() {
return lost_media_provider_.get();
}
BirchDataProvider* TestBirchClient::GetReleaseNotesProvider() {
return release_notes_provider_.get();
}
void TestBirchClient::WaitForRefreshTokens(base::OnceClosure callback) {
std::move(callback).Run();
}
base::FilePath TestBirchClient::GetRemovedItemsFilePath() {
return test_dir_.GetPath();
}
ui::ImageModel TestBirchClient::GetChromeBackupIcon() {
return ui::ImageModel();
}
void TestBirchClient::HandleCalendarFetch(
const std::vector<BirchCalendarItem>& items) {
Shell::Get()->birch_model()->SetCalendarItems(items);
Shell::Get()->birch_model()->SetAttachmentItems({});
}
}