[A11y] Magnify the full-screen magnifier dialog
Starts full-screen magnifier when the keyboard shortcut is pressed, which makes the dialog readable to people who use magnification. Updates the dialog's strings in this case per UX. To do this, made the accessibility dialog also take in a confirmation string parameter, and updated usages to use the previous value. This is done behind a flag, the default behavior is unchanged. Also cleans up FeatureWithDialog as most fields of the Dialog were unused except the pref name. Screenshots of dialog with feature flag enabled: 1. http://screenshot/Ax55jbt8cNLdoAe 2. http://screenshot/3Xtjf2TdowtZLj7 (when no zoom in/out accelerators are set) Bug: b/335728537 Test: New, manual Change-Id: I69614afa03a6161516acbe3c4126d36d0f79651d AX-Relnotes: N/A Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5606675 Commit-Queue: Katie Dektar <katie@chromium.org> Reviewed-by: Jimmy Gong <jimmyxgong@chromium.org> Cr-Commit-Position: refs/heads/main@{#1313172}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
22e726781a
commit
91053623da
ash
accelerators
accessibility
ash_strings.grdash_strings_grd
chrome/browser
accessibility
ash
accessibility
ui/strings
@ -6,6 +6,7 @@
|
||||
|
||||
#include <optional>
|
||||
|
||||
#include "ash/accelerators/accelerator_lookup.h"
|
||||
#include "ash/accelerators/accelerator_notifications.h"
|
||||
#include "ash/accessibility/accessibility_controller.h"
|
||||
#include "ash/accessibility/magnifier/docked_magnifier_controller.h"
|
||||
@ -29,6 +30,7 @@
|
||||
#include "ash/keyboard/keyboard_controller_impl.h"
|
||||
#include "ash/media/media_controller_impl.h"
|
||||
#include "ash/picker/picker_controller.h"
|
||||
#include "ash/public/cpp/accelerator_actions.h"
|
||||
#include "ash/public/cpp/app_types_util.h"
|
||||
#include "ash/public/cpp/assistant/assistant_state.h"
|
||||
#include "ash/public/cpp/new_window_delegate.h"
|
||||
@ -80,6 +82,7 @@
|
||||
#include "ash/wm/window_state.h"
|
||||
#include "ash/wm/window_util.h"
|
||||
#include "ash/wm/wm_event.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/functional/callback_helpers.h"
|
||||
#include "base/metrics/histogram_functions.h"
|
||||
#include "base/metrics/histogram_macros.h"
|
||||
@ -1171,6 +1174,7 @@ void RotateScreen() {
|
||||
Shell::Get()->accessibility_controller()->ShowConfirmationDialog(
|
||||
l10n_util::GetStringUTF16(IDS_ASH_ROTATE_SCREEN_TITLE),
|
||||
l10n_util::GetStringUTF16(IDS_ASH_ROTATE_SCREEN_BODY),
|
||||
l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON),
|
||||
l10n_util::GetStringUTF16(IDS_APP_CANCEL),
|
||||
base::BindOnce(&OnRotationDialogAccepted),
|
||||
base::BindOnce(&OnRotationDialogCancelled),
|
||||
@ -1451,6 +1455,7 @@ void ToggleDockedMagnifier() {
|
||||
accessibility_controller->ShowConfirmationDialog(
|
||||
l10n_util::GetStringUTF16(IDS_ASH_DOCKED_MAGNIFIER_TITLE),
|
||||
l10n_util::GetStringUTF16(IDS_ASH_DOCKED_MAGNIFIER_BODY),
|
||||
l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON),
|
||||
l10n_util::GetStringUTF16(IDS_APP_CANCEL), base::BindOnce([]() {
|
||||
Shell::Get()
|
||||
->accessibility_controller()
|
||||
@ -1516,18 +1521,60 @@ void ToggleFullscreenMagnifier() {
|
||||
accessibility_controller->fullscreen_magnifier().WasDialogAccepted();
|
||||
|
||||
if (!current_enabled && !dialog_ever_accepted) {
|
||||
// Enable fullscreen magnifier before showing the dialog, so that users
|
||||
// can see the dialog more clearly.
|
||||
bool magnify_dialog =
|
||||
::features::IsAccessibilityMagnifyAcceleratorDialogEnabled();
|
||||
int title = IDS_ASH_SCREEN_MAGNIFIER_TITLE;
|
||||
std::u16string body =
|
||||
l10n_util::GetStringUTF16(IDS_ASH_SCREEN_MAGNIFIER_BODY);
|
||||
int cancel = IDS_APP_CANCEL;
|
||||
int confirm = IDS_ASH_CONTINUE_BUTTON;
|
||||
if (magnify_dialog) {
|
||||
Shell::Get()->fullscreen_magnifier_controller()->SetEnabled(true);
|
||||
title = IDS_ASH_SCREEN_MAGNIFIER_DIALOG_TITLE;
|
||||
cancel = IDS_ASH_SCREEN_MAGNIFIER_DIALOG_TURN_OFF_BUTTON;
|
||||
confirm = IDS_ASH_SCREEN_MAGNIFIER_DIALOG_KEEP_ON_BUTTON;
|
||||
|
||||
std::vector<AcceleratorLookup::AcceleratorDetails> zoom_in_details =
|
||||
Shell::Get()->accelerator_lookup()->GetAvailableAcceleratorsForAction(
|
||||
AcceleratorAction::kMagnifierZoomIn);
|
||||
std::vector<AcceleratorLookup::AcceleratorDetails> zoom_out_details =
|
||||
Shell::Get()->accelerator_lookup()->GetAvailableAcceleratorsForAction(
|
||||
AcceleratorAction::kMagnifierZoomOut);
|
||||
if (zoom_in_details.empty() || zoom_out_details.empty()) {
|
||||
body = l10n_util::GetStringUTF16(IDS_ASH_SCREEN_MAGNIFIER_DIALOG_BODY);
|
||||
} else {
|
||||
std::u16string zoom_in_text =
|
||||
AcceleratorLookup::GetAcceleratorDetailsText(zoom_in_details[0]);
|
||||
std::u16string zoom_out_text =
|
||||
AcceleratorLookup::GetAcceleratorDetailsText(zoom_out_details[0]);
|
||||
body = l10n_util::GetStringFUTF16(
|
||||
IDS_ASH_SCREEN_MAGNIFIER_DIALOG_BODY_DYNAMIC, zoom_in_text,
|
||||
zoom_out_text);
|
||||
}
|
||||
}
|
||||
accessibility_controller->ShowConfirmationDialog(
|
||||
l10n_util::GetStringUTF16(IDS_ASH_SCREEN_MAGNIFIER_TITLE),
|
||||
l10n_util::GetStringUTF16(IDS_ASH_SCREEN_MAGNIFIER_BODY),
|
||||
l10n_util::GetStringUTF16(IDS_APP_CANCEL), base::BindOnce([]() {
|
||||
l10n_util::GetStringUTF16(title), body,
|
||||
l10n_util::GetStringUTF16(confirm), l10n_util::GetStringUTF16(cancel),
|
||||
base::BindOnce([]() {
|
||||
Shell::Get()
|
||||
->accessibility_controller()
|
||||
->fullscreen_magnifier()
|
||||
.SetDialogAccepted();
|
||||
SetFullscreenMagnifierEnabled(true);
|
||||
}),
|
||||
/*on_cancel_callback=*/base::DoNothing(),
|
||||
/*on_close_callback=*/base::DoNothing());
|
||||
/*on_cancel_callback=*/base::BindOnce([]() {
|
||||
Shell::Get()->fullscreen_magnifier_controller()->SetEnabled(false);
|
||||
}),
|
||||
/*on_close_callback=*/base::BindOnce([]() {
|
||||
Shell::Get()->fullscreen_magnifier_controller()->SetEnabled(false);
|
||||
}));
|
||||
// Center the magnifier on the new dialog. This is done manually because the
|
||||
// dialog focus may change before the AccessibilityCommon extension has
|
||||
// loaded and begun listening for focus events.
|
||||
magnification_controller->HandleMoveMagnifierToRect(
|
||||
accessibility_controller->GetConfirmationDialogBoundsInScreen());
|
||||
} else {
|
||||
SetFullscreenMagnifierEnabled(!current_enabled);
|
||||
}
|
||||
@ -1565,6 +1612,7 @@ void ToggleHighContrast() {
|
||||
controller->ShowConfirmationDialog(
|
||||
l10n_util::GetStringUTF16(IDS_ASH_HIGH_CONTRAST_TITLE),
|
||||
l10n_util::GetStringUTF16(IDS_ASH_HIGH_CONTRAST_BODY),
|
||||
l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON),
|
||||
l10n_util::GetStringUTF16(IDS_APP_CANCEL), base::BindOnce([]() {
|
||||
Shell::Get()
|
||||
->accessibility_controller()
|
||||
|
@ -2932,10 +2932,15 @@ class MagnifiersAcceleratorsTester : public AcceleratorControllerTest {
|
||||
|
||||
void SetUp() override {
|
||||
AcceleratorControllerTest::SetUp();
|
||||
feature_list_.InitAndEnableFeature(
|
||||
::features::kAccessibilityMagnifyAcceleratorDialog);
|
||||
|
||||
// Create user session and simulate its login.
|
||||
SimulateUserLogin(kUserEmail);
|
||||
}
|
||||
|
||||
protected:
|
||||
base::test::ScopedFeatureList feature_list_;
|
||||
};
|
||||
|
||||
// TODO (afakhry): Remove this class after refactoring MagnificationManager.
|
||||
@ -2984,6 +2989,22 @@ TEST_F(MagnifiersAcceleratorsTester, TestToggleFullscreenMagnifier) {
|
||||
accessibility_controller->fullscreen_magnifier().WasDialogAccepted());
|
||||
EXPECT_TRUE(ProcessInController(fullscreen_magnifier_accelerator));
|
||||
EXPECT_TRUE(IsConfirmationDialogOpen());
|
||||
// Magnifier is enabled in order to let users better see the dialog.
|
||||
EXPECT_TRUE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
EXPECT_FALSE(docked_magnifier_controller()->GetEnabled());
|
||||
|
||||
CancelConfirmationDialog();
|
||||
base::RunLoop().RunUntilIdle();
|
||||
EXPECT_FALSE(
|
||||
accessibility_controller->fullscreen_magnifier().WasDialogAccepted());
|
||||
// Magnifier is disabled when the dialog is cancelled.
|
||||
EXPECT_FALSE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
|
||||
// Open the dialog again.
|
||||
EXPECT_TRUE(ProcessInController(fullscreen_magnifier_accelerator));
|
||||
EXPECT_TRUE(IsConfirmationDialogOpen());
|
||||
EXPECT_TRUE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
|
||||
AcceptConfirmationDialog();
|
||||
base::RunLoop().RunUntilIdle();
|
||||
EXPECT_FALSE(IsConfirmationDialogOpen());
|
||||
@ -3051,6 +3072,91 @@ TEST_F(MagnifiersAcceleratorsTester, TestToggleDockedMagnifier) {
|
||||
RemoveAllNotifications();
|
||||
}
|
||||
|
||||
class MagnifiersAcceleratorsMagnifyAcceleratorDialogDisabledTest
|
||||
: public MagnifiersAcceleratorsTester {
|
||||
public:
|
||||
MagnifiersAcceleratorsMagnifyAcceleratorDialogDisabledTest() = default;
|
||||
MagnifiersAcceleratorsMagnifyAcceleratorDialogDisabledTest(
|
||||
const MagnifiersAcceleratorsMagnifyAcceleratorDialogDisabledTest&) =
|
||||
delete;
|
||||
MagnifiersAcceleratorsMagnifyAcceleratorDialogDisabledTest& operator=(
|
||||
const MagnifiersAcceleratorsMagnifyAcceleratorDialogDisabledTest&) =
|
||||
delete;
|
||||
~MagnifiersAcceleratorsMagnifyAcceleratorDialogDisabledTest() override =
|
||||
default;
|
||||
|
||||
void SetUp() override {
|
||||
AcceleratorControllerTest::SetUp();
|
||||
feature_list_.InitAndDisableFeature(
|
||||
::features::kAccessibilityMagnifyAcceleratorDialog);
|
||||
|
||||
// Create user session and simulate its login.
|
||||
SimulateUserLogin(kUserEmail);
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(MagnifiersAcceleratorsMagnifyAcceleratorDialogDisabledTest,
|
||||
TestToggleFullscreenMagnifier) {
|
||||
FakeMagnificationManager manager;
|
||||
manager.SetPrefs(user_pref_service());
|
||||
EXPECT_FALSE(docked_magnifier_controller()->GetEnabled());
|
||||
EXPECT_FALSE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
EXPECT_FALSE(IsConfirmationDialogOpen());
|
||||
|
||||
AccessibilityController* accessibility_controller =
|
||||
Shell::Get()->accessibility_controller();
|
||||
// Toggle the fullscreen magnifier on/off, dialog should be shown on first use
|
||||
// of accelerator.
|
||||
const ui::Accelerator fullscreen_magnifier_accelerator(
|
||||
ui::VKEY_M, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN);
|
||||
EXPECT_FALSE(
|
||||
accessibility_controller->fullscreen_magnifier().WasDialogAccepted());
|
||||
EXPECT_TRUE(ProcessInController(fullscreen_magnifier_accelerator));
|
||||
EXPECT_TRUE(IsConfirmationDialogOpen());
|
||||
// Magnifier is not enabled when feature is not on.
|
||||
EXPECT_FALSE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
EXPECT_FALSE(docked_magnifier_controller()->GetEnabled());
|
||||
|
||||
CancelConfirmationDialog();
|
||||
base::RunLoop().RunUntilIdle();
|
||||
EXPECT_FALSE(
|
||||
accessibility_controller->fullscreen_magnifier().WasDialogAccepted());
|
||||
EXPECT_FALSE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
|
||||
// Open the dialog again.
|
||||
EXPECT_TRUE(ProcessInController(fullscreen_magnifier_accelerator));
|
||||
EXPECT_TRUE(IsConfirmationDialogOpen());
|
||||
EXPECT_FALSE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
|
||||
AcceptConfirmationDialog();
|
||||
base::RunLoop().RunUntilIdle();
|
||||
EXPECT_FALSE(IsConfirmationDialogOpen());
|
||||
EXPECT_FALSE(docked_magnifier_controller()->GetEnabled());
|
||||
EXPECT_TRUE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
EXPECT_TRUE(ContainsFullscreenMagnifierNotification());
|
||||
EXPECT_FALSE(
|
||||
IsNotificationPinned(kFullscreenMagnifierToggleAccelNotificationId));
|
||||
|
||||
EXPECT_TRUE(ProcessInController(fullscreen_magnifier_accelerator));
|
||||
EXPECT_FALSE(docked_magnifier_controller()->GetEnabled());
|
||||
EXPECT_FALSE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
EXPECT_TRUE(
|
||||
accessibility_controller->fullscreen_magnifier().WasDialogAccepted());
|
||||
EXPECT_FALSE(IsConfirmationDialogOpen());
|
||||
EXPECT_FALSE(ContainsFullscreenMagnifierNotification());
|
||||
|
||||
// Dialog will not be shown the second time the accelerator is used.
|
||||
EXPECT_TRUE(ProcessInController(fullscreen_magnifier_accelerator));
|
||||
EXPECT_FALSE(IsConfirmationDialogOpen());
|
||||
EXPECT_TRUE(
|
||||
accessibility_controller->fullscreen_magnifier().WasDialogAccepted());
|
||||
EXPECT_FALSE(docked_magnifier_controller()->GetEnabled());
|
||||
EXPECT_TRUE(fullscreen_magnifier_controller()->IsEnabled());
|
||||
EXPECT_TRUE(ContainsFullscreenMagnifierNotification());
|
||||
|
||||
RemoveAllNotifications();
|
||||
}
|
||||
|
||||
class AccessibilityAcceleratorTester : public MagnifiersAcceleratorsTester {
|
||||
public:
|
||||
AccessibilityAcceleratorTester() = default;
|
||||
|
@ -187,14 +187,11 @@ const FeatureData kFeatures[] = {
|
||||
// them.
|
||||
const FeatureDialogData kFeatureDialogs[] = {
|
||||
{FeatureType::kFullscreenMagnifier,
|
||||
prefs::kScreenMagnifierAcceleratorDialogHasBeenAccepted,
|
||||
IDS_ASH_SCREEN_MAGNIFIER_TITLE, IDS_ASH_SCREEN_MAGNIFIER_BODY},
|
||||
prefs::kScreenMagnifierAcceleratorDialogHasBeenAccepted},
|
||||
{FeatureType::kDockedMagnifier,
|
||||
prefs::kDockedMagnifierAcceleratorDialogHasBeenAccepted,
|
||||
IDS_ASH_DOCKED_MAGNIFIER_TITLE, IDS_ASH_DOCKED_MAGNIFIER_BODY},
|
||||
prefs::kDockedMagnifierAcceleratorDialogHasBeenAccepted},
|
||||
{FeatureType::kHighContrast,
|
||||
prefs::kHighContrastAcceleratorDialogHasBeenAccepted,
|
||||
IDS_ASH_HIGH_CONTRAST_TITLE, IDS_ASH_HIGH_CONTRAST_BODY}};
|
||||
prefs::kHighContrastAcceleratorDialogHasBeenAccepted}};
|
||||
|
||||
constexpr char kNotificationId[] = "chrome://settings/accessibility";
|
||||
constexpr char kNotifierAccessibility[] = "ash.accessibility";
|
||||
@ -1035,7 +1032,7 @@ AccessibilityController::FeatureWithDialog::FeatureWithDialog(
|
||||
const gfx::VectorIcon* icon,
|
||||
const int name_resource_id,
|
||||
const bool toggleable_in_quicksettings,
|
||||
const Dialog& dialog,
|
||||
const std::string& dialog_pref,
|
||||
AccessibilityController* controller)
|
||||
: AccessibilityController::Feature(type,
|
||||
pref_name,
|
||||
@ -1043,7 +1040,7 @@ AccessibilityController::FeatureWithDialog::FeatureWithDialog(
|
||||
name_resource_id,
|
||||
toggleable_in_quicksettings,
|
||||
controller),
|
||||
dialog_(dialog) {}
|
||||
dialog_pref_(dialog_pref) {}
|
||||
AccessibilityController::FeatureWithDialog::~FeatureWithDialog() = default;
|
||||
|
||||
void AccessibilityController::FeatureWithDialog::SetDialogAccepted() {
|
||||
@ -1051,14 +1048,14 @@ void AccessibilityController::FeatureWithDialog::SetDialogAccepted() {
|
||||
if (!prefs) {
|
||||
return;
|
||||
}
|
||||
prefs->SetBoolean(dialog_.pref_name, true);
|
||||
prefs->SetBoolean(dialog_pref_, true);
|
||||
prefs->CommitPendingWrite();
|
||||
}
|
||||
|
||||
bool AccessibilityController::FeatureWithDialog::WasDialogAccepted() const {
|
||||
PrefService* prefs = owner_->active_user_prefs_;
|
||||
DCHECK(prefs);
|
||||
return prefs->GetBoolean(dialog_.pref_name);
|
||||
return prefs->GetBoolean(dialog_pref_);
|
||||
}
|
||||
|
||||
// static
|
||||
@ -1089,10 +1086,9 @@ AccessibilityController::~AccessibilityController() {
|
||||
|
||||
void AccessibilityController::CreateAccessibilityFeatures() {
|
||||
// First, build all features with dialog.
|
||||
std::map<FeatureType, Dialog> dialogs;
|
||||
std::map<FeatureType, std::string> dialogs;
|
||||
for (auto dialog_data : kFeatureDialogs) {
|
||||
dialogs[dialog_data.type] = {dialog_data.pref, dialog_data.title,
|
||||
dialog_data.body};
|
||||
dialogs[dialog_data.type] = dialog_data.pref;
|
||||
}
|
||||
for (auto feature_data : kFeatures) {
|
||||
size_t feature_index = static_cast<size_t>(feature_data.type);
|
||||
@ -2119,7 +2115,8 @@ void AccessibilityController::ShowDictationKeyboardDialog() {
|
||||
IDS_ASH_DICTATION_KEYBOARD_DIALOG_DESCRIPTION_SODA_NOT_AVAILABLE,
|
||||
replacements, nullptr);
|
||||
ShowConfirmationDialog(
|
||||
title, description, l10n_util::GetStringUTF16(IDS_APP_CANCEL),
|
||||
title, description, l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON),
|
||||
l10n_util::GetStringUTF16(IDS_APP_CANCEL),
|
||||
base::BindOnce(
|
||||
&AccessibilityController::OnDictationKeyboardDialogAccepted,
|
||||
GetWeakPtr()),
|
||||
@ -2161,7 +2158,8 @@ void AccessibilityController::ShowSelectToSpeakKeyboardDialog() {
|
||||
std::u16string description = l10n_util::GetStringFUTF16(
|
||||
IDS_ASH_SELECT_TO_SPEAK_KEYBOARD_DIALOG_DESCRIPTION, modifier_key);
|
||||
ShowConfirmationDialog(
|
||||
title, description, l10n_util::GetStringUTF16(IDS_APP_CANCEL),
|
||||
title, description, l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON),
|
||||
l10n_util::GetStringUTF16(IDS_APP_CANCEL),
|
||||
base::BindOnce(
|
||||
&AccessibilityController::OnSelectToSpeakKeyboardDialogAccepted,
|
||||
GetWeakPtr()),
|
||||
@ -3118,6 +3116,7 @@ void AccessibilityController::EnableChromeVoxVolumeSlideGesture() {
|
||||
void AccessibilityController::ShowConfirmationDialog(
|
||||
const std::u16string& title,
|
||||
const std::u16string& description,
|
||||
const std::u16string& confirm_name,
|
||||
const std::u16string& cancel_name,
|
||||
base::OnceClosure on_accept_callback,
|
||||
base::OnceClosure on_cancel_callback,
|
||||
@ -3131,8 +3130,9 @@ void AccessibilityController::ShowConfirmationDialog(
|
||||
return;
|
||||
}
|
||||
auto* dialog = new AccessibilityConfirmationDialog(
|
||||
title, description, cancel_name, std::move(on_accept_callback),
|
||||
std::move(on_cancel_callback), std::move(on_close_callback));
|
||||
title, description, confirm_name, cancel_name,
|
||||
std::move(on_accept_callback), std::move(on_cancel_callback),
|
||||
std::move(on_close_callback));
|
||||
// Save the dialog so it doesn't go out of scope before it is
|
||||
// used and closed.
|
||||
confirmation_dialog_ = dialog->GetWeakPtr();
|
||||
@ -3141,6 +3141,13 @@ void AccessibilityController::ShowConfirmationDialog(
|
||||
}
|
||||
}
|
||||
|
||||
gfx::Rect AccessibilityController::GetConfirmationDialogBoundsInScreen() {
|
||||
if (!confirmation_dialog_.get()) {
|
||||
return gfx::Rect();
|
||||
}
|
||||
return confirmation_dialog_.get()->GetWidget()->GetWindowBoundsInScreen();
|
||||
}
|
||||
|
||||
void AccessibilityController::
|
||||
UpdateDictationButtonOnSpeechRecognitionDownloadChanged(
|
||||
int download_progress) {
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
#include "ash/accessibility/a11y_feature_type.h"
|
||||
#include "ash/accessibility/accessibility_notification_controller.h"
|
||||
@ -171,17 +172,6 @@ class ASH_EXPORT AccessibilityController : public SessionObserver,
|
||||
const raw_ptr<AccessibilityController> owner_;
|
||||
};
|
||||
|
||||
// Helper struct to store information about a11y dialog -- pref name, resource
|
||||
// ids for title and body. Also stores the information whether this dialog is
|
||||
// mandatory for every SetEnabled call.
|
||||
struct Dialog {
|
||||
std::string pref_name;
|
||||
int title_resource_id;
|
||||
int body_resource_id;
|
||||
// Whether this dialog should be shown on every SetEnabled action.
|
||||
bool mandatory;
|
||||
};
|
||||
|
||||
// Some features have confirmation dialog associated with them.
|
||||
// Dialog can be applied for all SetEnabled() actions, or only to ones
|
||||
// associated with accelerators.
|
||||
@ -192,7 +182,7 @@ class ASH_EXPORT AccessibilityController : public SessionObserver,
|
||||
const gfx::VectorIcon* icon,
|
||||
const int name_resource_id,
|
||||
const bool toggleable_in_quicksettings,
|
||||
const Dialog& dialog,
|
||||
const std::string& dialog_pref_name,
|
||||
AccessibilityController* controller);
|
||||
~FeatureWithDialog() override;
|
||||
|
||||
@ -200,7 +190,7 @@ class ASH_EXPORT AccessibilityController : public SessionObserver,
|
||||
bool WasDialogAccepted() const;
|
||||
|
||||
private:
|
||||
Dialog dialog_;
|
||||
const std::string dialog_pref_;
|
||||
};
|
||||
|
||||
// Contains data used to give an accessibility-related notification.
|
||||
@ -593,10 +583,12 @@ class ASH_EXPORT AccessibilityController : public SessionObserver,
|
||||
// voices.
|
||||
void ShowConfirmationDialog(const std::u16string& title,
|
||||
const std::u16string& description,
|
||||
const std::u16string& confirm_name,
|
||||
const std::u16string& cancel_name,
|
||||
base::OnceClosure on_accept_callback,
|
||||
base::OnceClosure on_cancel_callback,
|
||||
base::OnceClosure on_close_callback);
|
||||
gfx::Rect GetConfirmationDialogBoundsInScreen();
|
||||
|
||||
// SessionObserver:
|
||||
void OnSigninScreenPrefServiceInitialized(PrefService* prefs) override;
|
||||
|
@ -25,14 +25,14 @@ namespace ash {
|
||||
AccessibilityConfirmationDialog::AccessibilityConfirmationDialog(
|
||||
const std::u16string& window_title_text,
|
||||
const std::u16string& dialog_text,
|
||||
const std::u16string& confirm_text,
|
||||
const std::u16string& cancel_text,
|
||||
base::OnceClosure on_accept_callback,
|
||||
base::OnceClosure on_cancel_callback,
|
||||
base::OnceClosure on_close_callback) {
|
||||
SetModalType(ui::MODAL_TYPE_SYSTEM);
|
||||
SetTitle(window_title_text);
|
||||
SetButtonLabel(ui::DIALOG_BUTTON_OK,
|
||||
l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON));
|
||||
SetButtonLabel(ui::DIALOG_BUTTON_OK, confirm_text);
|
||||
SetButtonLabel(ui::DIALOG_BUTTON_CANCEL, cancel_text);
|
||||
SetAcceptCallback(std::move(on_accept_callback));
|
||||
SetCancelCallback(std::move(on_cancel_callback));
|
||||
|
@ -19,6 +19,7 @@ class AccessibilityConfirmationDialog : public views::DialogDelegateView {
|
||||
public:
|
||||
AccessibilityConfirmationDialog(const std::u16string& window_title_text,
|
||||
const std::u16string& dialog_text,
|
||||
const std::u16string& confirm_text,
|
||||
const std::u16string& cancel_text,
|
||||
base::OnceClosure on_accept_callback,
|
||||
base::OnceClosure on_cancel_callback,
|
||||
|
@ -3923,6 +3923,21 @@ No devices connected.
|
||||
<message name="IDS_ASH_SCREEN_MAGNIFIER_BODY" desc="The text for the screen magnifier dialog.">
|
||||
You pressed the keyboard shortcut for the full-screen magnifier. Do you want to turn it on?
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_MAGNIFIER_DIALOG_TITLE" desc="Dialog title when screen magnifier is enabled.">
|
||||
Full-screen magnifier is on
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_MAGNIFIER_DIALOG_BODY" desc="The text for the screen magnifier dialog, explaining how to move around with keyboard shortcuts.">
|
||||
You pressed the keyboard shortcut for the full-screen magnifier. Use ctrl + alt + arrows to move around the zoomed in view.
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_MAGNIFIER_DIALOG_BODY_DYNAMIC" desc="The text for the screen magnifier dialog, explaining how to zoom in/out and move around with keyboard shortcuts.">
|
||||
You pressed the keyboard shortcut for the full-screen magnifier. Use <ph name="zoom_in_accelerator">$1<ex>ctrl+alt+brightness up</ex></ph> to zoom in and <ph name="zoom_out_accelerator">$2<ex>ctrl+alt+brightness down</ex></ph> to zoom out. Use ctrl+alt+arrows to move around the zoomed in view.
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_MAGNIFIER_DIALOG_TURN_OFF_BUTTON" desc="Dialog cancel button for when screen magnifier is enabled by keyboard shortcut.">
|
||||
Turn off
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_MAGNIFIER_DIALOG_KEEP_ON_BUTTON" desc="Dialog confirm button for when screen magnifier is enabled by keyboard shortcut.">
|
||||
Keep it on
|
||||
</message>
|
||||
<message name="IDS_ASH_ROTATE_SCREEN_TITLE" desc="Dialog title for when the screen has been rotated.">
|
||||
Rotate Screen
|
||||
</message>
|
||||
|
@ -0,0 +1 @@
|
||||
c2503bb93d3b7df05f27c6d33eab6907cb4337e1
|
@ -0,0 +1 @@
|
||||
5aa78557ea7da562903f23aea0dd854ae881fcf3
|
@ -0,0 +1 @@
|
||||
5aa78557ea7da562903f23aea0dd854ae881fcf3
|
@ -0,0 +1 @@
|
||||
5aa78557ea7da562903f23aea0dd854ae881fcf3
|
@ -0,0 +1 @@
|
||||
5aa78557ea7da562903f23aea0dd854ae881fcf3
|
@ -891,11 +891,12 @@ AccessibilityPrivateShowConfirmationDialogFunction::Run() {
|
||||
|
||||
std::u16string title = base::UTF8ToUTF16(params->title);
|
||||
std::u16string description = base::UTF8ToUTF16(params->description);
|
||||
std::u16string confirm = l10n_util::GetStringUTF16(IDS_APP_CONTINUE);
|
||||
std::u16string cancel_name =
|
||||
params->cancel_name ? base::UTF8ToUTF16(params->cancel_name.value())
|
||||
: l10n_util::GetStringUTF16(IDS_APP_CANCEL);
|
||||
ash::AccessibilityController::Get()->ShowConfirmationDialog(
|
||||
title, description, cancel_name,
|
||||
title, description, confirm, cancel_name,
|
||||
base::BindOnce(
|
||||
&AccessibilityPrivateShowConfirmationDialogFunction::OnDialogResult,
|
||||
this, /* confirmed */ true),
|
||||
|
@ -2589,7 +2589,8 @@ void AccessibilityManager::ShowNetworkDictationDialog() {
|
||||
const std::u16string text =
|
||||
l10n_util::GetStringUTF16(IDS_ACCESSIBILITY_DICTATION_CONFIRMATION_TEXT);
|
||||
AccessibilityController::Get()->ShowConfirmationDialog(
|
||||
title, text, l10n_util::GetStringUTF16(IDS_APP_CANCEL),
|
||||
title, text, l10n_util::GetStringUTF16(IDS_APP_CONTINUE),
|
||||
l10n_util::GetStringUTF16(IDS_APP_CANCEL),
|
||||
base::BindOnce(&AccessibilityManager::OnNetworkDictationDialogAccepted,
|
||||
base::Unretained(this)),
|
||||
base::BindOnce(&AccessibilityManager::OnNetworkDictationDialogDismissed,
|
||||
|
@ -50,6 +50,7 @@ void UserInterfaceImpl::ShowConfirmationDialog(
|
||||
show_confirmation_dialog_callback_ = std::move(callback);
|
||||
ash::AccessibilityController::Get()->ShowConfirmationDialog(
|
||||
base::UTF8ToUTF16(title), base::UTF8ToUTF16(description),
|
||||
l10n_util::GetStringUTF16(IDS_APP_CONTINUE),
|
||||
cancel_name ? base::UTF8ToUTF16(cancel_name.value())
|
||||
: l10n_util::GetStringUTF16(IDS_APP_CANCEL),
|
||||
base::BindOnce(&UserInterfaceImpl::OnDialogResult,
|
||||
|
@ -660,6 +660,9 @@ need to be translated for each locale.-->
|
||||
<message name="IDS_APP_CLOSE" desc="A generic term for Close on buttons and menus.">
|
||||
Close
|
||||
</message>
|
||||
<message name="IDS_APP_CONTINUE" desc="A generic term for Continue on buttons.">
|
||||
Continue
|
||||
</message>
|
||||
|
||||
<!-- Key names -->
|
||||
<message name="IDS_APP_ESC_KEY" desc="Escape key">
|
||||
|
1
ui/strings/ui_strings_grd/IDS_APP_CONTINUE.png.sha1
Normal file
1
ui/strings/ui_strings_grd/IDS_APP_CONTINUE.png.sha1
Normal file
@ -0,0 +1 @@
|
||||
9a4ddcee1bcec7f7da9377975c765fe3dbd0217b
|
Reference in New Issue
Block a user