Commit e9a93954 authored by Avi Drissman's avatar Avi Drissman Committed by Commit Bot

Revert "[Ash] Simplify accessibility tray view"

This reverts commit 249ce21a.

Reason for revert: 

Suspicion of breaking 30-odd accessibility tests (DumpAccessibilityEventsTest.*, DumpAccessibilityTreeTest.*) starting with

https://ci.chromium.org/p/chromium/builders/ci/linux-trusty-rel/15793
https://ci.chromium.org/p/chromium/builders/ci/Linux%20MSan%20Tests/25463


Original change's description:
> [Ash] Simplify accessibility tray view
> 
> After refactoring of AccessibilityControllerImpl, we can finally
> leverage that modularity by removing tons of identical calls.
> 
> Bug: 2390184
> Change-Id: I1c42bff577a844af80584ba6acd8da81e7b9b704
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2398687
> Commit-Queue: Anatoliy Potapchuk <apotapchuk@chromium.org>
> Reviewed-by: Xiyuan Xia <xiyuan@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#806594}

TBR=xiyuan@chromium.org,apotapchuk@chromium.org

Change-Id: Iaee9d02267fd87eabc94930da410ff870079282c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 2390184
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2410341Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Commit-Queue: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#806658}
parent 834b0fa2
......@@ -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<SwitchAccessFeature>(
feature_data.type, feature_data.pref, feature_data.icon, this);
continue;
}
if (it == dialogs.end()) {
features_[feature_data.type] = std::make_unique<Feature>(
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() ==
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:
......
......@@ -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();
......
......@@ -7,7 +7,6 @@
#include <stdint.h>
#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_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment