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
5 #include "ash/assistant/assistant_setup_controller.h"
6
7 #include "ash/assistant/assistant_controller_impl.h"
8 #include "ash/assistant/util/deep_link_util.h"
9 #include "ash/assistant/util/i18n_util.h"
10 #include "ash/public/cpp/assistant/controller/assistant_ui_controller.h"
11 #include "base/bind.h"
12 #include "base/callback_helpers.h"
13 #include "chromeos/services/assistant/public/cpp/assistant_prefs.h"
14 #include "chromeos/services/assistant/public/cpp/features.h"
15
16 namespace {
17
18 constexpr char kGSuiteAdministratorInstructionsUrl[] =
19 "https://support.google.com/a/answer/6304876";
20
21 } // namespace
22
23 namespace ash {
24
AssistantSetupController(AssistantControllerImpl * assistant_controller)25 AssistantSetupController::AssistantSetupController(
26 AssistantControllerImpl* assistant_controller)
27 : assistant_controller_(assistant_controller) {
28 assistant_controller_observer_.Add(AssistantController::Get());
29 }
30
31 AssistantSetupController::~AssistantSetupController() = default;
32
OnAssistantControllerConstructed()33 void AssistantSetupController::OnAssistantControllerConstructed() {
34 assistant_controller_->view_delegate()->AddObserver(this);
35 }
36
OnAssistantControllerDestroying()37 void AssistantSetupController::OnAssistantControllerDestroying() {
38 assistant_controller_->view_delegate()->RemoveObserver(this);
39 }
40
OnDeepLinkReceived(assistant::util::DeepLinkType type,const std::map<std::string,std::string> & params)41 void AssistantSetupController::OnDeepLinkReceived(
42 assistant::util::DeepLinkType type,
43 const std::map<std::string, std::string>& params) {
44 if (type != assistant::util::DeepLinkType::kOnboarding)
45 return;
46
47 base::Optional<bool> relaunch = assistant::util::GetDeepLinkParamAsBool(
48 params, assistant::util::DeepLinkParam::kRelaunch);
49
50 StartOnboarding(relaunch.value_or(false));
51 }
52
OnOptInButtonPressed()53 void AssistantSetupController::OnOptInButtonPressed() {
54 using chromeos::assistant::prefs::ConsentStatus;
55 if (AssistantState::Get()->consent_status().value_or(
56 ConsentStatus::kUnknown) == ConsentStatus::kUnauthorized) {
57 AssistantController::Get()->OpenUrl(assistant::util::CreateLocalizedGURL(
58 kGSuiteAdministratorInstructionsUrl));
59 } else {
60 StartOnboarding(/*relaunch=*/true);
61 }
62 }
63
StartOnboarding(bool relaunch,FlowType type)64 void AssistantSetupController::StartOnboarding(bool relaunch, FlowType type) {
65 auto* assistant_setup = AssistantSetup::GetInstance();
66 if (!assistant_setup)
67 return;
68
69 AssistantUiController::Get()->CloseUi(
70 chromeos::assistant::AssistantExitPoint::kSetup);
71
72 assistant_setup->StartAssistantOptInFlow(
73 type, base::BindOnce(&AssistantSetupController::OnOptInFlowFinished,
74 weak_ptr_factory_.GetWeakPtr(), relaunch));
75 }
76
OnOptInFlowFinished(bool relaunch,bool completed)77 void AssistantSetupController::OnOptInFlowFinished(bool relaunch,
78 bool completed) {
79 if (relaunch && completed) {
80 AssistantUiController::Get()->ShowUi(
81 chromeos::assistant::AssistantEntryPoint::kSetup);
82 }
83 }
84
85 } // namespace ash
86