assistant_setup_controller.cc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/assistant/assistant_setup_controller.h"
  5. #include "ash/assistant/assistant_controller_impl.h"
  6. #include "ash/assistant/util/deep_link_util.h"
  7. #include "ash/assistant/util/i18n_util.h"
  8. #include "ash/public/cpp/assistant/controller/assistant_ui_controller.h"
  9. #include "base/bind.h"
  10. #include "base/callback_helpers.h"
  11. #include "chromeos/ash/services/assistant/public/cpp/assistant_prefs.h"
  12. #include "chromeos/ash/services/assistant/public/cpp/features.h"
  13. namespace {
  14. constexpr char kGSuiteAdministratorInstructionsUrl[] =
  15. "https://support.google.com/a/answer/6304876";
  16. } // namespace
  17. namespace ash {
  18. AssistantSetupController::AssistantSetupController(
  19. AssistantControllerImpl* assistant_controller)
  20. : assistant_controller_(assistant_controller) {
  21. assistant_controller_observation_.Observe(AssistantController::Get());
  22. }
  23. AssistantSetupController::~AssistantSetupController() = default;
  24. void AssistantSetupController::OnAssistantControllerConstructed() {
  25. assistant_controller_->view_delegate()->AddObserver(this);
  26. }
  27. void AssistantSetupController::OnAssistantControllerDestroying() {
  28. assistant_controller_->view_delegate()->RemoveObserver(this);
  29. }
  30. void AssistantSetupController::OnDeepLinkReceived(
  31. assistant::util::DeepLinkType type,
  32. const std::map<std::string, std::string>& params) {
  33. if (type != assistant::util::DeepLinkType::kOnboarding)
  34. return;
  35. absl::optional<bool> relaunch = assistant::util::GetDeepLinkParamAsBool(
  36. params, assistant::util::DeepLinkParam::kRelaunch);
  37. StartOnboarding(relaunch.value_or(false));
  38. }
  39. void AssistantSetupController::OnOptInButtonPressed() {
  40. using assistant::prefs::ConsentStatus;
  41. if (AssistantState::Get()->consent_status().value_or(
  42. ConsentStatus::kUnknown) == ConsentStatus::kUnauthorized) {
  43. AssistantController::Get()->OpenUrl(assistant::util::CreateLocalizedGURL(
  44. kGSuiteAdministratorInstructionsUrl));
  45. } else {
  46. StartOnboarding(/*relaunch=*/true);
  47. }
  48. }
  49. void AssistantSetupController::StartOnboarding(bool relaunch, FlowType type) {
  50. auto* assistant_setup = AssistantSetup::GetInstance();
  51. if (!assistant_setup)
  52. return;
  53. AssistantUiController::Get()->CloseUi(assistant::AssistantExitPoint::kSetup);
  54. assistant_setup->StartAssistantOptInFlow(
  55. type, base::BindOnce(&AssistantSetupController::OnOptInFlowFinished,
  56. weak_ptr_factory_.GetWeakPtr(), relaunch));
  57. }
  58. void AssistantSetupController::OnOptInFlowFinished(bool relaunch,
  59. bool completed) {
  60. if (relaunch && completed) {
  61. AssistantUiController::Get()->ShowUi(
  62. assistant::AssistantEntryPoint::kSetup);
  63. }
  64. }
  65. } // namespace ash