capture_selfie_cam: More a11y alerts
- Add a11y alert on selected camera disconnected and reconnected. - Remove the camera on status alert on entering capture mode session. - Trigger the alert when the selected camera changes instead. Bug: 1302690 Change-Id: I4241412480d28e59d740ad37f34163db93758c92 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3590419 Reviewed-by: Ahmed Fakhry <afakhry@chromium.org> Commit-Queue: Min Chen <minch@chromium.org> Cr-Commit-Position: refs/heads/main@{#994254}
This commit is contained in:
@ -4016,6 +4016,15 @@ Here are some things you can try to get started.
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_CAMERA_PREVIEW_HIDDEN" desc="Alert spoken by screen readers when camera preview is hidden.">
|
||||
Camera preview hidden
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_CAMERA_DISCONNECTED" desc="Alert spoken by screen readers when the selected camera gets disconnected.">
|
||||
Camera lost, trying to reconnect.
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_CAMERA_RECONNECTED" desc="Alert spoken by screen readers when the selected camera gets reconnected.">
|
||||
Camera reconnected.
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_SELECTED_CAMERA_CHANGED" desc="Alert spoken by screen readers when the selected camera gets changed.">
|
||||
Camera input set to <ph name="CAMERA_NAME">$1</ph>.
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_NAVIGATION_ALERT_RECORD_MICROPHONE" desc="Alert spoken by screen readers when user tabs to record microphone setting.">
|
||||
Record microphone <ph name="CURRENT_STATE">$1<ex>off</ex></ph>, Press enter to turn microphone recording <ph name="NEW_STATE">$2<ex>on</ex></ph>
|
||||
</message>
|
||||
@ -4028,9 +4037,6 @@ Here are some things you can try to get started.
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_ALERT_OPEN" desc="Alert spoken by screen readers on entering capture mode.">
|
||||
Capture Mode, default is <ph name="SOURCE">$1<ex>partial</ex></ph> <ph name="TYPE">$2<ex>screenshot</ex></ph>. Press tab for keyboard navigation.
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_ALERT_OPEN_WITH_CAMERA" desc="Alert spoken by screen readers on entering capture mode with camera preview shown.">
|
||||
Capture Mode, default is <ph name="SOURCE">$1<ex>partial</ex></ph> <ph name="TYPE">$2<ex>screenshot</ex></ph>. Camera input set to <ph name="CAMERA_NAME">$3</ph>, preview on. Press tab for keyboard navigation.
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_SOURCE_FULLSCREEN" desc="Spoken by screen readers for the open alert with the source as full screen.">
|
||||
full screen
|
||||
</message>
|
||||
|
@ -1 +0,0 @@
|
||||
46d451bb6e6042d0074537840127d1e083c8cfcb
|
@ -0,0 +1 @@
|
||||
f32b2e963acc9fb25c5fe4e177a3a01a3d360a8a
|
@ -0,0 +1 @@
|
||||
a971150e240fa0ac3563cef137775f0bf7cc0adc
|
@ -0,0 +1 @@
|
||||
83d5606a481fb448ddf7ac8bfc9a0baafbe67100
|
@ -36,6 +36,7 @@
|
||||
#include "base/time/time.h"
|
||||
#include "media/capture/video/video_capture_device_descriptor.h"
|
||||
#include "ui/aura/window_targeter.h"
|
||||
#include "ui/base/l10n/l10n_util.h"
|
||||
#include "ui/compositor/layer.h"
|
||||
#include "ui/display/screen.h"
|
||||
#include "ui/gfx/animation/tween.h"
|
||||
@ -406,8 +407,10 @@ std::string CaptureModeCameraController::GetDisplayNameOfSelectedCamera()
|
||||
if (selected_camera_.is_valid()) {
|
||||
const CameraInfo* camera_info =
|
||||
GetCameraInfoById(selected_camera_, available_cameras_);
|
||||
DCHECK(camera_info);
|
||||
return camera_info->display_name;
|
||||
// `camera_info` might not exist in the test even though the
|
||||
// `selected_camera_` is valid.
|
||||
if (camera_info)
|
||||
return camera_info->display_name;
|
||||
}
|
||||
return std::string();
|
||||
}
|
||||
@ -429,6 +432,13 @@ void CaptureModeCameraController::SetSelectedCamera(CameraId camera_id) {
|
||||
for (auto& observer : observers_)
|
||||
observer.OnSelectedCameraChanged(selected_camera_);
|
||||
|
||||
const std::string camera_display_name = GetDisplayNameOfSelectedCamera();
|
||||
if (!camera_display_name.empty()) {
|
||||
capture_mode_util::TriggerAccessibilityAlert(l10n_util::GetStringFUTF8(
|
||||
IDS_ASH_SCREEN_CAPTURE_SELECTED_CAMERA_CHANGED,
|
||||
base::UTF8ToUTF16(camera_display_name)));
|
||||
}
|
||||
|
||||
RefreshCameraPreview();
|
||||
}
|
||||
|
||||
@ -701,6 +711,8 @@ void CaptureModeCameraController::RefreshCameraPreview() {
|
||||
(kDisconnectionGracePeriod - remaining_time).InSeconds();
|
||||
RecordCameraReconnectDuration(reconnect_duration_in_seconds,
|
||||
kDisconnectionGracePeriod.InSeconds());
|
||||
capture_mode_util::TriggerAccessibilityAlert(
|
||||
IDS_ASH_SCREEN_CAPTURE_CAMERA_RECONNECTED);
|
||||
}
|
||||
// When a selected camera becomes available, we stop any grace period
|
||||
// timer (if any), and decide whether to show or hide the preview widget
|
||||
@ -718,6 +730,9 @@ void CaptureModeCameraController::RefreshCameraPreview() {
|
||||
|
||||
if (in_recording_camera_disconnections_)
|
||||
++(*in_recording_camera_disconnections_);
|
||||
|
||||
capture_mode_util::TriggerAccessibilityAlert(
|
||||
IDS_ASH_SCREEN_CAPTURE_CAMERA_DISCONNECTED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#include "ash/capture_mode/capture_mode_session.h"
|
||||
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
|
||||
#include "ash/accessibility/accessibility_controller_impl.h"
|
||||
@ -350,28 +349,6 @@ void UpdateFloatingPanelBoundsIfNeeded() {
|
||||
Shell::Get()->accessibility_controller()->UpdateFloatingPanelBoundsIfNeeded();
|
||||
}
|
||||
|
||||
// Returns true if the camera preview will be shown on entering capture mode.
|
||||
bool CameraPreviewWillBeShown(CaptureModeController* controller) {
|
||||
auto* camera_controller = controller->camera_controller();
|
||||
if (!camera_controller || controller->type() != CaptureModeType::kVideo ||
|
||||
!camera_controller->selected_camera().is_valid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (controller->source()) {
|
||||
// The camera preview will always be shown in `kFullscreen` source with
|
||||
// `kVideo` capture type and valid selected camera.
|
||||
case CaptureModeSource::kFullscreen:
|
||||
return true;
|
||||
case CaptureModeSource::kRegion:
|
||||
return !controller->user_capture_region().IsEmpty();
|
||||
// The camera preview will not be shown for `kWindow` while entering the
|
||||
// capture mode. As the selected window has not been set yet at this point.
|
||||
case CaptureModeSource::kWindow:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
views::Widget* GetCameraPreviewWidget() {
|
||||
auto* camera_controller = CaptureModeController::Get()->camera_controller();
|
||||
return camera_controller ? camera_controller->camera_preview_widget()
|
||||
@ -640,24 +617,14 @@ void CaptureModeSession::Initialize() {
|
||||
// Trigger this before creating `capture_mode_bar_widget_` as we want to read
|
||||
// out this message before reading out the first view of
|
||||
// `capture_mode_bar_widget_`.
|
||||
const std::u16string capture_source =
|
||||
capture_mode_util::TriggerAccessibilityAlert(l10n_util::GetStringFUTF8(
|
||||
IDS_ASH_SCREEN_CAPTURE_ALERT_OPEN,
|
||||
l10n_util::GetStringUTF16(GetMessageIdForCaptureSource(
|
||||
controller_->source(), /*for_toggle_alert=*/false));
|
||||
const std::u16string capture_type = l10n_util::GetStringUTF16(
|
||||
controller_->type() == CaptureModeType::kImage
|
||||
? IDS_ASH_SCREEN_CAPTURE_TYPE_SCREENSHOT
|
||||
: IDS_ASH_SCREEN_CAPTURE_TYPE_SCREEN_RECORDING);
|
||||
if (CameraPreviewWillBeShown(controller_)) {
|
||||
const std::string camera_display_name =
|
||||
controller_->camera_controller()->GetDisplayNameOfSelectedCamera();
|
||||
DCHECK(!camera_display_name.empty());
|
||||
capture_mode_util::TriggerAccessibilityAlert(l10n_util::GetStringFUTF8(
|
||||
IDS_ASH_SCREEN_CAPTURE_ALERT_OPEN_WITH_CAMERA, capture_source,
|
||||
capture_type, base::UTF8ToUTF16(camera_display_name)));
|
||||
} else {
|
||||
capture_mode_util::TriggerAccessibilityAlert(l10n_util::GetStringFUTF8(
|
||||
IDS_ASH_SCREEN_CAPTURE_ALERT_OPEN, capture_source, capture_type));
|
||||
}
|
||||
controller_->source(), /*for_toggle_alert=*/false)),
|
||||
l10n_util::GetStringUTF16(
|
||||
controller_->type() == CaptureModeType::kImage
|
||||
? IDS_ASH_SCREEN_CAPTURE_TYPE_SCREENSHOT
|
||||
: IDS_ASH_SCREEN_CAPTURE_TYPE_SCREEN_RECORDING)));
|
||||
|
||||
// A context menu may have input capture when entering a session. Remove
|
||||
// capture from it, otherwise subsequent mouse events will cause it to close,
|
||||
|
Reference in New Issue
Block a user