blob: 44abab8eb9c8740d8936420be67308b01c9456c4 [file]
// Copyright 2020 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.
#include "chromeos/components/phonehub/phone_hub_manager_impl.h"
#include "chromeos/components/phonehub/browser_tabs_metadata_fetcher.h"
#include "chromeos/components/phonehub/browser_tabs_model_controller.h"
#include "chromeos/components/phonehub/browser_tabs_model_provider.h"
#include "chromeos/components/phonehub/connection_manager_impl.h"
#include "chromeos/components/phonehub/connection_scheduler_impl.h"
#include "chromeos/components/phonehub/cros_state_sender.h"
#include "chromeos/components/phonehub/do_not_disturb_controller_impl.h"
#include "chromeos/components/phonehub/feature_status_provider_impl.h"
#include "chromeos/components/phonehub/find_my_device_controller_impl.h"
#include "chromeos/components/phonehub/invalid_connection_disconnector.h"
#include "chromeos/components/phonehub/message_receiver_impl.h"
#include "chromeos/components/phonehub/message_sender_impl.h"
#include "chromeos/components/phonehub/multidevice_setup_state_updater.h"
#include "chromeos/components/phonehub/mutable_phone_model.h"
#include "chromeos/components/phonehub/notification_access_manager_impl.h"
#include "chromeos/components/phonehub/notification_manager_impl.h"
#include "chromeos/components/phonehub/onboarding_ui_tracker_impl.h"
#include "chromeos/components/phonehub/phone_model.h"
#include "chromeos/components/phonehub/phone_status_processor.h"
#include "chromeos/components/phonehub/tether_controller_impl.h"
#include "chromeos/components/phonehub/user_action_recorder_impl.h"
#include "chromeos/dbus/power/power_manager_client.h"
#include "components/session_manager/core/session_manager.h"
namespace chromeos {
namespace phonehub {
PhoneHubManagerImpl::PhoneHubManagerImpl(
PrefService* pref_service,
device_sync::DeviceSyncClient* device_sync_client,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
chromeos::secure_channel::SecureChannelClient* secure_channel_client,
std::unique_ptr<BrowserTabsModelProvider> browser_tabs_model_provider,
const base::RepeatingClosure& show_multidevice_setup_dialog_callback)
: user_action_recorder_(std::make_unique<UserActionRecorderImpl>()),
connection_manager_(
std::make_unique<ConnectionManagerImpl>(multidevice_setup_client,
device_sync_client,
secure_channel_client)),
feature_status_provider_(std::make_unique<FeatureStatusProviderImpl>(
device_sync_client,
multidevice_setup_client,
connection_manager_.get(),
session_manager::SessionManager::Get(),
chromeos::PowerManagerClient::Get())),
message_receiver_(
std::make_unique<MessageReceiverImpl>(connection_manager_.get())),
message_sender_(
std::make_unique<MessageSenderImpl>(connection_manager_.get())),
cros_state_sender_(
std::make_unique<CrosStateSender>(message_sender_.get(),
connection_manager_.get(),
multidevice_setup_client)),
do_not_disturb_controller_(std::make_unique<DoNotDisturbControllerImpl>(
message_sender_.get(),
user_action_recorder_.get())),
connection_scheduler_(std::make_unique<ConnectionSchedulerImpl>(
connection_manager_.get(),
feature_status_provider_.get())),
find_my_device_controller_(std::make_unique<FindMyDeviceControllerImpl>(
message_sender_.get(),
user_action_recorder_.get())),
notification_access_manager_(
std::make_unique<NotificationAccessManagerImpl>(
pref_service,
feature_status_provider_.get(),
message_sender_.get(),
connection_scheduler_.get())),
notification_manager_(
std::make_unique<NotificationManagerImpl>(message_sender_.get(),
user_action_recorder_.get(),
multidevice_setup_client)),
onboarding_ui_tracker_(std::make_unique<OnboardingUiTrackerImpl>(
pref_service,
feature_status_provider_.get(),
multidevice_setup_client,
show_multidevice_setup_dialog_callback)),
phone_model_(std::make_unique<MutablePhoneModel>()),
phone_status_processor_(std::make_unique<PhoneStatusProcessor>(
do_not_disturb_controller_.get(),
feature_status_provider_.get(),
message_receiver_.get(),
find_my_device_controller_.get(),
notification_access_manager_.get(),
notification_manager_.get(),
multidevice_setup_client,
phone_model_.get())),
tether_controller_(
std::make_unique<TetherControllerImpl>(phone_model_.get(),
user_action_recorder_.get(),
multidevice_setup_client)),
browser_tabs_model_provider_(std::move(browser_tabs_model_provider)),
browser_tabs_model_controller_(
std::make_unique<BrowserTabsModelController>(
multidevice_setup_client,
browser_tabs_model_provider_.get(),
phone_model_.get())),
multidevice_setup_state_updater_(
std::make_unique<MultideviceSetupStateUpdater>(
pref_service,
multidevice_setup_client,
notification_access_manager_.get())),
invalid_connection_disconnector_(
std::make_unique<InvalidConnectionDisconnector>(
connection_manager_.get(),
phone_model_.get())) {}
PhoneHubManagerImpl::~PhoneHubManagerImpl() = default;
BrowserTabsModelProvider* PhoneHubManagerImpl::GetBrowserTabsModelProvider() {
return browser_tabs_model_provider_.get();
}
ConnectionScheduler* PhoneHubManagerImpl::GetConnectionScheduler() {
return connection_scheduler_.get();
}
DoNotDisturbController* PhoneHubManagerImpl::GetDoNotDisturbController() {
return do_not_disturb_controller_.get();
}
FeatureStatusProvider* PhoneHubManagerImpl::GetFeatureStatusProvider() {
return feature_status_provider_.get();
}
FindMyDeviceController* PhoneHubManagerImpl::GetFindMyDeviceController() {
return find_my_device_controller_.get();
}
NotificationAccessManager* PhoneHubManagerImpl::GetNotificationAccessManager() {
return notification_access_manager_.get();
}
NotificationManager* PhoneHubManagerImpl::GetNotificationManager() {
return notification_manager_.get();
}
OnboardingUiTracker* PhoneHubManagerImpl::GetOnboardingUiTracker() {
return onboarding_ui_tracker_.get();
}
PhoneModel* PhoneHubManagerImpl::GetPhoneModel() {
return phone_model_.get();
}
TetherController* PhoneHubManagerImpl::GetTetherController() {
return tether_controller_.get();
}
UserActionRecorder* PhoneHubManagerImpl::GetUserActionRecorder() {
return user_action_recorder_.get();
}
// These should be destroyed in the opposite order of how these objects are
// initialized in the constructor.
void PhoneHubManagerImpl::Shutdown() {
invalid_connection_disconnector_.reset();
multidevice_setup_state_updater_.reset();
browser_tabs_model_controller_.reset();
browser_tabs_model_provider_.reset();
tether_controller_.reset();
phone_status_processor_.reset();
phone_model_.reset();
onboarding_ui_tracker_.reset();
notification_manager_.reset();
notification_access_manager_.reset();
find_my_device_controller_.reset();
connection_scheduler_.reset();
do_not_disturb_controller_.reset();
cros_state_sender_.reset();
message_sender_.reset();
message_receiver_.reset();
feature_status_provider_.reset();
connection_manager_.reset();
user_action_recorder_.reset();
}
} // namespace phonehub
} // namespace chromeos