| Index: chrome/browser/chromeos/login/wizard_controller.cc
|
| diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc
|
| index 4470346a3ee793660ea4bacd61a0ac1b0d738cda..76a3644f3a98492a1e6bbf4443ef176d43db7d0d 100644
|
| --- a/chrome/browser/chromeos/login/wizard_controller.cc
|
| +++ b/chrome/browser/chromeos/login/wizard_controller.cc
|
| @@ -30,6 +30,7 @@
|
| #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
|
| #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
|
| #include "chrome/browser/chromeos/arc/arc_util.h"
|
| +#include "chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.h"
|
| #include "chrome/browser/chromeos/customization/customization_document.h"
|
| #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.h"
|
| #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
|
| @@ -52,6 +53,7 @@
|
| #include "chrome/browser/chromeos/login/screens/terms_of_service_screen.h"
|
| #include "chrome/browser/chromeos/login/screens/update_screen.h"
|
| #include "chrome/browser/chromeos/login/screens/user_image_screen.h"
|
| +#include "chrome/browser/chromeos/login/screens/voice_interaction_value_prop_screen.h"
|
| #include "chrome/browser/chromeos/login/screens/wrong_hwid_screen.h"
|
| #include "chrome/browser/chromeos/login/session/user_session_manager.h"
|
| #include "chrome/browser/chromeos/login/startup_utils.h"
|
| @@ -85,6 +87,8 @@
|
| #include "chromeos/settings/cros_settings_provider.h"
|
| #include "chromeos/settings/timezone_settings.h"
|
| #include "chromeos/timezone/timezone_provider.h"
|
| +#include "components/arc/arc_bridge_service.h"
|
| +#include "components/arc/arc_service_manager.h"
|
| #include "components/crash/content/app/breakpad_linux.h"
|
| #include "components/pairing/bluetooth_controller_pairing_controller.h"
|
| #include "components/pairing/bluetooth_host_pairing_controller.h"
|
| @@ -424,6 +428,9 @@ BaseScreen* WizardController::CreateScreen(OobeScreen screen) {
|
| } else if (screen == OobeScreen::SCREEN_ENCRYPTION_MIGRATION) {
|
| return new EncryptionMigrationScreen(
|
| this, oobe_ui_->GetEncryptionMigrationScreenView());
|
| + } else if (screen == OobeScreen::SCREEN_VOICE_INTERACTION_VALUE_PROP) {
|
| + return new VoiceInteractionValuePropScreen(
|
| + this, oobe_ui_->GetVoiceInteractionValuePropScreenView());
|
| }
|
|
|
| return nullptr;
|
| @@ -545,27 +552,7 @@ void WizardController::ShowTermsOfServiceScreen() {
|
| }
|
|
|
| void WizardController::ShowArcTermsOfServiceScreen() {
|
| - bool show_arc_terms = false;
|
| - const Profile* profile = ProfileManager::GetActiveUserProfile();
|
| -
|
| - const base::CommandLine* command_line =
|
| - base::CommandLine::ForCurrentProcess();
|
| - if (!command_line->HasSwitch(chromeos::switches::kEnableArcOOBEOptIn)) {
|
| - VLOG(1) << "Skip ARC Terms of Service screen because ARC OOBE OptIn is "
|
| - << "disabled.";
|
| - } else if (!user_manager::UserManager::Get()->IsUserLoggedIn()) {
|
| - VLOG(1) << "Skip ARC Terms of Service screen because user is not "
|
| - << "logged in.";
|
| - } else if (!arc::IsArcAllowedForProfile(profile)) {
|
| - VLOG(1) << "Skip ARC Terms of Service screen because ARC is not allowed.";
|
| - } else if (profile->GetPrefs()->IsManagedPreference(prefs::kArcEnabled) &&
|
| - !profile->GetPrefs()->GetBoolean(prefs::kArcEnabled)) {
|
| - VLOG(1) << "Skip ARC Terms of Service screen because ARC is disabled.";
|
| - } else {
|
| - show_arc_terms = true;
|
| - }
|
| -
|
| - if (show_arc_terms) {
|
| + if (ShouldShowArcTerms()) {
|
| VLOG(1) << "Showing ARC Terms of Service screen.";
|
| UpdateStatusAreaVisibilityForScreen(
|
| OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE);
|
| @@ -640,6 +627,18 @@ void WizardController::ShowEncryptionMigrationScreen() {
|
| SetCurrentScreen(GetScreen(OobeScreen::SCREEN_ENCRYPTION_MIGRATION));
|
| }
|
|
|
| +void WizardController::ShowVoiceInteractionValuePropScreen() {
|
| + if (ShouldShowVoiceInteractionValueProp()) {
|
| + VLOG(1) << "Showing voice interaction value prop screen.";
|
| + UpdateStatusAreaVisibilityForScreen(
|
| + OobeScreen::SCREEN_VOICE_INTERACTION_VALUE_PROP);
|
| + SetCurrentScreen(
|
| + GetScreen(OobeScreen::SCREEN_VOICE_INTERACTION_VALUE_PROP));
|
| + } else {
|
| + OnOobeFlowFinished();
|
| + }
|
| +}
|
| +
|
| void WizardController::SkipToLoginForTesting(
|
| const LoginScreenContext& context) {
|
| VLOG(1) << "SkipToLoginForTesting.";
|
| @@ -763,24 +762,7 @@ void WizardController::OnUserImageSelected() {
|
| return;
|
| }
|
| }
|
| - if (!time_oobe_started_.is_null()) {
|
| - base::TimeDelta delta = base::Time::Now() - time_oobe_started_;
|
| - UMA_HISTOGRAM_CUSTOM_TIMES(
|
| - "OOBE.BootToSignInCompleted",
|
| - delta,
|
| - base::TimeDelta::FromMilliseconds(10),
|
| - base::TimeDelta::FromMinutes(30),
|
| - 100);
|
| - time_oobe_started_ = base::Time();
|
| - }
|
| -
|
| - // Launch browser and delete login host controller.
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&UserSessionManager::DoBrowserLaunch,
|
| - base::Unretained(UserSessionManager::GetInstance()),
|
| - ProfileManager::GetActiveUserProfile(), host_));
|
| - host_ = nullptr;
|
| + ShowVoiceInteractionValuePropScreen();
|
| }
|
|
|
| void WizardController::OnUserImageSkipped() {
|
| @@ -851,6 +833,20 @@ void WizardController::OnArcTermsOfServiceFinished() {
|
| ShowUserImageScreen();
|
| }
|
|
|
| +void WizardController::OnVoiceInteractionValuePropSkipped() {
|
| + OnOobeFlowFinished();
|
| +}
|
| +
|
| +void WizardController::OnVoiceInteractionValuePropAccepted() {
|
| + // Start voice interaction setup wizard in container
|
| + arc::ArcVoiceInteractionFrameworkService* service =
|
| + arc::ArcServiceManager::Get()
|
| + ->GetService<arc::ArcVoiceInteractionFrameworkService>();
|
| + if (service)
|
| + service->StartVoiceInteractionSetupWizard();
|
| + OnOobeFlowFinished();
|
| +}
|
| +
|
| void WizardController::OnControllerPairingFinished() {
|
| ShowAutoEnrollmentCheckScreen();
|
| }
|
| @@ -865,6 +861,24 @@ void WizardController::OnAutoEnrollmentCheckCompleted() {
|
| weak_factory_.GetWeakPtr()));
|
| }
|
|
|
| +void WizardController::OnOobeFlowFinished() {
|
| + if (!time_oobe_started_.is_null()) {
|
| + base::TimeDelta delta = base::Time::Now() - time_oobe_started_;
|
| + UMA_HISTOGRAM_CUSTOM_TIMES("OOBE.BootToSignInCompleted", delta,
|
| + base::TimeDelta::FromMilliseconds(10),
|
| + base::TimeDelta::FromMinutes(30), 100);
|
| + time_oobe_started_ = base::Time();
|
| + }
|
| +
|
| + // Launch browser and delete login host controller.
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&UserSessionManager::DoBrowserLaunch,
|
| + base::Unretained(UserSessionManager::GetInstance()),
|
| + ProfileManager::GetActiveUserProfile(), host_));
|
| + host_ = nullptr;
|
| +}
|
| +
|
| void WizardController::OnDeviceDisabledChecked(bool device_disabled) {
|
| prescribed_enrollment_config_ = g_browser_process->platform_part()
|
| ->browser_policy_connector_chromeos()
|
| @@ -1089,6 +1103,8 @@ void WizardController::AdvanceToScreen(OobeScreen screen) {
|
| ShowDeviceDisabledScreen();
|
| } else if (screen == OobeScreen::SCREEN_ENCRYPTION_MIGRATION) {
|
| ShowEncryptionMigrationScreen();
|
| + } else if (screen == OobeScreen::SCREEN_VOICE_INTERACTION_VALUE_PROP) {
|
| + ShowVoiceInteractionValuePropScreen();
|
| } else if (screen != OobeScreen::SCREEN_TEST_NO_WINDOW) {
|
| if (is_out_of_box_) {
|
| time_oobe_started_ = base::Time::Now();
|
| @@ -1197,6 +1213,12 @@ void WizardController::OnExit(BaseScreen& /* screen */,
|
| case ScreenExitCode::CONTROLLER_PAIRING_FINISHED:
|
| OnControllerPairingFinished();
|
| break;
|
| + case ScreenExitCode::VOICE_INTERACTION_VALUE_PROP_SKIPPED:
|
| + OnVoiceInteractionValuePropSkipped();
|
| + break;
|
| + case ScreenExitCode::VOICE_INTERACTION_VALUE_PROP_ACCEPTED:
|
| + OnVoiceInteractionValuePropAccepted();
|
| + break;
|
| default:
|
| NOTREACHED();
|
| }
|
| @@ -1494,6 +1516,48 @@ bool WizardController::IsRemoraPairingOobe() const {
|
| switches::kHostPairingOobe);
|
| }
|
|
|
| +bool WizardController::ShouldShowArcTerms() const {
|
| + const base::CommandLine* command_line =
|
| + base::CommandLine::ForCurrentProcess();
|
| + if (!command_line->HasSwitch(chromeos::switches::kEnableArcOOBEOptIn)) {
|
| + VLOG(1) << "Skip ARC Terms of Service screen because ARC OOBE OptIn is "
|
| + << "disabled.";
|
| + return false;
|
| + }
|
| + if (!user_manager::UserManager::Get()->IsUserLoggedIn()) {
|
| + VLOG(1) << "Skip ARC Terms of Service screen because user is not "
|
| + << "logged in.";
|
| + return false;
|
| + }
|
| +
|
| + const Profile* profile = ProfileManager::GetActiveUserProfile();
|
| + if (!arc::IsArcAllowedForProfile(profile)) {
|
| + VLOG(1) << "Skip ARC Terms of Service screen because ARC is not allowed.";
|
| + return false;
|
| + }
|
| + if (profile->GetPrefs()->IsManagedPreference(prefs::kArcEnabled) &&
|
| + !profile->GetPrefs()->GetBoolean(prefs::kArcEnabled)) {
|
| + VLOG(1) << "Skip ARC Terms of Service screen because ARC is disabled.";
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +bool WizardController::ShouldShowVoiceInteractionValueProp() const {
|
| + if (!arc::IsArcPlayStoreEnabledForProfile(
|
| + ProfileManager::GetActiveUserProfile())) {
|
| + VLOG(1) << "Skip Voice Interaction Value Prop screen because Arc Terms is "
|
| + << "skipped.";
|
| + return false;
|
| + }
|
| + if (!chromeos::switches::IsVoiceInteractionEnabled()) {
|
| + VLOG(1) << "Skip Voice Interaction Value Prop screen because voice "
|
| + << "interaction service is disabled.";
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| void WizardController::MaybeStartListeningForSharkConnection() {
|
| // We shouldn't be here if we are running pairing OOBE already.
|
| if (IsControllerDetected())
|
|
|