Commit 3a41afb4 authored by Yue Li's avatar Yue Li Committed by Commit Bot

Handle relaunch parameter for Assistant opt in flow

Show Assistant UI on flow completion if relaunch parameter is set.

Bug: b/111406040, b/110847784
Test: Manual Test
Change-Id: I86c02bc90de7a4e797c1c57c7fd9fdab8b1b0cf0
Reviewed-on: https://chromium-review.googlesource.com/1139183
Commit-Queue: Yue Li <updowndota@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#576128}
parent 49ebcfa3
......@@ -19,6 +19,14 @@
namespace ash {
namespace {
// See more details in go/cros-assistant-deeplink.
constexpr char kRelaunchParamKey[] = "relaunch";
constexpr char kTrue[] = "true";
} // namespace
AssistantController::AssistantController()
: assistant_interaction_controller_(
std::make_unique<AssistantInteractionController>(this)),
......@@ -155,12 +163,24 @@ void AssistantController::OnDeepLinkReceived(
// UI and behavior for Assistant.
Shell::Get()->new_window_controller()->OpenFeedbackPage();
break;
case assistant::util::DeepLinkType::kOnboarding:
// TODO(updowndota): Pass any |params| necessary to |assistant_setup_|
// that it requires to relaunch Assistant UI on completion of opt in flow.
assistant_setup_->StartAssistantOptInFlow();
assistant_ui_controller_->HideUi(AssistantSource::kDeepLink);
case assistant::util::DeepLinkType::kOnboarding: {
auto iter = params.find(kRelaunchParamKey);
bool relaunch = iter != params.end() && iter->second == kTrue;
if (relaunch) {
assistant_setup_->StartAssistantOptInFlow(base::BindOnce(
[](AssistantUiController* ui_controller, bool completed) {
if (completed)
ui_controller->ShowUi(AssistantSource::kSetup);
},
// |assistant_setup_| and |assistant_ui_controller_| are both owned
// by this class, so a raw pointer is safe here.
assistant_ui_controller_.get()));
} else {
assistant_setup_->StartAssistantOptInFlow(base::DoNothing());
}
assistant_ui_controller_->HideUi(AssistantSource::kSetup);
break;
}
case assistant::util::DeepLinkType::kUnsupported:
case assistant::util::DeepLinkType::kExplore:
case assistant::util::DeepLinkType::kReminders:
......
......@@ -218,7 +218,8 @@ void AssistantUiController::OnUiVisibilityChanged(bool visible,
void AssistantUiController::ShowUi(AssistantSource source) {
if (!Shell::Get()->voice_interaction_controller()->setup_completed()) {
assistant_setup_->StartAssistantOptInFlow();
assistant_setup_->StartAssistantOptInFlow(
/* callback= */ base::DoNothing());
return;
}
......
......@@ -19,6 +19,7 @@ enum class AssistantSource {
kHotkey,
kHotword,
kLongPressLauncher,
kSetup,
kStylus,
};
......
......@@ -7,5 +7,7 @@ module ash.mojom;
// Interface for a class which is responsible for start Assistant OptIn flow.
interface AssistantSetup {
// Start the assistant setup flow.
StartAssistantOptInFlow();
// |completed| is true if the user has completed the entire flow and opted in
// to using assistant.
StartAssistantOptInFlow() => (bool completed);
};
......@@ -21,8 +21,10 @@ AssistantSetup::AssistantSetup(service_manager::Connector* connector)
AssistantSetup::~AssistantSetup() = default;
void AssistantSetup::StartAssistantOptInFlow() {
void AssistantSetup::StartAssistantOptInFlow(
StartAssistantOptInFlowCallback callback) {
if (chromeos::AssistantOptInDialog::IsActive())
return;
chromeos::AssistantOptInDialog::Show();
chromeos::AssistantOptInDialog::Show(std::move(callback));
}
......@@ -20,7 +20,8 @@ class AssistantSetup : public ash::mojom::AssistantSetup {
~AssistantSetup() override;
// ash::mojom::AssistantSetup:
void StartAssistantOptInFlow() override;
void StartAssistantOptInFlow(
StartAssistantOptInFlowCallback callback) override;
private:
mojo::Binding<ash::mojom::AssistantSetup> binding_;
......
......@@ -9,6 +9,7 @@
#include "base/bind.h"
#include "base/macros.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/webui/chromeos/assistant_optin/confirm_reject_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/assistant_optin/get_more_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/assistant_optin/ready_screen_handler.h"
......@@ -17,6 +18,8 @@
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/browser_resources.h"
#include "components/arc/arc_prefs.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
......@@ -106,9 +109,10 @@ void AssistantOptInUI::OnExit(AssistantOptInScreenExitCode exit_code) {
// AssistantOptInDialog
// static
void AssistantOptInDialog::Show() {
void AssistantOptInDialog::Show(
ash::mojom::AssistantSetup::StartAssistantOptInFlowCallback callback) {
DCHECK(!is_active);
AssistantOptInDialog* dialog = new AssistantOptInDialog();
AssistantOptInDialog* dialog = new AssistantOptInDialog(std::move(callback));
dialog->ShowSystemDialog(true);
}
......@@ -117,9 +121,11 @@ bool AssistantOptInDialog::IsActive() {
return is_active;
}
AssistantOptInDialog::AssistantOptInDialog()
AssistantOptInDialog::AssistantOptInDialog(
ash::mojom::AssistantSetup::StartAssistantOptInFlowCallback callback)
: SystemWebDialogDelegate(GURL(chrome::kChromeUIAssistantOptInURL),
base::string16()) {
base::string16()),
callback_(std::move(callback)) {
DCHECK(!is_active);
is_active = true;
}
......@@ -140,4 +146,13 @@ bool AssistantOptInDialog::ShouldShowDialogTitle() const {
return false;
}
void AssistantOptInDialog::OnDialogClosed(const std::string& json_retval) {
PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs();
const bool completed =
prefs->GetBoolean(arc::prefs::kVoiceInteractionEnabled) &&
prefs->GetBoolean(arc::prefs::kArcVoiceInteractionValuePropAccepted);
std::move(callback_).Run(completed);
SystemWebDialogDelegate::OnDialogClosed(json_retval);
}
} // namespace chromeos
......@@ -7,6 +7,7 @@
#include <vector>
#include "ash/public/interfaces/assistant_controller.mojom.h"
#include "base/callback.h"
#include "base/macros.h"
#include "chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_handler.h"
......@@ -43,21 +44,27 @@ class AssistantOptInUI : public ui::WebDialogUI {
class AssistantOptInDialog : public SystemWebDialogDelegate {
public:
// Shows the assistant optin dialog.
static void Show();
static void Show(ash::mojom::AssistantSetup::StartAssistantOptInFlowCallback
callback = base::DoNothing());
// Returns whether the dialog is being shown.
static bool IsActive();
protected:
AssistantOptInDialog();
explicit AssistantOptInDialog(
ash::mojom::AssistantSetup::StartAssistantOptInFlowCallback callback);
~AssistantOptInDialog() override;
// ui::WebDialogDelegate
void GetDialogSize(gfx::Size* size) const override;
std::string GetDialogArgs() const override;
bool ShouldShowDialogTitle() const override;
void OnDialogClosed(const std::string& json_retval) override;
private:
// Callback to run if the flow is completed.
ash::mojom::AssistantSetup::StartAssistantOptInFlowCallback callback_;
DISALLOW_COPY_AND_ASSIGN(AssistantOptInDialog);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment