diff --git a/ash/accessibility/accessibility_controller_impl.cc b/ash/accessibility/accessibility_controller_impl.cc index 7e9704c1897655..059e2a2e9d690b 100644 --- a/ash/accessibility/accessibility_controller_impl.cc +++ b/ash/accessibility/accessibility_controller_impl.cc @@ -88,7 +88,7 @@ const FeatureData kFeatures[] = { &kSystemMenuAccessibilityAutoClickIcon}, {FeatureType::kCaretHighlight, prefs::kAccessibilityCaretHighlightEnabled, nullptr}, - {FeatureType::kCursorHighlight, prefs::kAccessibilityCursorHighlightEnabled, + {FeatureType::KCursorHighlight, prefs::kAccessibilityCursorHighlightEnabled, nullptr}, {FeatureType::kCursorColor, prefs::kAccessibilityCursorColorEnabled, nullptr}, @@ -565,14 +565,6 @@ void AccessibilityControllerImpl::CreateAccessibilityFeatures() { for (auto feature_data : kFeatures) { DCHECK(!features_[feature_data.type]); auto it = dialogs.find(feature_data.type); - - // Some features have custom logic. - if (feature_data.type == FeatureType::kSwitchAccess) { - features_[feature_data.type] = std::make_unique( - feature_data.type, feature_data.pref, feature_data.icon, this); - continue; - } - if (it == dialogs.end()) { features_[feature_data.type] = std::make_unique( feature_data.type, feature_data.pref, feature_data.icon, this); @@ -581,8 +573,6 @@ void AccessibilityControllerImpl::CreateAccessibilityFeatures() { feature_data.type, feature_data.pref, feature_data.icon, it->second, this); } - features_[feature_data.type]->SetConflictingFeature( - feature_data.conflicting_feature); } } @@ -778,7 +768,7 @@ AccessibilityControllerImpl::caret_highlight() const { AccessibilityControllerImpl::Feature& AccessibilityControllerImpl::cursor_highlight() const { - return GetFeature(FeatureType::kCursorHighlight); + return GetFeature(FeatureType::KCursorHighlight); } AccessibilityControllerImpl::Feature& @@ -854,6 +844,113 @@ AccessibilityControllerImpl::virtual_keyboard() const { return GetFeature(FeatureType::kVirtualKeyboard); } +bool AccessibilityControllerImpl::IsAutoclickSettingVisibleInTray() { + return autoclick().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForAutoclick() { + return autoclick().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsPrimarySettingsViewVisibleInTray() { + return (IsSpokenFeedbackSettingVisibleInTray() || + IsSelectToSpeakSettingVisibleInTray() || + IsDictationSettingVisibleInTray() || + IsHighContrastSettingVisibleInTray() || + IsFullScreenMagnifierSettingVisibleInTray() || + IsDockedMagnifierSettingVisibleInTray() || + IsAutoclickSettingVisibleInTray() || + IsVirtualKeyboardSettingVisibleInTray() || + IsSwitchAccessSettingVisibleInTray()); +} + +bool AccessibilityControllerImpl::IsAdditionalSettingsViewVisibleInTray() { + return (IsLargeCursorSettingVisibleInTray() || + IsMonoAudioSettingVisibleInTray() || + IsCaretHighlightSettingVisibleInTray() || + IsCursorHighlightSettingVisibleInTray() || + IsFocusHighlightSettingVisibleInTray() || + IsStickyKeysSettingVisibleInTray()); +} + +bool AccessibilityControllerImpl::IsAdditionalSettingsSeparatorVisibleInTray() { + return IsPrimarySettingsViewVisibleInTray() && + IsAdditionalSettingsViewVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsCaretHighlightSettingVisibleInTray() { + return caret_highlight().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForCaretHighlight() { + return caret_highlight().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsCursorHighlightSettingVisibleInTray() { + return cursor_highlight().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForCursorHighlight() { + return cursor_highlight().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsDictationSettingVisibleInTray() { + return dictation().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForDictation() { + return dictation().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsFocusHighlightSettingVisibleInTray() { + return focus_highlight().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForFocusHighlight() { + return focus_highlight().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsFullScreenMagnifierSettingVisibleInTray() { + return fullscreen_magnifier().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl:: + IsEnterpriseIconVisibleForFullScreenMagnifier() { + return fullscreen_magnifier().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsDockedMagnifierSettingVisibleInTray() { + return docked_magnifier().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForDockedMagnifier() { + return docked_magnifier().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsHighContrastSettingVisibleInTray() { + return high_contrast().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForHighContrast() { + return high_contrast().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsLargeCursorSettingVisibleInTray() { + return large_cursor().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForLargeCursor() { + return large_cursor().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsMonoAudioSettingVisibleInTray() { + return mono_audio().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForMonoAudio() { + return mono_audio().IsEnterpriseIconVisible(); +} + void AccessibilityControllerImpl::SetSpokenFeedbackEnabled( bool enabled, AccessibilityNotificationVisibility notify) { @@ -870,6 +967,22 @@ void AccessibilityControllerImpl::SetSpokenFeedbackEnabled( ShowAccessibilityNotification(type); } +bool AccessibilityControllerImpl::IsSpokenFeedbackSettingVisibleInTray() { + return spoken_feedback().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForSpokenFeedback() { + return spoken_feedback().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsSelectToSpeakSettingVisibleInTray() { + return select_to_speak().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForSelectToSpeak() { + return select_to_speak().IsEnterpriseIconVisible(); +} + void AccessibilityControllerImpl::RequestSelectToSpeakStateChange() { client_->RequestSelectToSpeakStateChange(); } @@ -902,14 +1015,21 @@ bool AccessibilityControllerImpl::IsSwitchAccessRunning() const { return switch_access().enabled() || switch_access_disable_dialog_showing_; } -bool AccessibilityControllerImpl::SwitchAccessFeature::IsVisibleInTray() const { +bool AccessibilityControllerImpl::IsSwitchAccessSettingVisibleInTray() { // Switch Access cannot be enabled on the sign-in page because there is no way // to configure switches while the device is locked. - if (!enabled() && Shell::Get()->session_controller()->login_status() == - ash::LoginStatus::NOT_LOGGED_IN) { + if (!switch_access().enabled() && + Shell::Get()->session_controller()->login_status() == + ash::LoginStatus::NOT_LOGGED_IN) { return false; } - return Feature::IsVisibleInTray(); + return switch_access().IsVisibleInTray(); + return IsEnterpriseIconVisibleInTrayMenu( + prefs::kAccessibilitySwitchAccessEnabled); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForSwitchAccess() { + return switch_access().IsEnterpriseIconVisible(); } void AccessibilityControllerImpl::SetAccessibilityEventRewriter( @@ -952,6 +1072,22 @@ void AccessibilityControllerImpl::StartPointScanning() { point_scan_controller_->Start(); } +bool AccessibilityControllerImpl::IsStickyKeysSettingVisibleInTray() { + return sticky_keys().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForStickyKeys() { + return sticky_keys().IsEnterpriseIconVisible(); +} + +bool AccessibilityControllerImpl::IsVirtualKeyboardSettingVisibleInTray() { + return virtual_keyboard().IsVisibleInTray(); +} + +bool AccessibilityControllerImpl::IsEnterpriseIconVisibleForVirtualKeyboard() { + return virtual_keyboard().IsEnterpriseIconVisible(); +} + void AccessibilityControllerImpl::ShowFloatingMenuIfEnabled() { if (floating_menu().enabled() && !floating_menu_controller_) { floating_menu_controller_ = @@ -1699,7 +1835,7 @@ void AccessibilityControllerImpl::UpdateFeatureFromPref(FeatureType feature) { case FeatureType::kCaretHighlight: UpdateAccessibilityHighlightingFromPrefs(); break; - case FeatureType::kCursorHighlight: + case FeatureType::KCursorHighlight: UpdateAccessibilityHighlightingFromPrefs(); break; case FeatureType::kDictation: diff --git a/ash/accessibility/accessibility_controller_impl.h b/ash/accessibility/accessibility_controller_impl.h index 71b4fb25bc755c..7023bf614e2da8 100644 --- a/ash/accessibility/accessibility_controller_impl.h +++ b/ash/accessibility/accessibility_controller_impl.h @@ -60,7 +60,7 @@ class ASH_EXPORT AccessibilityControllerImpl : public AccessibilityController, enum FeatureType { kAutoclick = 0, kCaretHighlight, - kCursorHighlight, + KCursorHighlight, kDictation, kFloatingMenu, kFocusHighlight, @@ -98,7 +98,7 @@ class ASH_EXPORT AccessibilityControllerImpl : public AccessibilityController, // - there is an other feature, which conflicts with the current one. virtual void SetEnabled(bool enabled); bool enabled() const { return enabled_; } - virtual bool IsVisibleInTray() const; + bool IsVisibleInTray() const; bool IsEnterpriseIconVisible() const; const std::string& pref_name() const { return pref_name_; } const gfx::VectorIcon& icon() const; @@ -154,13 +154,6 @@ class ASH_EXPORT AccessibilityControllerImpl : public AccessibilityController, Dialog dialog_; }; - // Switch access has custom tray visibility logic. - class SwitchAccessFeature : public Feature { - public: - using Feature::Feature; - bool IsVisibleInTray() const override; - }; - AccessibilityControllerImpl(); ~AccessibilityControllerImpl() override; @@ -196,6 +189,9 @@ class ASH_EXPORT AccessibilityControllerImpl : public AccessibilityController, void SetDisplayRotationAcceleratorDialogBeenAccepted(); bool HasDisplayRotationAcceleratorDialogBeenAccepted() const; + bool IsAutoclickSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForAutoclick(); + void SetAutoclickEventType(AutoclickEventType event_type); AutoclickEventType GetAutoclickEventType(); void SetAutoclickMenuPosition(FloatingMenuPosition position); @@ -211,18 +207,58 @@ class ASH_EXPORT AccessibilityControllerImpl : public AccessibilityController, // virtual keyboard position). void UpdateAutoclickMenuBoundsIfNeeded(); + bool IsCaretHighlightSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForCaretHighlight(); + + bool IsCursorHighlightSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForCursorHighlight(); + + bool IsDictationSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForDictation(); + + bool IsFocusHighlightSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForFocusHighlight(); + + bool IsFullScreenMagnifierSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForFullScreenMagnifier(); + + bool IsDockedMagnifierSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForDockedMagnifier(); + + bool IsHighContrastSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForHighContrast(); + + bool IsLargeCursorSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForLargeCursor(); + + bool IsMonoAudioSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForMonoAudio(); + void SetSpokenFeedbackEnabled(bool enabled, AccessibilityNotificationVisibility notify); + bool IsSpokenFeedbackSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForSpokenFeedback(); + + bool IsSelectToSpeakSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForSelectToSpeak(); void RequestSelectToSpeakStateChange(); SelectToSpeakState GetSelectToSpeakState() const; + bool IsStickyKeysSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForStickyKeys(); + // Switch access may be disabled in prefs but still running when the disable // dialog is displaying. bool IsSwitchAccessRunning() const; + bool IsSwitchAccessSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForSwitchAccess(); void SetAccessibilityEventRewriter( AccessibilityEventRewriter* accessibility_event_rewriter); + bool IsVirtualKeyboardSettingVisibleInTray(); + bool IsEnterpriseIconVisibleForVirtualKeyboard(); + void SetTabletModeShelfNavigationButtonsEnabled(bool enabled); bool tablet_mode_shelf_navigation_buttons_enabled() const { return tablet_mode_shelf_navigation_buttons_enabled_; @@ -280,6 +316,20 @@ class ASH_EXPORT AccessibilityControllerImpl : public AccessibilityController, // by a policy and false otherwise. bool IsEnterpriseIconVisibleInTrayMenu(const std::string& path); + // Returns true if at least one of the primary settings of the accessibility + // features is going to be visible in the accessibility tray menu. + bool IsPrimarySettingsViewVisibleInTray(); + + // Returns true if at least one of the additional settings of the + // accessibility features is going to be visible in the accessibility tray + // menu. + bool IsAdditionalSettingsViewVisibleInTray(); + + // Returns true if there exist one of the additional accessibility features + // and one of the primary accessibility features which are going to visible on + // accessibility tray menu. + bool IsAdditionalSettingsSeparatorVisibleInTray(); + // Starts point scanning, to select a point onscreen without using a mouse // (as used by Switch Access). void StartPointScanning(); diff --git a/ash/accessibility/accessibility_controller_unittest.cc b/ash/accessibility/accessibility_controller_unittest.cc index 3349b5b99dfaa2..7b6264c0206a2a 100644 --- a/ash/accessibility/accessibility_controller_unittest.cc +++ b/ash/accessibility/accessibility_controller_unittest.cc @@ -205,13 +205,13 @@ TEST_F(AccessibilityControllerTest, LargeCursorTrayMenuVisibility) { EXPECT_TRUE(controller->large_cursor().enabled()); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityLargeCursorEnabled)); - EXPECT_TRUE(controller->large_cursor().IsVisibleInTray()); + EXPECT_TRUE(controller->IsLargeCursorSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->large_cursor().SetEnabled(false); EXPECT_FALSE(controller->large_cursor().enabled()); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityLargeCursorEnabled)); - EXPECT_TRUE(controller->large_cursor().IsVisibleInTray()); + EXPECT_TRUE(controller->IsLargeCursorSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -221,7 +221,7 @@ TEST_F(AccessibilityControllerTest, LargeCursorTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityLargeCursorEnabled)); EXPECT_TRUE(controller->large_cursor().enabled()); - EXPECT_TRUE(controller->large_cursor().IsVisibleInTray()); + EXPECT_TRUE(controller->IsLargeCursorSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -230,7 +230,7 @@ TEST_F(AccessibilityControllerTest, LargeCursorTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityLargeCursorEnabled)); EXPECT_FALSE(controller->large_cursor().enabled()); - EXPECT_FALSE(controller->large_cursor().IsVisibleInTray()); + EXPECT_FALSE(controller->IsLargeCursorSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, HighContrastTrayMenuVisibility) { @@ -245,13 +245,13 @@ TEST_F(AccessibilityControllerTest, HighContrastTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityHighContrastEnabled)); EXPECT_TRUE(controller->high_contrast().enabled()); - EXPECT_TRUE(controller->high_contrast().IsVisibleInTray()); + EXPECT_TRUE(controller->IsHighContrastSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->high_contrast().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityHighContrastEnabled)); EXPECT_FALSE(controller->high_contrast().enabled()); - EXPECT_TRUE(controller->high_contrast().IsVisibleInTray()); + EXPECT_TRUE(controller->IsHighContrastSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -260,7 +260,7 @@ TEST_F(AccessibilityControllerTest, HighContrastTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityHighContrastEnabled)); - EXPECT_TRUE(controller->high_contrast().IsVisibleInTray()); + EXPECT_TRUE(controller->IsHighContrastSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -269,7 +269,7 @@ TEST_F(AccessibilityControllerTest, HighContrastTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityHighContrastEnabled)); EXPECT_FALSE(controller->high_contrast().enabled()); - EXPECT_FALSE(controller->high_contrast().IsVisibleInTray()); + EXPECT_FALSE(controller->IsHighContrastSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, MonoAudioTrayMenuVisibility) { @@ -284,13 +284,13 @@ TEST_F(AccessibilityControllerTest, MonoAudioTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityMonoAudioEnabled)); EXPECT_TRUE(controller->mono_audio().enabled()); - EXPECT_TRUE(controller->mono_audio().IsVisibleInTray()); + EXPECT_TRUE(controller->IsMonoAudioSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->mono_audio().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityMonoAudioEnabled)); EXPECT_FALSE(controller->mono_audio().enabled()); - EXPECT_TRUE(controller->mono_audio().IsVisibleInTray()); + EXPECT_TRUE(controller->IsMonoAudioSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -299,7 +299,7 @@ TEST_F(AccessibilityControllerTest, MonoAudioTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityMonoAudioEnabled)); - EXPECT_TRUE(controller->mono_audio().IsVisibleInTray()); + EXPECT_TRUE(controller->IsMonoAudioSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -308,7 +308,7 @@ TEST_F(AccessibilityControllerTest, MonoAudioTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityMonoAudioEnabled)); EXPECT_FALSE(controller->mono_audio().enabled()); - EXPECT_FALSE(controller->mono_audio().IsVisibleInTray()); + EXPECT_FALSE(controller->IsMonoAudioSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, DictationTrayMenuVisibility) { @@ -326,13 +326,13 @@ TEST_F(AccessibilityControllerTest, DictationTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityDictationEnabled)); EXPECT_TRUE(controller->dictation().enabled()); - EXPECT_TRUE(controller->dictation().IsVisibleInTray()); + EXPECT_TRUE(controller->IsDictationSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->dictation().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityDictationEnabled)); EXPECT_FALSE(controller->dictation().enabled()); - EXPECT_TRUE(controller->dictation().IsVisibleInTray()); + EXPECT_TRUE(controller->IsDictationSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -341,7 +341,7 @@ TEST_F(AccessibilityControllerTest, DictationTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityDictationEnabled)); - EXPECT_TRUE(controller->dictation().IsVisibleInTray()); + EXPECT_TRUE(controller->IsDictationSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -350,7 +350,7 @@ TEST_F(AccessibilityControllerTest, DictationTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityDictationEnabled)); EXPECT_FALSE(controller->dictation().enabled()); - EXPECT_FALSE(controller->dictation().IsVisibleInTray()); + EXPECT_FALSE(controller->IsDictationSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, CursorHighlightTrayMenuVisibility) { @@ -365,13 +365,13 @@ TEST_F(AccessibilityControllerTest, CursorHighlightTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityCursorHighlightEnabled)); EXPECT_TRUE(controller->cursor_highlight().enabled()); - EXPECT_TRUE(controller->cursor_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsCursorHighlightSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->cursor_highlight().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityCursorHighlightEnabled)); EXPECT_FALSE(controller->cursor_highlight().enabled()); - EXPECT_TRUE(controller->cursor_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsCursorHighlightSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -380,7 +380,7 @@ TEST_F(AccessibilityControllerTest, CursorHighlightTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityCursorHighlightEnabled)); - EXPECT_TRUE(controller->cursor_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsCursorHighlightSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -389,7 +389,7 @@ TEST_F(AccessibilityControllerTest, CursorHighlightTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityCursorHighlightEnabled)); EXPECT_FALSE(controller->cursor_highlight().enabled()); - EXPECT_FALSE(controller->cursor_highlight().IsVisibleInTray()); + EXPECT_FALSE(controller->IsCursorHighlightSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, FullScreenMagnifierTrayMenuVisibility) { @@ -404,13 +404,13 @@ TEST_F(AccessibilityControllerTest, FullScreenMagnifierTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityScreenMagnifierEnabled)); EXPECT_TRUE(controller->fullscreen_magnifier().enabled()); - EXPECT_TRUE(controller->fullscreen_magnifier().IsVisibleInTray()); + EXPECT_TRUE(controller->IsFullScreenMagnifierSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->fullscreen_magnifier().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityScreenMagnifierEnabled)); EXPECT_FALSE(controller->fullscreen_magnifier().enabled()); - EXPECT_TRUE(controller->fullscreen_magnifier().IsVisibleInTray()); + EXPECT_TRUE(controller->IsFullScreenMagnifierSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -419,7 +419,7 @@ TEST_F(AccessibilityControllerTest, FullScreenMagnifierTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityScreenMagnifierEnabled)); - EXPECT_TRUE(controller->fullscreen_magnifier().IsVisibleInTray()); + EXPECT_TRUE(controller->IsFullScreenMagnifierSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -428,7 +428,7 @@ TEST_F(AccessibilityControllerTest, FullScreenMagnifierTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityScreenMagnifierEnabled)); EXPECT_FALSE(controller->fullscreen_magnifier().enabled()); - EXPECT_FALSE(controller->fullscreen_magnifier().IsVisibleInTray()); + EXPECT_FALSE(controller->IsFullScreenMagnifierSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, DockedMagnifierTrayMenuVisibility) { @@ -442,26 +442,26 @@ TEST_F(AccessibilityControllerTest, DockedMagnifierTrayMenuVisibility) { controller->docked_magnifier().SetEnabled(true); EXPECT_FALSE(prefs->IsManagedPreference(prefs::kDockedMagnifierEnabled)); EXPECT_TRUE(controller->docked_magnifier().enabled()); - EXPECT_TRUE(controller->docked_magnifier().IsVisibleInTray()); + EXPECT_TRUE(controller->IsDockedMagnifierSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->docked_magnifier().SetEnabled(false); EXPECT_FALSE(prefs->IsManagedPreference(prefs::kDockedMagnifierEnabled)); EXPECT_FALSE(controller->docked_magnifier().enabled()); - EXPECT_TRUE(controller->docked_magnifier().IsVisibleInTray()); + EXPECT_TRUE(controller->IsDockedMagnifierSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. static_cast(prefs)->SetManagedPref( prefs::kDockedMagnifierEnabled, std::make_unique(true)); EXPECT_TRUE(prefs->IsManagedPreference(prefs::kDockedMagnifierEnabled)); - EXPECT_TRUE(controller->docked_magnifier().IsVisibleInTray()); + EXPECT_TRUE(controller->IsDockedMagnifierSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( prefs::kDockedMagnifierEnabled, std::make_unique(false)); EXPECT_TRUE(prefs->IsManagedPreference(prefs::kDockedMagnifierEnabled)); EXPECT_FALSE(controller->docked_magnifier().enabled()); - EXPECT_FALSE(controller->docked_magnifier().IsVisibleInTray()); + EXPECT_FALSE(controller->IsDockedMagnifierSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, CaretHighlightTrayMenuVisibility) { // Check that when the pref isn't being controlled by any policy will be @@ -475,13 +475,13 @@ TEST_F(AccessibilityControllerTest, CaretHighlightTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityCaretHighlightEnabled)); EXPECT_TRUE(controller->caret_highlight().enabled()); - EXPECT_TRUE(controller->caret_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsCaretHighlightSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->caret_highlight().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityCaretHighlightEnabled)); EXPECT_FALSE(controller->caret_highlight().enabled()); - EXPECT_TRUE(controller->caret_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsCaretHighlightSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -490,7 +490,7 @@ TEST_F(AccessibilityControllerTest, CaretHighlightTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityCaretHighlightEnabled)); - EXPECT_TRUE(controller->caret_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsCaretHighlightSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -499,7 +499,7 @@ TEST_F(AccessibilityControllerTest, CaretHighlightTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityCaretHighlightEnabled)); EXPECT_FALSE(controller->caret_highlight().enabled()); - EXPECT_FALSE(controller->caret_highlight().IsVisibleInTray()); + EXPECT_FALSE(controller->IsCaretHighlightSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, SelectToSpeakTrayMenuVisibility) { @@ -514,13 +514,13 @@ TEST_F(AccessibilityControllerTest, SelectToSpeakTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilitySelectToSpeakEnabled)); EXPECT_TRUE(controller->select_to_speak().enabled()); - EXPECT_TRUE(controller->select_to_speak().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSelectToSpeakSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->select_to_speak().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilitySelectToSpeakEnabled)); EXPECT_FALSE(controller->select_to_speak().enabled()); - EXPECT_TRUE(controller->select_to_speak().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSelectToSpeakSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -529,7 +529,7 @@ TEST_F(AccessibilityControllerTest, SelectToSpeakTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilitySelectToSpeakEnabled)); - EXPECT_TRUE(controller->select_to_speak().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSelectToSpeakSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -538,7 +538,7 @@ TEST_F(AccessibilityControllerTest, SelectToSpeakTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilitySelectToSpeakEnabled)); EXPECT_FALSE(controller->select_to_speak().enabled()); - EXPECT_FALSE(controller->select_to_speak().IsVisibleInTray()); + EXPECT_FALSE(controller->IsSelectToSpeakSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, AutoClickTrayMenuVisibility) { @@ -553,13 +553,13 @@ TEST_F(AccessibilityControllerTest, AutoClickTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityAutoclickEnabled)); EXPECT_TRUE(controller->autoclick().enabled()); - EXPECT_TRUE(controller->autoclick().IsVisibleInTray()); + EXPECT_TRUE(controller->IsAutoclickSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->autoclick().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityAutoclickEnabled)); EXPECT_FALSE(controller->autoclick().enabled()); - EXPECT_TRUE(controller->autoclick().IsVisibleInTray()); + EXPECT_TRUE(controller->IsAutoclickSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -568,7 +568,7 @@ TEST_F(AccessibilityControllerTest, AutoClickTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityAutoclickEnabled)); - EXPECT_TRUE(controller->autoclick().IsVisibleInTray()); + EXPECT_TRUE(controller->IsAutoclickSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -577,7 +577,7 @@ TEST_F(AccessibilityControllerTest, AutoClickTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityAutoclickEnabled)); EXPECT_FALSE(controller->autoclick().enabled()); - EXPECT_FALSE(controller->autoclick().IsVisibleInTray()); + EXPECT_FALSE(controller->IsAutoclickSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, SpokenFeedbackTrayMenuVisibility) { @@ -592,13 +592,13 @@ TEST_F(AccessibilityControllerTest, SpokenFeedbackTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilitySpokenFeedbackEnabled)); EXPECT_TRUE(controller->spoken_feedback().enabled()); - EXPECT_TRUE(controller->spoken_feedback().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSpokenFeedbackSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->SetSpokenFeedbackEnabled(false, A11Y_NOTIFICATION_NONE); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilitySpokenFeedbackEnabled)); EXPECT_FALSE(controller->spoken_feedback().enabled()); - EXPECT_TRUE(controller->spoken_feedback().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSpokenFeedbackSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -607,7 +607,7 @@ TEST_F(AccessibilityControllerTest, SpokenFeedbackTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilitySpokenFeedbackEnabled)); - EXPECT_TRUE(controller->spoken_feedback().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSpokenFeedbackSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -616,7 +616,7 @@ TEST_F(AccessibilityControllerTest, SpokenFeedbackTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilitySpokenFeedbackEnabled)); EXPECT_FALSE(controller->spoken_feedback().enabled()); - EXPECT_FALSE(controller->spoken_feedback().IsVisibleInTray()); + EXPECT_FALSE(controller->IsSpokenFeedbackSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, VirtualKeyboardTrayMenuVisibility) { @@ -631,13 +631,13 @@ TEST_F(AccessibilityControllerTest, VirtualKeyboardTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityVirtualKeyboardEnabled)); EXPECT_TRUE(controller->virtual_keyboard().enabled()); - EXPECT_TRUE(controller->virtual_keyboard().IsVisibleInTray()); + EXPECT_TRUE(controller->IsVirtualKeyboardSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->virtual_keyboard().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityVirtualKeyboardEnabled)); EXPECT_FALSE(controller->virtual_keyboard().enabled()); - EXPECT_TRUE(controller->virtual_keyboard().IsVisibleInTray()); + EXPECT_TRUE(controller->IsVirtualKeyboardSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -646,7 +646,7 @@ TEST_F(AccessibilityControllerTest, VirtualKeyboardTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityVirtualKeyboardEnabled)); - EXPECT_TRUE(controller->virtual_keyboard().IsVisibleInTray()); + EXPECT_TRUE(controller->IsVirtualKeyboardSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -655,7 +655,7 @@ TEST_F(AccessibilityControllerTest, VirtualKeyboardTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityVirtualKeyboardEnabled)); EXPECT_FALSE(controller->virtual_keyboard().enabled()); - EXPECT_FALSE(controller->virtual_keyboard().IsVisibleInTray()); + EXPECT_FALSE(controller->IsVirtualKeyboardSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, SwitchAccessTrayMenuVisibility) { @@ -670,13 +670,13 @@ TEST_F(AccessibilityControllerTest, SwitchAccessTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilitySwitchAccessEnabled)); EXPECT_TRUE(controller->switch_access().enabled()); - EXPECT_TRUE(controller->switch_access().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSwitchAccessSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->switch_access().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilitySwitchAccessEnabled)); EXPECT_FALSE(controller->switch_access().enabled()); - EXPECT_TRUE(controller->switch_access().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSwitchAccessSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -685,7 +685,7 @@ TEST_F(AccessibilityControllerTest, SwitchAccessTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilitySwitchAccessEnabled)); - EXPECT_TRUE(controller->switch_access().IsVisibleInTray()); + EXPECT_TRUE(controller->IsSwitchAccessSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -694,7 +694,7 @@ TEST_F(AccessibilityControllerTest, SwitchAccessTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilitySwitchAccessEnabled)); EXPECT_FALSE(controller->switch_access().enabled()); - EXPECT_FALSE(controller->switch_access().IsVisibleInTray()); + EXPECT_FALSE(controller->IsSwitchAccessSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, FocusHighlightTrayMenuVisibility) { @@ -709,13 +709,13 @@ TEST_F(AccessibilityControllerTest, FocusHighlightTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityFocusHighlightEnabled)); EXPECT_TRUE(controller->focus_highlight().enabled()); - EXPECT_TRUE(controller->focus_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsFocusHighlightSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->focus_highlight().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityFocusHighlightEnabled)); EXPECT_FALSE(controller->focus_highlight().enabled()); - EXPECT_TRUE(controller->focus_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsFocusHighlightSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -724,7 +724,7 @@ TEST_F(AccessibilityControllerTest, FocusHighlightTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityFocusHighlightEnabled)); - EXPECT_TRUE(controller->focus_highlight().IsVisibleInTray()); + EXPECT_TRUE(controller->IsFocusHighlightSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -733,7 +733,7 @@ TEST_F(AccessibilityControllerTest, FocusHighlightTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityFocusHighlightEnabled)); EXPECT_FALSE(controller->focus_highlight().enabled()); - EXPECT_FALSE(controller->focus_highlight().IsVisibleInTray()); + EXPECT_FALSE(controller->IsFocusHighlightSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, StickyKeysTrayMenuVisibility) { @@ -748,13 +748,13 @@ TEST_F(AccessibilityControllerTest, StickyKeysTrayMenuVisibility) { EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityStickyKeysEnabled)); EXPECT_TRUE(controller->sticky_keys().enabled()); - EXPECT_TRUE(controller->sticky_keys().IsVisibleInTray()); + EXPECT_TRUE(controller->IsStickyKeysSettingVisibleInTray()); // Check when the value is false and not being controlled by any policy. controller->sticky_keys().SetEnabled(false); EXPECT_FALSE( prefs->IsManagedPreference(prefs::kAccessibilityStickyKeysEnabled)); EXPECT_FALSE(controller->sticky_keys().enabled()); - EXPECT_TRUE(controller->sticky_keys().IsVisibleInTray()); + EXPECT_TRUE(controller->IsStickyKeysSettingVisibleInTray()); // Check that when the pref is managed and being forced on then it will be // visible. @@ -763,7 +763,7 @@ TEST_F(AccessibilityControllerTest, StickyKeysTrayMenuVisibility) { std::make_unique(true)); EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityStickyKeysEnabled)); - EXPECT_TRUE(controller->sticky_keys().IsVisibleInTray()); + EXPECT_TRUE(controller->IsStickyKeysSettingVisibleInTray()); // Check that when the pref is managed and only being forced off then it will // be invisible. static_cast(prefs)->SetManagedPref( @@ -772,7 +772,7 @@ TEST_F(AccessibilityControllerTest, StickyKeysTrayMenuVisibility) { EXPECT_TRUE( prefs->IsManagedPreference(prefs::kAccessibilityStickyKeysEnabled)); EXPECT_FALSE(controller->sticky_keys().enabled()); - EXPECT_FALSE(controller->sticky_keys().IsVisibleInTray()); + EXPECT_FALSE(controller->IsStickyKeysSettingVisibleInTray()); } TEST_F(AccessibilityControllerTest, DisableLargeCursorResetsSize) { diff --git a/ash/system/accessibility/tray_accessibility.cc b/ash/system/accessibility/tray_accessibility.cc index ba0aed6823d1fb..5c7d1c42d3c98e 100644 --- a/ash/system/accessibility/tray_accessibility.cc +++ b/ash/system/accessibility/tray_accessibility.cc @@ -7,6 +7,7 @@ #include #include +#include "ash/accessibility/accessibility_controller_impl.h" #include "ash/accessibility/accessibility_delegate.h" #include "ash/magnifier/docked_magnifier_controller_impl.h" #include "ash/public/cpp/ash_features.h" @@ -31,7 +32,6 @@ namespace ash { namespace { using ml::UserSettingsEvent; -using FeatureType = AccessibilityControllerImpl::FeatureType; enum AccessibilityState { A11Y_NONE = 0, @@ -52,17 +52,6 @@ enum AccessibilityState { A11Y_SWITCH_ACCESS = 1 << 14, }; -const FeatureType kPrimaryA11yOptions[] = { - FeatureType::kSpokenFeedback, FeatureType::kSelectToSpeak, - FeatureType::kDictation, FeatureType::kHighContrast, - FeatureType::kFullscreenMagnifier, FeatureType::kDockedMagnifier, - FeatureType::kAutoclick, FeatureType::kVirtualKeyboard, - FeatureType::kSwitchAccess}; -const FeatureType kSecondaryA11yOptions[] = { - FeatureType::kLargeCursor, FeatureType::kMonoAudio, - FeatureType::kCaretHighlight, FeatureType::kCursorHighlight, - FeatureType::kFocusHighlight, FeatureType::kStickyKeys}; - void LogUserAccessibilityEvent(UserSettingsEvent::Event::AccessibilityId id, bool new_state) { auto* logger = ml::UserSettingsEventLogger::Get(); @@ -71,103 +60,6 @@ void LogUserAccessibilityEvent(UserSettingsEvent::Event::AccessibilityId id, } } -const struct FeatureData { - FeatureType type; - int description; - UserSettingsEvent::Event::AccessibilityId event_id; - const char* action_enabled; - const char* action_disabled; -} kFeaturesData[] = { - {FeatureType::kAutoclick, IDS_ASH_STATUS_TRAY_ACCESSIBILITY_AUTOCLICK, - UserSettingsEvent::Event::AUTO_CLICK, "StatusArea_AutoClickEnabled", - "StatusArea_AutoClickDisabled"}, - {FeatureType::kCaretHighlight, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_CARET_HIGHLIGHT, - UserSettingsEvent::Event::CARET_HIGHLIGHT, - "StatusArea_CaretHighlightEnabled", "StatusArea_CaretHighlightDisabled"}, - {FeatureType::kCursorHighlight, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGHLIGHT_MOUSE_CURSOR, - UserSettingsEvent::Event::HIGHLIGHT_MOUSE_CURSOR, - "StatusArea_CursorHighlightEnabled", "StatusArea_CursorHighlightDisabled"}, - {FeatureType::kDictation, IDS_ASH_STATUS_TRAY_ACCESSIBILITY_DICTATION, - UserSettingsEvent::Event::DICTATION, "StatusArea_DictationEnabled", - "StatusArea_DictationDisabled"}, - {FeatureType::kFocusHighlight, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGHLIGHT_KEYBOARD_FOCUS, - UserSettingsEvent::Event::HIGHLIGHT_KEYBOARD_FOCUS, - "StatusArea_FocusHighlightEnabled", "StatusArea_FocusHighlightDisabled"}, - {FeatureType::kFullscreenMagnifier, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SCREEN_MAGNIFIER, - UserSettingsEvent::Event::MAGNIFIER, "StatusArea_ScreenMagnifierEnabled", - "StatusArea_ScreenMagnifierDisabled"}, - {FeatureType::kDockedMagnifier, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_DOCKED_MAGNIFIER, - UserSettingsEvent::Event::DOCKED_MAGNIFIER, - "StatusArea_DockedMagnifierEnabled", "StatusArea_DockedMagnifierDisabled"}, - {FeatureType::kHighContrast, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGH_CONTRAST_MODE, - UserSettingsEvent::Event::HIGH_CONTRAST, "StatusArea_HighContrastEnabled", - "StatusArea_HighContrastDisabled"}, - {FeatureType::kLargeCursor, IDS_ASH_STATUS_TRAY_ACCESSIBILITY_LARGE_CURSOR, - UserSettingsEvent::Event::LARGE_CURSOR, "StatusArea_LargeCursorEnabled", - "StatusArea_LargeCursorDisabled"}, - {FeatureType::kMonoAudio, IDS_ASH_STATUS_TRAY_ACCESSIBILITY_MONO_AUDIO, - UserSettingsEvent::Event::MONO_AUDIO, "StatusArea_MonoAudioEnabled", - "StatusArea_MonoAudioDisabled"}, - {FeatureType::kSpokenFeedback, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SPOKEN_FEEDBACK, - UserSettingsEvent::Event::SPOKEN_FEEDBACK, - "StatusArea_SpokenFeedbackEnabled", "StatusArea_SpokenFeedbackDisabled"}, - {FeatureType::kSelectToSpeak, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SELECT_TO_SPEAK, - UserSettingsEvent::Event::SELECT_TO_SPEAK, - "StatusArea_SelectToSpeakEnabled", "StatusArea_SelectToSpeakDisabled"}, - {FeatureType::kStickyKeys, IDS_ASH_STATUS_TRAY_ACCESSIBILITY_STICKY_KEYS, - UserSettingsEvent::Event::STICKY_KEYS, "StatusArea_StickyKeysEnabled", - "StatusArea_StickyKeysDisabled"}, - {FeatureType::kSwitchAccess, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SWITCH_ACCESS, - UserSettingsEvent::Event::SWITCH_ACCESS, "StatusArea_SwitchAccessEnabled", - "StatusArea_SwitchAccessDisabled"}, - {FeatureType::kVirtualKeyboard, - IDS_ASH_STATUS_TRAY_ACCESSIBILITY_VIRTUAL_KEYBOARD, - UserSettingsEvent::Event::VIRTUAL_KEYBOARD, - "StatusArea_VirtualKeyboardEnabled", - "StatusArea_VirtualKeyboardDisabled"}}; - -const FeatureData& GetDataForFeature(FeatureType type) { - for (const auto& data : kFeaturesData) { - if (data.type == type) - return data; - } - NOTREACHED(); - static FeatureData unknown; - return unknown; -} - -bool IsPrimarySettingsViewVisibleInTray() { - AccessibilityControllerImpl* controller = - Shell::Get()->accessibility_controller(); - for (FeatureType feature : kPrimaryA11yOptions) - if (controller->GetFeature(feature).IsVisibleInTray()) - return true; - return false; -} - -bool IsAdditionalSettingsViewVisibleInTray() { - AccessibilityControllerImpl* controller = - Shell::Get()->accessibility_controller(); - for (FeatureType feature : kSecondaryA11yOptions) - if (controller->GetFeature(feature).IsVisibleInTray()) - return true; - return false; -} - -bool IsAdditionalSettingsSeparatorVisibleInTray() { - return IsPrimarySettingsViewVisibleInTray() && - IsAdditionalSettingsViewVisibleInTray(); -} - } // namespace namespace tray { @@ -187,17 +79,107 @@ AccessibilityDetailedView::AccessibilityDetailedView( } void AccessibilityDetailedView::OnAccessibilityStatusChanged() { + AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); AccessibilityControllerImpl* controller = Shell::Get()->accessibility_controller(); - for (int feature_id = 0; feature_id < FeatureType::kFeatureCount; - feature_id++) { - AccessibilityControllerImpl::Feature& feature = - controller->GetFeature(static_cast(feature_id)); - features_enabled_[feature_id] = feature.enabled(); - if (feature.IsVisibleInTray() && feature_views_[feature_id]) { - TrayPopupUtils::UpdateCheckMarkVisibility(feature_views_[feature_id], - feature.enabled()); - } + + if (spoken_feedback_view_ && + controller->IsSpokenFeedbackSettingVisibleInTray()) { + spoken_feedback_enabled_ = controller->spoken_feedback().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(spoken_feedback_view_, + spoken_feedback_enabled_); + } + + if (select_to_speak_view_ && + controller->IsSelectToSpeakSettingVisibleInTray()) { + select_to_speak_enabled_ = controller->select_to_speak().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(select_to_speak_view_, + select_to_speak_enabled_); + } + + if (dictation_view_ && controller->IsDictationSettingVisibleInTray()) { + dictation_enabled_ = controller->dictation().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(dictation_view_, + dictation_enabled_); + } + + if (high_contrast_view_ && controller->IsHighContrastSettingVisibleInTray()) { + high_contrast_enabled_ = controller->high_contrast().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(high_contrast_view_, + high_contrast_enabled_); + } + + if (screen_magnifier_view_ && + controller->IsFullScreenMagnifierSettingVisibleInTray()) { + screen_magnifier_enabled_ = delegate->IsMagnifierEnabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(screen_magnifier_view_, + screen_magnifier_enabled_); + } + + if (docked_magnifier_view_ && + controller->IsDockedMagnifierSettingVisibleInTray()) { + docked_magnifier_enabled_ = + Shell::Get()->docked_magnifier_controller()->GetEnabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(docked_magnifier_view_, + docked_magnifier_enabled_); + } + + if (autoclick_view_ && controller->IsAutoclickSettingVisibleInTray()) { + autoclick_enabled_ = controller->autoclick().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(autoclick_view_, + autoclick_enabled_); + } + + if (virtual_keyboard_view_ && + controller->IsVirtualKeyboardSettingVisibleInTray()) { + virtual_keyboard_enabled_ = controller->virtual_keyboard().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(virtual_keyboard_view_, + virtual_keyboard_enabled_); + } + + if (switch_access_view_ && controller->IsSwitchAccessSettingVisibleInTray()) { + switch_access_enabled_ = controller->switch_access().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(switch_access_view_, + switch_access_enabled_); + } + + if (large_cursor_view_ && controller->IsLargeCursorSettingVisibleInTray()) { + large_cursor_enabled_ = controller->large_cursor().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(large_cursor_view_, + large_cursor_enabled_); + } + + if (mono_audio_view_ && controller->IsMonoAudioSettingVisibleInTray()) { + mono_audio_enabled_ = controller->mono_audio().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(mono_audio_view_, + mono_audio_enabled_); + } + + if (caret_highlight_view_ && + controller->IsCaretHighlightSettingVisibleInTray()) { + caret_highlight_enabled_ = controller->caret_highlight().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(caret_highlight_view_, + caret_highlight_enabled_); + } + + if (highlight_mouse_cursor_view_ && + controller->IsCursorHighlightSettingVisibleInTray()) { + highlight_mouse_cursor_enabled_ = controller->cursor_highlight().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(highlight_mouse_cursor_view_, + highlight_mouse_cursor_enabled_); + } + + if (highlight_keyboard_focus_view_ && + controller->IsFocusHighlightSettingVisibleInTray()) { + highlight_keyboard_focus_enabled_ = controller->focus_highlight().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility( + highlight_keyboard_focus_view_, highlight_keyboard_focus_enabled_); + } + + if (sticky_keys_view_ && controller->IsStickyKeysSettingVisibleInTray()) { + sticky_keys_enabled_ = controller->sticky_keys().enabled(); + TrayPopupUtils::UpdateCheckMarkVisibility(sticky_keys_view_, + sticky_keys_enabled_); } } @@ -207,84 +189,309 @@ const char* AccessibilityDetailedView::GetClassName() const { void AccessibilityDetailedView::AppendAccessibilityList() { CreateScrollableList(); - // We need to reset all existing feature views. - for (int feature_id = 0; feature_id < FeatureType::kFeatureCount; - feature_id++) { - feature_views_[feature_id] = nullptr; - } + AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); AccessibilityControllerImpl* controller = Shell::Get()->accessibility_controller(); - for (FeatureType feature_type : kPrimaryA11yOptions) { - AccessibilityControllerImpl::Feature& feature = - controller->GetFeature(feature_type); - features_enabled_[feature_type] = feature.enabled(); - if (feature.IsVisibleInTray()) { - feature_views_[feature_type] = AddScrollListCheckableItem( - feature.icon(), - l10n_util::GetStringUTF16( - GetDataForFeature(feature_type).description), - feature.enabled(), feature.IsEnterpriseIconVisible()); - } - } - - if (feature_views_[FeatureType::kVirtualKeyboard]) { - HoverHighlightView* virtual_keyboard_view = - feature_views_[FeatureType::kVirtualKeyboard]; - virtual_keyboard_view->SetID(ash::VIEW_ID_ACCESSIBILITY_VIRTUAL_KEYBOARD); - virtual_keyboard_view->right_view()->SetID( + + if (controller->IsSpokenFeedbackSettingVisibleInTray()) { + spoken_feedback_enabled_ = controller->spoken_feedback().enabled(); + spoken_feedback_view_ = AddScrollListCheckableItem( + kSystemMenuAccessibilityChromevoxIcon, + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SPOKEN_FEEDBACK), + spoken_feedback_enabled_, + controller->IsEnterpriseIconVisibleForSpokenFeedback()); + } + + if (controller->IsSelectToSpeakSettingVisibleInTray()) { + select_to_speak_enabled_ = controller->select_to_speak().enabled(); + select_to_speak_view_ = AddScrollListCheckableItem( + kSystemMenuAccessibilitySelectToSpeakIcon, + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SELECT_TO_SPEAK), + select_to_speak_enabled_, + controller->IsEnterpriseIconVisibleForSelectToSpeak()); + } + + if (controller->IsDictationSettingVisibleInTray()) { + dictation_enabled_ = controller->dictation().enabled(); + dictation_view_ = AddScrollListCheckableItem( + kDictationMenuIcon, + l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_DICTATION), + dictation_enabled_, controller->IsEnterpriseIconVisibleForDictation()); + } + + if (controller->IsHighContrastSettingVisibleInTray()) { + high_contrast_enabled_ = controller->high_contrast().enabled(); + high_contrast_view_ = AddScrollListCheckableItem( + kSystemMenuAccessibilityContrastIcon, + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGH_CONTRAST_MODE), + high_contrast_enabled_, + controller->IsEnterpriseIconVisibleForHighContrast()); + } + + if (controller->IsFullScreenMagnifierSettingVisibleInTray()) { + screen_magnifier_enabled_ = delegate->IsMagnifierEnabled(); + screen_magnifier_view_ = AddScrollListCheckableItem( + kSystemMenuAccessibilityFullscreenMagnifierIcon, + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SCREEN_MAGNIFIER), + screen_magnifier_enabled_, + controller->IsEnterpriseIconVisibleForFullScreenMagnifier()); + } + + if (controller->IsDockedMagnifierSettingVisibleInTray()) { + docked_magnifier_enabled_ = + Shell::Get()->docked_magnifier_controller()->GetEnabled(); + docked_magnifier_view_ = AddScrollListCheckableItem( + kSystemMenuAccessibilityDockedMagnifierIcon, + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_DOCKED_MAGNIFIER), + docked_magnifier_enabled_, + controller->IsEnterpriseIconVisibleForDockedMagnifier()); + } + + if (controller->IsAutoclickSettingVisibleInTray()) { + autoclick_enabled_ = controller->autoclick().enabled(); + autoclick_view_ = AddScrollListCheckableItem( + kSystemMenuAccessibilityAutoClickIcon, + l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_AUTOCLICK), + autoclick_enabled_, controller->IsEnterpriseIconVisibleForAutoclick()); + } + + if (controller->IsVirtualKeyboardSettingVisibleInTray()) { + virtual_keyboard_enabled_ = controller->virtual_keyboard().enabled(); + virtual_keyboard_view_ = AddScrollListCheckableItem( + kSystemMenuKeyboardIcon, + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_VIRTUAL_KEYBOARD), + virtual_keyboard_enabled_, + controller->IsEnterpriseIconVisibleForVirtualKeyboard()); + virtual_keyboard_view_->SetID(ash::VIEW_ID_ACCESSIBILITY_VIRTUAL_KEYBOARD); + virtual_keyboard_view_->right_view()->SetID( ash::VIEW_ID_ACCESSIBILITY_VIRTUAL_KEYBOARD_ENABLED); } - if (IsAdditionalSettingsSeparatorVisibleInTray()) + if (controller->IsSwitchAccessSettingVisibleInTray()) { + switch_access_enabled_ = controller->switch_access().enabled(); + switch_access_view_ = AddScrollListCheckableItem( + kSwitchAccessIcon, + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_SWITCH_ACCESS), + switch_access_enabled_, + controller->IsEnterpriseIconVisibleForSwitchAccess()); + } + + if (controller->IsAdditionalSettingsSeparatorVisibleInTray()) scroll_content()->AddChildView(CreateListSubHeaderSeparator()); - if (IsAdditionalSettingsViewVisibleInTray()) { + if (controller->IsAdditionalSettingsViewVisibleInTray()) { AddScrollListSubHeader( IDS_ASH_STATUS_TRAY_ACCESSIBILITY_ADDITIONAL_SETTINGS); } - for (FeatureType feature_type : kSecondaryA11yOptions) { - AccessibilityControllerImpl::Feature& feature = - controller->GetFeature(feature_type); - features_enabled_[feature_type] = feature.enabled(); - if (feature.IsVisibleInTray()) { - feature_views_[feature_type] = AddScrollListCheckableItem( - l10n_util::GetStringUTF16( - GetDataForFeature(feature_type).description), - feature.enabled(), feature.IsEnterpriseIconVisible()); - } + if (controller->IsLargeCursorSettingVisibleInTray()) { + large_cursor_enabled_ = controller->large_cursor().enabled(); + large_cursor_view_ = AddScrollListCheckableItem( + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_LARGE_CURSOR), + large_cursor_enabled_, + controller->IsEnterpriseIconVisibleForLargeCursor()); + } + + if (controller->IsMonoAudioSettingVisibleInTray()) { + mono_audio_enabled_ = controller->mono_audio().enabled(); + mono_audio_view_ = AddScrollListCheckableItem( + l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_ACCESSIBILITY_MONO_AUDIO), + mono_audio_enabled_, controller->IsEnterpriseIconVisibleForMonoAudio()); + } + + if (controller->IsCaretHighlightSettingVisibleInTray()) { + caret_highlight_enabled_ = controller->caret_highlight().enabled(); + caret_highlight_view_ = AddScrollListCheckableItem( + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_CARET_HIGHLIGHT), + caret_highlight_enabled_, + controller->IsEnterpriseIconVisibleForCaretHighlight()); + } + + if (controller->IsCursorHighlightSettingVisibleInTray()) { + highlight_mouse_cursor_enabled_ = controller->cursor_highlight().enabled(); + highlight_mouse_cursor_view_ = AddScrollListCheckableItem( + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGHLIGHT_MOUSE_CURSOR), + highlight_mouse_cursor_enabled_, + controller->IsEnterpriseIconVisibleForCursorHighlight()); + } + // Focus highlighting can't be on when spoken feedback is on because + // ChromeVox does its own focus highlighting. + if (!spoken_feedback_enabled_ && + controller->IsFocusHighlightSettingVisibleInTray()) { + highlight_keyboard_focus_enabled_ = controller->focus_highlight().enabled(); + highlight_keyboard_focus_view_ = AddScrollListCheckableItem( + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_HIGHLIGHT_KEYBOARD_FOCUS), + highlight_keyboard_focus_enabled_, + controller->IsEnterpriseIconVisibleForFocusHighlight()); + } + + if (controller->IsStickyKeysSettingVisibleInTray()) { + sticky_keys_enabled_ = controller->sticky_keys().enabled(); + sticky_keys_view_ = AddScrollListCheckableItem( + l10n_util::GetStringUTF16( + IDS_ASH_STATUS_TRAY_ACCESSIBILITY_STICKY_KEYS), + sticky_keys_enabled_, + controller->IsEnterpriseIconVisibleForStickyKeys()); } } void AccessibilityDetailedView::HandleViewClicked(views::View* view) { + AccessibilityDelegate* delegate = Shell::Get()->accessibility_delegate(); AccessibilityControllerImpl* controller = Shell::Get()->accessibility_controller(); using base::RecordAction; using base::UserMetricsAction; - - for (int feature_id = 0; feature_id < FeatureType::kFeatureCount; - feature_id++) { - AccessibilityControllerImpl::Feature& feature = - controller->GetFeature(static_cast(feature_id)); - if (feature_views_[feature_id] && view == feature_views_[feature_id] && - !feature.IsEnterpriseIconVisible()) { - bool new_state = !feature.enabled(); - const FeatureData& feature_data = GetDataForFeature(feature.type()); - RecordAction(UserMetricsAction(new_state ? feature_data.action_enabled - : feature_data.action_disabled)); - LogUserAccessibilityEvent(feature_data.event_id, new_state); - - // Close the system tray bubble as the available screen space has changed - // E.g. there may not be enough screen space to display the current bubble - // after enabling the docked magnifier or more space is made available - // after disabling the docked magnifier. - if (feature.type() == FeatureType::kDockedMagnifier) - CloseBubble(); - - feature.SetEnabled(new_state); - break; - } + if (spoken_feedback_view_ && view == spoken_feedback_view_ && + !controller->IsEnterpriseIconVisibleForSpokenFeedback()) { + bool new_state = !controller->spoken_feedback().enabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_SpokenFeedbackEnabled") + : UserMetricsAction("StatusArea_SpokenFeedbackDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::SPOKEN_FEEDBACK, + new_state); + controller->SetSpokenFeedbackEnabled(new_state, A11Y_NOTIFICATION_NONE); + } else if (select_to_speak_view_ && view == select_to_speak_view_ && + !controller->IsEnterpriseIconVisibleForSelectToSpeak()) { + bool new_state = !controller->select_to_speak().enabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_SelectToSpeakEnabled") + : UserMetricsAction("StatusArea_SelectToSpeakDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::SELECT_TO_SPEAK, + new_state); + controller->select_to_speak().SetEnabled(new_state); + } else if (dictation_view_ && view == dictation_view_ && + !controller->IsEnterpriseIconVisibleForDictation()) { + bool new_state = !controller->dictation().enabled(); + RecordAction(new_state ? UserMetricsAction("StatusArea_DictationEnabled") + : UserMetricsAction("StatusArea_DictationDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::DICTATION, new_state); + controller->dictation().SetEnabled(new_state); + } else if (high_contrast_view_ && view == high_contrast_view_ && + !controller->IsEnterpriseIconVisibleForHighContrast()) { + bool new_state = !controller->high_contrast().enabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_HighContrastEnabled") + : UserMetricsAction("StatusArea_HighContrastDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::HIGH_CONTRAST, + new_state); + controller->high_contrast().SetEnabled(new_state); + } else if (screen_magnifier_view_ && view == screen_magnifier_view_ && + !controller->IsEnterpriseIconVisibleForFullScreenMagnifier()) { + bool new_state = !delegate->IsMagnifierEnabled(); + RecordAction(new_state ? UserMetricsAction("StatusArea_MagnifierEnabled") + : UserMetricsAction("StatusArea_MagnifierDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::MAGNIFIER, new_state); + delegate->SetMagnifierEnabled(new_state); + } else if (docked_magnifier_view_ && view == docked_magnifier_view_ && + !controller->IsEnterpriseIconVisibleForDockedMagnifier()) { + auto* docked_magnifier_controller = + Shell::Get()->docked_magnifier_controller(); + const bool new_state = !docked_magnifier_controller->GetEnabled(); + + // Close the system tray bubble as the available screen space has changed + // E.g. there may not be enough screen space to display the current bubble + // after enabling the docked magnifier or more space is made available after + // disabling the docked magnifier. + CloseBubble(); + + RecordAction(new_state + ? UserMetricsAction("StatusArea_DockedMagnifierEnabled") + : UserMetricsAction("StatusArea_DockedMagnifierDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::DOCKED_MAGNIFIER, + new_state); + docked_magnifier_controller->SetEnabled(new_state); + } else if (large_cursor_view_ && view == large_cursor_view_ && + !controller->IsEnterpriseIconVisibleForLargeCursor()) { + bool new_state = !controller->large_cursor().enabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_LargeCursorEnabled") + : UserMetricsAction("StatusArea_LargeCursorDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::LARGE_CURSOR, + new_state); + controller->large_cursor().SetEnabled(new_state); + } else if (autoclick_view_ && view == autoclick_view_ && + !controller->IsEnterpriseIconVisibleForAutoclick()) { + bool new_state = !controller->autoclick().enabled(); + RecordAction(new_state ? UserMetricsAction("StatusArea_AutoClickEnabled") + : UserMetricsAction("StatusArea_AutoClickDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::AUTO_CLICK, new_state); + controller->autoclick().SetEnabled(new_state); + } else if (virtual_keyboard_view_ && view == virtual_keyboard_view_ && + !controller->IsEnterpriseIconVisibleForVirtualKeyboard()) { + bool new_state = !controller->virtual_keyboard().enabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_VirtualKeyboardEnabled") + : UserMetricsAction("StatusArea_VirtualKeyboardDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::VIRTUAL_KEYBOARD, + new_state); + controller->virtual_keyboard().SetEnabled(new_state); + } else if (switch_access_view_ && view == switch_access_view_ && + !controller->IsEnterpriseIconVisibleForSwitchAccess()) { + bool new_state = !controller->switch_access().enabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_SwitchAccessEnabled") + : UserMetricsAction("StatusArea_SwitchAccessDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::SWITCH_ACCESS, + new_state); + controller->switch_access().SetEnabled(new_state); + } else if (caret_highlight_view_ && view == caret_highlight_view_ && + !controller->IsEnterpriseIconVisibleForCaretHighlight()) { + bool new_state = !controller->caret_highlight().enabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_CaretHighlightEnabled") + : UserMetricsAction("StatusArea_CaretHighlightDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::CARET_HIGHLIGHT, + new_state); + controller->caret_highlight().SetEnabled(new_state); + } else if (mono_audio_view_ && view == mono_audio_view_ && + !controller->IsEnterpriseIconVisibleForMonoAudio()) { + bool new_state = !controller->mono_audio().enabled(); + RecordAction(new_state ? UserMetricsAction("StatusArea_MonoAudioEnabled") + : UserMetricsAction("StatusArea_MonoAudioDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::MONO_AUDIO, new_state); + controller->mono_audio().SetEnabled(new_state); + } else if (highlight_mouse_cursor_view_ && + view == highlight_mouse_cursor_view_ && + !controller->IsEnterpriseIconVisibleForCursorHighlight()) { + bool new_state = !controller->cursor_highlight().enabled(); + RecordAction( + new_state + ? UserMetricsAction("StatusArea_HighlightMouseCursorEnabled") + : UserMetricsAction("StatusArea_HighlightMouseCursorDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::HIGHLIGHT_MOUSE_CURSOR, + new_state); + controller->cursor_highlight().SetEnabled(new_state); + } else if (highlight_keyboard_focus_view_ && + view == highlight_keyboard_focus_view_ && + !controller->IsEnterpriseIconVisibleForFocusHighlight()) { + bool new_state = !controller->focus_highlight().enabled(); + RecordAction( + new_state + ? UserMetricsAction("StatusArea_HighlightKeyboardFocusEnabled") + : UserMetricsAction("StatusArea_HighlightKeyboardFocusDisabled")); + LogUserAccessibilityEvent( + UserSettingsEvent::Event::HIGHLIGHT_KEYBOARD_FOCUS, new_state); + controller->focus_highlight().SetEnabled(new_state); + } else if (sticky_keys_view_ && view == sticky_keys_view_ && + !controller->IsEnterpriseIconVisibleForStickyKeys()) { + bool new_state = !controller->sticky_keys().enabled(); + RecordAction(new_state + ? UserMetricsAction("StatusArea_StickyKeysEnabled") + : UserMetricsAction("StatusArea_StickyKeysDisabled")); + LogUserAccessibilityEvent(UserSettingsEvent::Event::STICKY_KEYS, new_state); + controller->sticky_keys().SetEnabled(new_state); } } diff --git a/ash/system/accessibility/tray_accessibility.h b/ash/system/accessibility/tray_accessibility.h index 70510b70b366f1..2411c77d95a487 100644 --- a/ash/system/accessibility/tray_accessibility.h +++ b/ash/system/accessibility/tray_accessibility.h @@ -7,7 +7,6 @@ #include -#include "ash/accessibility/accessibility_controller_impl.h" #include "ash/accessibility/accessibility_delegate.h" #include "ash/accessibility/accessibility_observer.h" #include "ash/public/cpp/session/session_observer.h" @@ -23,6 +22,7 @@ class TrayAccessibilityTest; namespace views { class Button; +class Button; class View; } // namespace views @@ -67,14 +67,40 @@ class ASH_EXPORT AccessibilityDetailedView : public TrayDetailedView { // Add the accessibility feature list. void AppendAccessibilityList(); - HoverHighlightView* - feature_views_[AccessibilityControllerImpl::FeatureType::kFeatureCount] = - {nullptr}; + HoverHighlightView* spoken_feedback_view_ = nullptr; + HoverHighlightView* select_to_speak_view_ = nullptr; + HoverHighlightView* dictation_view_ = nullptr; + HoverHighlightView* high_contrast_view_ = nullptr; + HoverHighlightView* screen_magnifier_view_ = nullptr; + HoverHighlightView* docked_magnifier_view_ = nullptr; + HoverHighlightView* large_cursor_view_ = nullptr; + HoverHighlightView* autoclick_view_ = nullptr; + HoverHighlightView* virtual_keyboard_view_ = nullptr; + HoverHighlightView* switch_access_view_ = nullptr; + HoverHighlightView* mono_audio_view_ = nullptr; + HoverHighlightView* caret_highlight_view_ = nullptr; + HoverHighlightView* highlight_mouse_cursor_view_ = nullptr; + HoverHighlightView* highlight_keyboard_focus_view_ = nullptr; + HoverHighlightView* sticky_keys_view_ = nullptr; views::Button* help_view_ = nullptr; views::Button* settings_view_ = nullptr; // These exist for tests. The canonical state is stored in prefs. - bool features_enabled_[AccessibilityControllerImpl::kFeatureCount] = {false}; + bool spoken_feedback_enabled_ = false; + bool select_to_speak_enabled_ = false; + bool dictation_enabled_ = false; + bool high_contrast_enabled_ = false; + bool screen_magnifier_enabled_ = false; + bool docked_magnifier_enabled_ = false; + bool large_cursor_enabled_ = false; + bool autoclick_enabled_ = false; + bool virtual_keyboard_enabled_ = false; + bool switch_access_enabled_ = false; + bool mono_audio_enabled_ = false; + bool caret_highlight_enabled_ = false; + bool highlight_mouse_cursor_enabled_ = false; + bool highlight_keyboard_focus_enabled_ = false; + bool sticky_keys_enabled_ = false; LoginStatus login_; diff --git a/ash/system/accessibility/tray_accessibility_unittest.cc b/ash/system/accessibility/tray_accessibility_unittest.cc index e38ceaa7ae9a49..ab7d5dbc33ced7 100644 --- a/ash/system/accessibility/tray_accessibility_unittest.cc +++ b/ash/system/accessibility/tray_accessibility_unittest.cc @@ -23,24 +23,76 @@ namespace ash { namespace { -using FeatureType = AccessibilityControllerImpl::FeatureType; +void SetScreenMagnifierEnabled(bool enabled) { + Shell::Get()->accessibility_delegate()->SetMagnifierEnabled(enabled); +} + +void SetDockedMagnifierEnabled(bool enabled) { + Shell::Get()->accessibility_controller()->docked_magnifier().SetEnabled( + enabled); +} + +void EnableSpokenFeedback(bool enabled) { + Shell::Get()->accessibility_controller()->SetSpokenFeedbackEnabled( + enabled, A11Y_NOTIFICATION_NONE); +} + +void EnableSelectToSpeak(bool enabled) { + Shell::Get()->accessibility_controller()->select_to_speak().SetEnabled( + enabled); +} -void SetFeatureEnabled(FeatureType feature, bool enabled) { - if (feature == FeatureType::kDictation) +void EnableDictation(bool enabled) { + if (enabled) { Shell::Get()->accessibility_controller()->dictation().SetDialogAccepted(); - Shell::Get()->accessibility_controller()->GetFeature(feature).SetEnabled( + } + Shell::Get()->accessibility_controller()->dictation().SetEnabled(enabled); +} + +void EnableHighContrast(bool enabled) { + Shell::Get()->accessibility_controller()->high_contrast().SetEnabled(enabled); +} + +void EnableAutoclick(bool enabled) { + Shell::Get()->accessibility_controller()->autoclick().SetEnabled(enabled); +} + +void EnableVirtualKeyboard(bool enabled) { + Shell::Get()->accessibility_controller()->virtual_keyboard().SetEnabled( enabled); } -FeatureType kListedFeautures[] = { - FeatureType::kSpokenFeedback, FeatureType::kSelectToSpeak, - FeatureType::kDictation, FeatureType::kHighContrast, - FeatureType::kFullscreenMagnifier, FeatureType::kDockedMagnifier, - FeatureType::kAutoclick, FeatureType::kVirtualKeyboard, - FeatureType::kSwitchAccess, FeatureType::kLargeCursor, - FeatureType::kMonoAudio, FeatureType::kCaretHighlight, - FeatureType::kCursorHighlight, FeatureType::kFocusHighlight, - FeatureType::kStickyKeys}; +void EnableLargeCursor(bool enabled) { + Shell::Get()->accessibility_controller()->large_cursor().SetEnabled(enabled); +} + +void EnableMonoAudio(bool enabled) { + Shell::Get()->accessibility_controller()->mono_audio().SetEnabled(enabled); +} + +void SetCaretHighlightEnabled(bool enabled) { + Shell::Get()->accessibility_controller()->caret_highlight().SetEnabled( + enabled); +} + +void SetCursorHighlightEnabled(bool enabled) { + Shell::Get()->accessibility_controller()->cursor_highlight().SetEnabled( + enabled); +} + +void SetFocusHighlightEnabled(bool enabled) { + Shell::Get()->accessibility_controller()->focus_highlight().SetEnabled( + enabled); +} + +void EnableStickyKeys(bool enabled) { + Shell::Get()->accessibility_controller()->sticky_keys().SetEnabled(enabled); +} + +void EnableSwitchAccess(bool enabled) { + Shell::Get()->accessibility_controller()->switch_access().SetEnabled(enabled); +} + } // namespace class TrayAccessibilityTest : public AshTestBase, public AccessibilityObserver { @@ -73,17 +125,126 @@ class TrayAccessibilityTest : public AshTestBase, public AccessibilityObserver { detailed_menu_->OnViewClicked(view); } - void ClickFeatureOnDetailMenu(FeatureType feature) { - ClickView(detailed_menu_->feature_views_[feature]); + // These helpers may change prefs in ash, so they must spin the message loop + // to wait for chrome to observe the change. + void ClickSpokenFeedbackOnDetailMenu() { + ClickView(detailed_menu_->spoken_feedback_view_); + } + + void ClickHighContrastOnDetailMenu() { + ClickView(detailed_menu_->high_contrast_view_); + } + + void ClickScreenMagnifierOnDetailMenu() { + ClickView(detailed_menu_->screen_magnifier_view_); + } + + void ClickDockedMagnifierOnDetailMenu() { + ClickView(detailed_menu_->docked_magnifier_view_); + } + + void ClickAutoclickOnDetailMenu() { + ClickView(detailed_menu_->autoclick_view_); + } + + void ClickVirtualKeyboardOnDetailMenu() { + ClickView(detailed_menu_->virtual_keyboard_view_); + } + + void ClickLargeMouseCursorOnDetailMenu() { + ClickView(detailed_menu_->large_cursor_view_); + } + + void ClickMonoAudioOnDetailMenu() { + ClickView(detailed_menu_->mono_audio_view_); + } + + void ClickCaretHighlightOnDetailMenu() { + ClickView(detailed_menu_->caret_highlight_view_); + } + + void ClickHighlightMouseCursorOnDetailMenu() { + ClickView(detailed_menu_->highlight_mouse_cursor_view_); + } + + void ClickHighlightKeyboardFocusOnDetailMenu() { + ClickView(detailed_menu_->highlight_keyboard_focus_view_); + } + + void ClickStickyKeysOnDetailMenu() { + ClickView(detailed_menu_->sticky_keys_view_); + } + + void ClickSwitchAccessOnDetailMenu() { + ClickView(detailed_menu_->switch_access_view_); + } + + void ClickSelectToSpeakOnDetailMenu() { + ClickView(detailed_menu_->select_to_speak_view_); + } + + void ClickDictationOnDetailMenu() { + ClickView(detailed_menu_->dictation_view_); + } + + bool IsSpokenFeedbackMenuShownOnDetailMenu() const { + return detailed_menu_->spoken_feedback_view_; + } + + bool IsSelectToSpeakShownOnDetailMenu() const { + return detailed_menu_->select_to_speak_view_; + } + + bool IsDictationShownOnDetailMenu() const { + return detailed_menu_->dictation_view_; + } + + bool IsHighContrastMenuShownOnDetailMenu() const { + return detailed_menu_->high_contrast_view_; } - bool CheckFeaturesHiddenOnDetailMenu( - const std::set& expected_hidden) const { - std::set actual_hidden; - for (auto feature : kListedFeautures) - if (!detailed_menu_->feature_views_[feature]) - actual_hidden.insert(feature); - return actual_hidden == expected_hidden; + bool IsScreenMagnifierMenuShownOnDetailMenu() const { + return detailed_menu_->screen_magnifier_view_; + } + + bool IsDockedMagnifierShownOnDetailMenu() const { + return detailed_menu_->docked_magnifier_view_; + } + + bool IsLargeCursorMenuShownOnDetailMenu() const { + return detailed_menu_->large_cursor_view_; + } + + bool IsAutoclickMenuShownOnDetailMenu() const { + return detailed_menu_->autoclick_view_; + } + + bool IsVirtualKeyboardMenuShownOnDetailMenu() const { + return detailed_menu_->virtual_keyboard_view_; + } + + bool IsMonoAudioMenuShownOnDetailMenu() const { + return detailed_menu_->mono_audio_view_; + } + + bool IsCaretHighlightMenuShownOnDetailMenu() const { + return detailed_menu_->caret_highlight_view_; + } + + bool IsHighlightMouseCursorMenuShownOnDetailMenu() const { + return detailed_menu_->highlight_mouse_cursor_view_; + } + + bool IsHighlightKeyboardFocusMenuShownOnDetailMenu() const { + return detailed_menu_->highlight_keyboard_focus_view_; + } + + bool IsStickyKeysMenuShownOnDetailMenu() const { + return detailed_menu_->sticky_keys_view_; + } + + bool IsSwitchAccessShownOnDetailMenu() const { + return detailed_menu_->switch_access_view_; } // In material design we show the help button but theme it as disabled if @@ -105,10 +266,6 @@ class TrayAccessibilityTest : public AshTestBase, public AccessibilityObserver { // enabled. Check that the checked state and detailed_menu_'s local state are // the same. bool IsEnabledOnDetailMenu(bool enabled_state, views::View* view) const { - // Sometimes views are not created because of a conflicting feature. - if (!view) - return enabled_state; - ui::AXNodeData node_data; view->GetAccessibleNodeData(&node_data); bool checked_for_accessibility = @@ -117,18 +274,87 @@ class TrayAccessibilityTest : public AshTestBase, public AccessibilityObserver { return enabled_state && checked_for_accessibility; } - bool IsFeatureEnabledOnDetailMenu(FeatureType feature) const { - return IsEnabledOnDetailMenu(detailed_menu_->features_enabled_[feature], - detailed_menu_->feature_views_[feature]); + bool IsSpokenFeedbackEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->spoken_feedback_enabled_, + detailed_menu_->spoken_feedback_view_); + } + + bool IsSelectToSpeakEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->select_to_speak_enabled_, + detailed_menu_->select_to_speak_view_); + } + + bool IsDictationEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->dictation_enabled_, + detailed_menu_->dictation_view_); + } + + bool IsHighContrastEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->high_contrast_enabled_, + detailed_menu_->high_contrast_view_); + } + + bool IsScreenMagnifierEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->screen_magnifier_enabled_, + detailed_menu_->screen_magnifier_view_); + } + + bool IsDockedMagnifierEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->docked_magnifier_enabled_, + detailed_menu_->docked_magnifier_view_); + } + + bool IsLargeCursorEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->large_cursor_enabled_, + detailed_menu_->large_cursor_view_); + } + + bool IsAutoclickEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->autoclick_enabled_, + detailed_menu_->autoclick_view_); + } + + bool IsVirtualKeyboardEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->virtual_keyboard_enabled_, + detailed_menu_->virtual_keyboard_view_); + } + + bool IsMonoAudioEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->mono_audio_enabled_, + detailed_menu_->mono_audio_view_); } - bool CheckFeaturesEnabledOnDetailMenu( - const std::set& expected_enabled) { - std::set actual_enabled; - for (auto feature : kListedFeautures) - if (IsFeatureEnabledOnDetailMenu(feature)) - actual_enabled.insert(feature); - return actual_enabled == expected_enabled; + bool IsCaretHighlightEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->caret_highlight_enabled_, + detailed_menu_->caret_highlight_view_); + } + + bool IsHighlightMouseCursorEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu( + detailed_menu_->highlight_mouse_cursor_enabled_, + detailed_menu_->highlight_mouse_cursor_view_); + } + + bool IsHighlightKeyboardFocusEnabledOnDetailMenu() const { + // The highlight_keyboard_focus_view_ is not created when Spoken Feedback + // is enabled. + if (IsSpokenFeedbackEnabledOnDetailMenu()) { + DCHECK(!detailed_menu_->highlight_keyboard_focus_view_); + return detailed_menu_->highlight_keyboard_focus_enabled_; + } + return IsEnabledOnDetailMenu( + detailed_menu_->highlight_keyboard_focus_enabled_, + detailed_menu_->highlight_keyboard_focus_view_); + } + + bool IsStickyKeysEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->sticky_keys_enabled_, + detailed_menu_->sticky_keys_view_); + } + + bool IsSwitchAccessEnabledOnDetailMenu() const { + return IsEnabledOnDetailMenu(detailed_menu_->switch_access_enabled_, + detailed_menu_->switch_access_view_); } const char* GetDetailedViewClassName() { @@ -155,25 +381,68 @@ TEST_F(TrayAccessibilityTest, CheckMenuVisibilityOnDetailMenu) { // Except help & settings, others should be kept the same // in LOGIN | NOT LOGIN | LOCKED. https://crbug.com/632107. CreateDetailedMenu(); - - EXPECT_TRUE(CheckFeaturesHiddenOnDetailMenu({})); + EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu()); + EXPECT_TRUE(IsSelectToSpeakShownOnDetailMenu()); + EXPECT_TRUE(IsDictationShownOnDetailMenu()); + EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu()); + EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu()); + EXPECT_TRUE(IsDockedMagnifierShownOnDetailMenu()); + EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu()); + EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu()); + EXPECT_TRUE(IsHelpAvailableOnDetailMenu()); + EXPECT_TRUE(IsSettingsAvailableOnDetailMenu()); + EXPECT_TRUE(IsLargeCursorMenuShownOnDetailMenu()); + EXPECT_TRUE(IsMonoAudioMenuShownOnDetailMenu()); + EXPECT_TRUE(IsCaretHighlightMenuShownOnDetailMenu()); + EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu()); + EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu()); + EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu()); + EXPECT_TRUE(IsSwitchAccessShownOnDetailMenu()); CloseDetailMenu(); // Simulate screen lock. BlockUserSession(BLOCKED_BY_LOCK_SCREEN); CreateDetailedMenu(); - EXPECT_TRUE(CheckFeaturesHiddenOnDetailMenu({})); + EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu()); + EXPECT_TRUE(IsSelectToSpeakShownOnDetailMenu()); + EXPECT_TRUE(IsDictationShownOnDetailMenu()); + EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu()); + EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu()); + EXPECT_TRUE(IsDockedMagnifierShownOnDetailMenu()); + EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu()); + EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu()); EXPECT_FALSE(IsHelpAvailableOnDetailMenu()); EXPECT_FALSE(IsSettingsAvailableOnDetailMenu()); + EXPECT_TRUE(IsLargeCursorMenuShownOnDetailMenu()); + EXPECT_TRUE(IsMonoAudioMenuShownOnDetailMenu()); + EXPECT_TRUE(IsCaretHighlightMenuShownOnDetailMenu()); + EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu()); + EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu()); + EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu()); + EXPECT_TRUE(IsSwitchAccessShownOnDetailMenu()); CloseDetailMenu(); UnblockUserSession(); // Simulate adding multiprofile user. BlockUserSession(BLOCKED_BY_USER_ADDING_SCREEN); CreateDetailedMenu(); - EXPECT_TRUE(CheckFeaturesHiddenOnDetailMenu({})); + EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu()); + EXPECT_TRUE(IsSelectToSpeakShownOnDetailMenu()); + EXPECT_TRUE(IsDictationShownOnDetailMenu()); + EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu()); + EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu()); + EXPECT_TRUE(IsDockedMagnifierShownOnDetailMenu()); + EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu()); + EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu()); EXPECT_FALSE(IsHelpAvailableOnDetailMenu()); EXPECT_FALSE(IsSettingsAvailableOnDetailMenu()); + EXPECT_TRUE(IsLargeCursorMenuShownOnDetailMenu()); + EXPECT_TRUE(IsMonoAudioMenuShownOnDetailMenu()); + EXPECT_TRUE(IsCaretHighlightMenuShownOnDetailMenu()); + EXPECT_TRUE(IsHighlightMouseCursorMenuShownOnDetailMenu()); + EXPECT_TRUE(IsHighlightKeyboardFocusMenuShownOnDetailMenu()); + EXPECT_TRUE(IsStickyKeysMenuShownOnDetailMenu()); + EXPECT_TRUE(IsSwitchAccessShownOnDetailMenu()); CloseDetailMenu(); UnblockUserSession(); } @@ -181,23 +450,171 @@ TEST_F(TrayAccessibilityTest, CheckMenuVisibilityOnDetailMenu) { TEST_F(TrayAccessibilityTest, ClickDetailMenu) { AccessibilityControllerImpl* accessibility_controller = Shell::Get()->accessibility_controller(); + // Confirms that the check item toggles the spoken feedback. + EXPECT_FALSE(accessibility_controller->spoken_feedback().enabled()); + + CreateDetailedMenu(); + ClickSpokenFeedbackOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->spoken_feedback().enabled()); - for (auto feature : kListedFeautures) { - SCOPED_TRACE(base::StringPrintf("Testing feature #[%d]", feature)); - if (feature == FeatureType::kDictation) - Shell::Get()->accessibility_controller()->dictation().SetDialogAccepted(); + CreateDetailedMenu(); + ClickSpokenFeedbackOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->spoken_feedback().enabled()); - // Confirms that the check item toggles the given feature. - EXPECT_FALSE(accessibility_controller->GetFeature(feature).enabled()); + // Confirms that the check item toggles the high contrast. + EXPECT_FALSE(accessibility_controller->high_contrast().enabled()); - CreateDetailedMenu(); - ClickFeatureOnDetailMenu(feature); - EXPECT_TRUE(accessibility_controller->GetFeature(feature).enabled()); + CreateDetailedMenu(); + ClickHighContrastOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->high_contrast().enabled()); - CreateDetailedMenu(); - ClickFeatureOnDetailMenu(feature); - EXPECT_FALSE(accessibility_controller->GetFeature(feature).enabled()); - } + CreateDetailedMenu(); + ClickHighContrastOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->high_contrast().enabled()); + + // Confirms that the check item toggles the magnifier. + EXPECT_FALSE(Shell::Get()->accessibility_delegate()->IsMagnifierEnabled()); + + CreateDetailedMenu(); + ClickScreenMagnifierOnDetailMenu(); + EXPECT_TRUE(Shell::Get()->accessibility_delegate()->IsMagnifierEnabled()); + + CreateDetailedMenu(); + ClickScreenMagnifierOnDetailMenu(); + EXPECT_FALSE(Shell::Get()->accessibility_delegate()->IsMagnifierEnabled()); + + // Confirms that the check item toggles the docked magnifier. + EXPECT_FALSE(Shell::Get()->docked_magnifier_controller()->GetEnabled()); + + CreateDetailedMenu(); + ClickDockedMagnifierOnDetailMenu(); + EXPECT_TRUE(Shell::Get()->docked_magnifier_controller()->GetEnabled()); + + CreateDetailedMenu(); + ClickDockedMagnifierOnDetailMenu(); + EXPECT_FALSE(Shell::Get()->docked_magnifier_controller()->GetEnabled()); + + // Confirms that the check item toggles autoclick. + EXPECT_FALSE(accessibility_controller->autoclick().enabled()); + + CreateDetailedMenu(); + ClickAutoclickOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->autoclick().enabled()); + + CreateDetailedMenu(); + ClickAutoclickOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->autoclick().enabled()); + + // Confirms that the check item toggles on-screen keyboard. + EXPECT_FALSE(accessibility_controller->virtual_keyboard().enabled()); + + CreateDetailedMenu(); + ClickVirtualKeyboardOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->virtual_keyboard().enabled()); + + CreateDetailedMenu(); + ClickVirtualKeyboardOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->virtual_keyboard().enabled()); + + // Confirms that the check item toggles large mouse cursor. + EXPECT_FALSE(accessibility_controller->large_cursor().enabled()); + + CreateDetailedMenu(); + ClickLargeMouseCursorOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->large_cursor().enabled()); + + CreateDetailedMenu(); + ClickLargeMouseCursorOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->large_cursor().enabled()); + + // Confirms that the check item toggles mono audio. + EXPECT_FALSE(accessibility_controller->mono_audio().enabled()); + + CreateDetailedMenu(); + ClickMonoAudioOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->mono_audio().enabled()); + + CreateDetailedMenu(); + ClickMonoAudioOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->mono_audio().enabled()); + + // Confirms that the check item toggles caret highlight. + EXPECT_FALSE(accessibility_controller->caret_highlight().enabled()); + + CreateDetailedMenu(); + ClickCaretHighlightOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->caret_highlight().enabled()); + + CreateDetailedMenu(); + ClickCaretHighlightOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->caret_highlight().enabled()); + + // Confirms that the check item toggles highlight mouse cursor. + EXPECT_FALSE(accessibility_controller->cursor_highlight().enabled()); + + CreateDetailedMenu(); + ClickHighlightMouseCursorOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->cursor_highlight().enabled()); + + CreateDetailedMenu(); + ClickHighlightMouseCursorOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->cursor_highlight().enabled()); + + // Confirms that the check item toggles highlight keyboard focus. + EXPECT_FALSE(accessibility_controller->focus_highlight().enabled()); + + CreateDetailedMenu(); + ClickHighlightKeyboardFocusOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->focus_highlight().enabled()); + + CreateDetailedMenu(); + ClickHighlightKeyboardFocusOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->focus_highlight().enabled()); + + // Confirms that the check item toggles sticky keys. + EXPECT_FALSE(accessibility_controller->sticky_keys().enabled()); + + CreateDetailedMenu(); + ClickStickyKeysOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->sticky_keys().enabled()); + + CreateDetailedMenu(); + ClickStickyKeysOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->sticky_keys().enabled()); + + // Confirms that the check item toggles switch access. + EXPECT_FALSE(accessibility_controller->switch_access().enabled()); + + CreateDetailedMenu(); + ClickSwitchAccessOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->switch_access().enabled()); + + CreateDetailedMenu(); + ClickSwitchAccessOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->switch_access().enabled()); + + // Confirms that the check item toggles select-to-speak. + EXPECT_FALSE(accessibility_controller->select_to_speak().enabled()); + + CreateDetailedMenu(); + ClickSelectToSpeakOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->select_to_speak().enabled()); + + CreateDetailedMenu(); + ClickSelectToSpeakOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->select_to_speak().enabled()); + + // Confirms that the check item toggles dictation. + EXPECT_FALSE(accessibility_controller->dictation().enabled()); + Shell::Get()->accessibility_controller()->dictation().SetDialogAccepted(); + + CreateDetailedMenu(); + ClickDictationOnDetailMenu(); + EXPECT_TRUE(accessibility_controller->dictation().enabled()); + + CreateDetailedMenu(); + ClickDictationOnDetailMenu(); + EXPECT_FALSE(accessibility_controller->dictation().enabled()); } // Trivial test to increase code coverage. @@ -219,63 +636,753 @@ class TrayAccessibilityLoginScreenTest : public TrayAccessibilityTest { TEST_F(TrayAccessibilityLoginScreenTest, CheckMarksOnDetailMenu) { // At first, all of the check is unchecked. CreateDetailedMenu(); - EXPECT_TRUE(CheckFeaturesEnabledOnDetailMenu({})); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); CloseDetailMenu(); - for (auto feature : kListedFeautures) { - // Switch Access is currently not available on the login screen; see - // crbug/1108808 - if (feature == FeatureType::kSwitchAccess) - continue; + // Enabling spoken feedback. + EnableSpokenFeedback(true); + CreateDetailedMenu(); + EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); - SetFeatureEnabled(feature, true); - CreateDetailedMenu(); - EXPECT_TRUE(CheckFeaturesEnabledOnDetailMenu({feature})); - CloseDetailMenu(); + // Disabling spoken feedback. + EnableSpokenFeedback(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); - SetFeatureEnabled(feature, false); - CreateDetailedMenu(); - EXPECT_TRUE(CheckFeaturesEnabledOnDetailMenu({})); - CloseDetailMenu(); - } + // Enabling select to speak. + EnableSelectToSpeak(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_TRUE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); - // Enabling all of the a11y features. - for (auto feature : kListedFeautures) - SetFeatureEnabled(feature, true); + // Disabling select to speak. + EnableSelectToSpeak(false); CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); - // The latest screen magnifier will disable the other one, in our case - // fullscreen magnifier gets disabled. - std::set expected_enabled_features; - for (auto feature : kListedFeautures) - if (feature != FeatureType::kFullscreenMagnifier && - feature != FeatureType::kFocusHighlight) { - expected_enabled_features.insert(feature); - } - // Focus highlighting can't be on when spoken feedback is on. - EXPECT_TRUE( + // Enabling dictation. + EnableDictation(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_TRUE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); - CheckFeaturesEnabledOnDetailMenu(expected_enabled_features)); + // Disabling dictation. + EnableDictation(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); CloseDetailMenu(); - // Disabling all of the a11y features. - for (auto feature : kListedFeautures) - SetFeatureEnabled(feature, false); + // Enabling high contrast. + EnableHighContrast(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling high contrast. + EnableHighContrast(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enabling full screen magnifier. + SetScreenMagnifierEnabled(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling screen magnifier. + SetScreenMagnifierEnabled(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enabling docked magnifier. + SetDockedMagnifierEnabled(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_TRUE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling docked magnifier. + SetDockedMagnifierEnabled(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enabling large cursor. + EnableLargeCursor(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling large cursor. + EnableLargeCursor(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enable on-screen keyboard. + EnableVirtualKeyboard(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_TRUE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disable on-screen keyboard. + EnableVirtualKeyboard(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enabling mono audio. + EnableMonoAudio(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_TRUE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling mono audio. + EnableMonoAudio(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enabling caret highlight. + SetCaretHighlightEnabled(true); CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_TRUE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling caret highlight. + SetCaretHighlightEnabled(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enabling highlight mouse cursor. + SetCursorHighlightEnabled(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_TRUE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling highlight mouse cursor. + SetCursorHighlightEnabled(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enabling highlight keyboard focus. + SetFocusHighlightEnabled(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_TRUE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling highlight keyboard focus. + SetFocusHighlightEnabled(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Enabling sticky keys. + EnableStickyKeys(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_TRUE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling sticky keys. + EnableStickyKeys(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); - EXPECT_TRUE(CheckFeaturesEnabledOnDetailMenu({})); + // Switch Access is currently not available on the login screen; see + // crbug/1108808 + /* // Enabling switch access. + EnableSwitchAccess(true); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + EXPECT_TRUE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling switch access. + EnableSwitchAccess(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + */ + + // Enabling all of the a11y features. + EnableSpokenFeedback(true); + EnableSelectToSpeak(true); + EnableDictation(true); + EnableHighContrast(true); + SetScreenMagnifierEnabled(true); + SetDockedMagnifierEnabled(true); + EnableLargeCursor(true); + EnableVirtualKeyboard(true); + EnableAutoclick(true); + EnableMonoAudio(true); + SetCaretHighlightEnabled(true); + SetCursorHighlightEnabled(true); + SetFocusHighlightEnabled(true); + EnableStickyKeys(true); + EnableSwitchAccess(true); + CreateDetailedMenu(); + EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_TRUE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_TRUE(IsDictationEnabledOnDetailMenu()); + EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_TRUE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_TRUE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_TRUE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_TRUE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_TRUE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_TRUE(IsHighlightMouseCursorEnabledOnDetailMenu()); + // Focus highlighting can't be on when spoken feedback is on + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_TRUE(IsStickyKeysEnabledOnDetailMenu()); + EXPECT_TRUE(IsSwitchAccessEnabledOnDetailMenu()); + CloseDetailMenu(); + + // Disabling all of the a11y features. + EnableSpokenFeedback(false); + EnableSelectToSpeak(false); + EnableDictation(false); + EnableHighContrast(false); + SetScreenMagnifierEnabled(false); + SetDockedMagnifierEnabled(false); + EnableLargeCursor(false); + EnableVirtualKeyboard(false); + EnableAutoclick(false); + EnableMonoAudio(false); + SetCaretHighlightEnabled(false); + SetCursorHighlightEnabled(false); + SetFocusHighlightEnabled(false); + EnableStickyKeys(false); + EnableSwitchAccess(false); + CreateDetailedMenu(); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently cannot be enabled from the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); CloseDetailMenu(); // Enabling autoclick. - SetFeatureEnabled(FeatureType::kAutoclick, true); + EnableAutoclick(true); CreateDetailedMenu(); - EXPECT_TRUE(CheckFeaturesEnabledOnDetailMenu({FeatureType::kAutoclick})); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_TRUE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently not available on the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); CloseDetailMenu(); // Disabling autoclick. - SetFeatureEnabled(FeatureType::kAutoclick, false); + EnableAutoclick(false); CreateDetailedMenu(); - EXPECT_TRUE(CheckFeaturesEnabledOnDetailMenu({})); + EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu()); + EXPECT_FALSE(IsSelectToSpeakEnabledOnDetailMenu()); + EXPECT_FALSE(IsDictationEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu()); + EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsDockedMagnifierEnabledOnDetailMenu()); + EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu()); + EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu()); + EXPECT_FALSE(IsMonoAudioEnabledOnDetailMenu()); + EXPECT_FALSE(IsCaretHighlightEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightMouseCursorEnabledOnDetailMenu()); + EXPECT_FALSE(IsHighlightKeyboardFocusEnabledOnDetailMenu()); + EXPECT_FALSE(IsStickyKeysEnabledOnDetailMenu()); + // Switch Access is currently not available on the login screen. + // TODO(crbug.com/1108808): Uncomment once issue is addressed. + // EXPECT_FALSE(IsSwitchAccessEnabledOnDetailMenu()); CloseDetailMenu(); }