Commit 0fd86f27 authored by Ahmed Mehfooz's avatar Ahmed Mehfooz Committed by Commit Bot

Add accessible names for detailed views in system tray

This CL adds custom chromevox announcements for all
settings pages in the system tray.

Bug: 1009714
Change-Id: Ied1735f1afc1289de6c66fb449c1bce70ac5fd25
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2037956Reviewed-by: default avatarTim Song <tengs@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Ahmed Mehfooz <amehfooz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738667}
parent 736cd40f
......@@ -200,6 +200,36 @@ This file contains the strings for ash.
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_ACCESSIBLE_DESCRIPTION" desc="The accessible description of the quick settings bubble and the information in it.">
Quick Settings, Press search + left to access the notification center.
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_A11Y_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for accessibility settings accessed through the accessibility feature pod.">
Accessibility Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_AUDIO_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for audio settings accessed through the audio feature pod.">
Audio Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_BLUETOOTH_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for bluetooth settings accessed through the bluetooth feature pod.">
Bluetooth Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_CAST_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for cast settings accessed through the cast feature pod.">
Cast Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_IME_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for IME settings accessed through the IME feature pod.">
IME Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_LOCALE_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for locale settings accessed through the locale feature pod.">
Locale Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_NETWORK_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for network settings accessed through the network feature pod.">
Network Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_NOTIFIER_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for notification settings accessed through the notification feature pod.">
Notification Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_USER_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for user settings accessed through the user avatar button.">
User Settings
</message>
<message name="IDS_ASH_QUICK_SETTINGS_BUBBLE_VPN_SETTINGS_ACCESSIBLE_DESCRIPTION" desc="The accessible description for VPN settings accessed through the VPN feature pod.">
VPN Settings
</message>
<message name="IDS_ASH_STATUS_TRAY_BRAILLE_DISPLAY_CONNECTED" desc="The message shown on a notification when a braille display is connected">
Braille display connected.
</message>
......
......@@ -6,8 +6,10 @@
#include "ash/accessibility/accessibility_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/accessibility/tray_accessibility.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ui/base/l10n/l10n_util.h"
namespace ash {
......@@ -30,6 +32,12 @@ views::View* UnifiedAccessibilityDetailedViewController::CreateView() {
return view_;
}
base::string16 UnifiedAccessibilityDetailedViewController::GetAccessibleName()
const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_A11Y_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
void UnifiedAccessibilityDetailedViewController::
OnAccessibilityStatusChanged() {
view_->OnAccessibilityStatusChanged();
......
......@@ -31,6 +31,7 @@ class UnifiedAccessibilityDetailedViewController
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
// AccessibilityObserver:
void OnAccessibilityStatusChanged() override;
......
......@@ -4,8 +4,10 @@
#include "ash/system/audio/unified_audio_detailed_view_controller.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/audio/audio_detailed_view.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ui/base/l10n/l10n_util.h"
using chromeos::CrasAudioHandler;
......@@ -29,6 +31,11 @@ views::View* UnifiedAudioDetailedViewController::CreateView() {
return view_;
}
base::string16 UnifiedAudioDetailedViewController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_AUDIO_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
void UnifiedAudioDetailedViewController::OnAudioNodesChanged() {
view_->Update();
}
......
......@@ -31,6 +31,7 @@ class UnifiedAudioDetailedViewController
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
// CrasAudioHandler::AudioObserver.
void OnAudioNodesChanged() override;
......
......@@ -10,11 +10,13 @@
#include "ash/session/session_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/bluetooth/bluetooth_detailed_view.h"
#include "ash/system/bluetooth/tray_bluetooth_helper.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ash/system/tray/system_tray_notifier.h"
#include "base/stl_util.h"
#include "ui/base/l10n/l10n_util.h"
using device::mojom::BluetoothSystem;
using device::mojom::BluetoothDeviceInfo;
......@@ -82,6 +84,12 @@ views::View* UnifiedBluetoothDetailedViewController::CreateView() {
return view_;
}
base::string16 UnifiedBluetoothDetailedViewController::GetAccessibleName()
const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_BLUETOOTH_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
void UnifiedBluetoothDetailedViewController::OnBluetoothSystemStateChanged() {
auto* helper = Shell::Get()->tray_bluetooth_helper();
const BluetoothSystem::State bluetooth_state = helper->GetBluetoothState();
......
......@@ -32,6 +32,7 @@ class UnifiedBluetoothDetailedViewController
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
// BluetoothObserver:
void OnBluetoothSystemStateChanged() override;
......
......@@ -5,8 +5,10 @@
#include "ash/system/cast/unified_cast_detailed_view_controller.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/cast/tray_cast.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ui/base/l10n/l10n_util.h"
namespace ash {
......@@ -24,4 +26,9 @@ views::View* UnifiedCastDetailedViewController::CreateView() {
return view_;
}
base::string16 UnifiedCastDetailedViewController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_CAST_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
} // namespace ash
......@@ -26,6 +26,7 @@ class UnifiedCastDetailedViewController : public DetailedViewController {
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
private:
const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
......
......@@ -7,9 +7,11 @@
#include "ash/accessibility/accessibility_controller_impl.h"
#include "ash/ime/ime_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/ime/tray_ime_chromeos.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ash/system/tray/system_tray_notifier.h"
#include "ui/base/l10n/l10n_util.h"
namespace ash {
......@@ -46,6 +48,11 @@ views::View* UnifiedIMEDetailedViewController::CreateView() {
return view_;
}
base::string16 UnifiedIMEDetailedViewController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_IME_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
void UnifiedIMEDetailedViewController::OnKeyboardSuppressionChanged(
bool suppressed) {
keyboard_suppressed_ = suppressed;
......
......@@ -33,6 +33,7 @@ class UnifiedIMEDetailedViewController : public DetailedViewController,
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
// VirtualKeyboardObserver:
void OnKeyboardSuppressionChanged(bool suppressed) override;
......
......@@ -4,9 +4,11 @@
#include "ash/system/locale/unified_locale_detailed_view_controller.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/locale/locale_detailed_view.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "base/logging.h"
#include "ui/base/l10n/l10n_util.h"
namespace ash {
......@@ -24,4 +26,9 @@ views::View* UnifiedLocaleDetailedViewController::CreateView() {
return view_;
}
base::string16 UnifiedLocaleDetailedViewController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_LOCALE_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
} // namespace ash
......@@ -28,6 +28,7 @@ class UnifiedLocaleDetailedViewController : public DetailedViewController {
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
private:
const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
......
......@@ -6,8 +6,10 @@
#include "ash/session/session_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/network/network_list_view.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ui/base/l10n/l10n_util.h"
namespace ash {
......@@ -29,4 +31,9 @@ views::View* UnifiedNetworkDetailedViewController::CreateView() {
return view_;
}
base::string16 UnifiedNetworkDetailedViewController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_NETWORK_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
} // namespace ash
......@@ -28,6 +28,7 @@ class UnifiedNetworkDetailedViewController : public DetailedViewController {
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
private:
const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
......
......@@ -6,8 +6,10 @@
#include "ash/session/session_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/network/vpn_list_view.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ui/base/l10n/l10n_util.h"
namespace ash {
......@@ -28,4 +30,9 @@ views::View* UnifiedVPNDetailedViewController::CreateView() {
return view_;
}
base::string16 UnifiedVPNDetailedViewController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_VPN_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
} // namespace ash
......@@ -28,6 +28,7 @@ class UnifiedVPNDetailedViewController : public DetailedViewController {
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
private:
const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
......
......@@ -5,6 +5,8 @@
#ifndef ASH_SYSTEM_UNIFIED_DETAILED_VIEW_CONTROLLER_H_
#define ASH_SYSTEM_UNIFIED_DETAILED_VIEW_CONTROLLER_H_
#include "base/strings/string16.h"
namespace views {
class View;
} // namespace views
......@@ -21,6 +23,7 @@ class DetailedViewController {
// Create the detailed view. The view will be owned by views hierarchy. The
// view will be always deleted after the controller is destructed.
virtual views::View* CreateView() = 0;
virtual base::string16 GetAccessibleName() const = 0;
};
} // namespace ash
......
......@@ -8,6 +8,7 @@
#include "ash/system/message_center/notifier_settings_view.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ash/system/tray/tray_detailed_view.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/message_center/message_center.h"
#include "ui/message_center/message_center_observer.h"
#include "ui/views/layout/box_layout.h"
......@@ -62,4 +63,9 @@ views::View* UnifiedNotifierSettingsController::CreateView() {
return new UnifiedNotifierSettingsView(detailed_view_delegate_.get());
}
base::string16 UnifiedNotifierSettingsController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_NOTIFIER_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
} // namespace ash
......@@ -24,6 +24,7 @@ class UnifiedNotifierSettingsController : public DetailedViewController {
// DetailedViewControllerBase:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
private:
const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
......
......@@ -31,6 +31,7 @@
#include "ash/system/unified/unified_slider_bubble_controller.h"
#include "ash/system/unified/unified_system_tray_bubble.h"
#include "ash/system/unified/unified_system_tray_model.h"
#include "ash/system/unified/unified_system_tray_view.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "chromeos/network/network_handler.h"
......@@ -388,6 +389,9 @@ base::string16 UnifiedSystemTray::GetAccessibleNameForBubble() {
}
base::string16 UnifiedSystemTray::GetAccessibleNameForQuickSettingsBubble() {
if (bubble_->unified_view()->IsDetailedViewShown())
return bubble_->unified_view()->GetDetailedViewAccessibleName();
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_ACCESSIBLE_DESCRIPTION);
}
......
......@@ -134,6 +134,10 @@ class ASH_EXPORT UnifiedSystemTrayController
return pagination_controller_.get();
}
DetailedViewController* detailed_view_controller() {
return detailed_view_controller_.get();
}
private:
friend class UnifiedSystemTrayControllerTest;
friend class UnifiedMessageCenterBubbleTest;
......
......@@ -17,6 +17,7 @@
#include "ash/system/message_center/unified_message_center_view.h"
#include "ash/system/tray/interacted_by_tap_recorder.h"
#include "ash/system/tray/tray_constants.h"
#include "ash/system/unified/detailed_view_controller.h"
#include "ash/system/unified/feature_pod_button.h"
#include "ash/system/unified/feature_pods_container_view.h"
#include "ash/system/unified/notification_hidden_view.h"
......@@ -510,6 +511,14 @@ int UnifiedSystemTrayView::GetVisibleFeaturePodCount() const {
return feature_pods_container_->GetVisibleCount();
}
base::string16 UnifiedSystemTrayView::GetDetailedViewAccessibleName() const {
return controller_->detailed_view_controller()->GetAccessibleName();
}
bool UnifiedSystemTrayView::IsDetailedViewShown() const {
return detailed_view_container_->GetVisible();
}
views::View* UnifiedSystemTrayView::GetFirstFocusableChild() {
FocusTraversable* focus_traversable = GetFocusTraversable();
views::View* focus_traversable_view = this;
......
......@@ -134,6 +134,13 @@ class ASH_EXPORT UnifiedSystemTrayView : public views::View,
// Returns the number of visible feature pods.
int GetVisibleFeaturePodCount() const;
// Get the accessible name for the currently shown detailed view.
base::string16 GetDetailedViewAccessibleName() const;
// Returns true if a detailed view is being shown in the tray. (e.g Bluetooth
// Settings).
bool IsDetailedViewShown() const;
// views::View:
void OnGestureEvent(ui::GestureEvent* event) override;
void ChildPreferredSizeChanged(views::View* child) override;
......@@ -159,6 +166,7 @@ class ASH_EXPORT UnifiedSystemTrayView : public views::View,
return notification_hidden_view_;
}
View* detailed_view() { return detailed_view_container_; }
View* detailed_view_for_testing() { return detailed_view_container_; }
private:
......
......@@ -7,8 +7,10 @@
#include "ash/multi_profile_uma.h"
#include "ash/session/session_controller_impl.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/unified/unified_system_tray_controller.h"
#include "ash/system/unified/user_chooser_view.h"
#include "ui/base/l10n/l10n_util.h"
namespace ash {
......@@ -73,4 +75,9 @@ views::View* UserChooserDetailedViewController::CreateView() {
return new UserChooserView(this);
}
base::string16 UserChooserDetailedViewController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_USER_SETTINGS_ACCESSIBLE_DESCRIPTION);
}
} // namespace ash
......@@ -34,6 +34,7 @@ class UserChooserDetailedViewController : public DetailedViewController {
// DetailedViewController:
views::View* CreateView() override;
base::string16 GetAccessibleName() const override;
private:
UnifiedSystemTrayController* tray_controller_;
......
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