capture_selfie_cam: Add a11y alert on preview visibility changes
Bug: 1302690 Change-Id: I9bdb8565c5adfc542e5cd6735e9911f735ed04eb Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3523742 Reviewed-by: Ahmed Fakhry <afakhry@chromium.org> Commit-Queue: Min Chen <minch@chromium.org> Cr-Commit-Position: refs/heads/main@{#986247}
This commit is contained in:
@ -4021,6 +4021,12 @@ Here are some things you can try to get started.
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_ALERT_RECORD_MICROPHONE_TOGGLE" desc="Alert spoken by screen readers when record microphone setting is toggled.">
|
||||
Record microphone <ph name="STATE">$1<ex>off</ex></ph>
|
||||
</message>
|
||||
<message name="IDS_ASH_SCREEN_CAPTURE_CAMERA_PREVIEW_ON" desc="Alert spoken by screen readers when camera preview is shown.">
|
||||
Camera preview on
|
||||
</message>
|
||||
<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_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>
|
||||
|
@ -0,0 +1 @@
|
||||
9cabcf13e4330de451a4a5735b2af1504698f145
|
@ -0,0 +1 @@
|
||||
3e6fbfe2e347b80b74f31c080ebd3096d94a522a
|
@ -11,9 +11,11 @@
|
||||
#include "ash/capture_mode/capture_mode_constants.h"
|
||||
#include "ash/capture_mode/capture_mode_controller.h"
|
||||
#include "ash/capture_mode/capture_mode_session.h"
|
||||
#include "ash/capture_mode/capture_mode_util.h"
|
||||
#include "ash/public/cpp/capture_mode/capture_mode_delegate.h"
|
||||
#include "ash/public/cpp/shell_window_ids.h"
|
||||
#include "ash/shell.h"
|
||||
#include "ash/strings/grit/ash_strings.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/callback_helpers.h"
|
||||
#include "base/check.h"
|
||||
@ -266,8 +268,6 @@ void CaptureModeCameraController::SetSelectedCamera(CameraId camera_id) {
|
||||
|
||||
selected_camera_ = std::move(camera_id);
|
||||
camera_reconnect_timer_.Stop();
|
||||
camera_preview_widget_.reset();
|
||||
camera_preview_view_ = nullptr;
|
||||
|
||||
for (auto& observer : observers_)
|
||||
observer.OnSelectedCameraChanged(selected_camera_);
|
||||
@ -284,6 +284,7 @@ void CaptureModeCameraController::MaybeReparentPreviewWidget() {
|
||||
if (!camera_preview_widget_)
|
||||
return;
|
||||
|
||||
const bool was_visible_before = camera_preview_widget_->IsVisible();
|
||||
auto* controller = CaptureModeController::Get();
|
||||
DCHECK(!controller->is_recording_in_progress());
|
||||
auto* parent = controller->GetCameraPreviewParentWindow();
|
||||
@ -294,6 +295,11 @@ void CaptureModeCameraController::MaybeReparentPreviewWidget() {
|
||||
views::Widget::ReparentNativeView(native_window, parent);
|
||||
|
||||
MaybeUpdatePreviewWidgetBounds();
|
||||
if (was_visible_before != camera_preview_widget_->IsVisible()) {
|
||||
capture_mode_util::TriggerAccessibilityAlert(
|
||||
was_visible_before ? IDS_ASH_SCREEN_CAPTURE_CAMERA_PREVIEW_HIDDEN
|
||||
: IDS_ASH_SCREEN_CAPTURE_CAMERA_PREVIEW_ON);
|
||||
}
|
||||
}
|
||||
|
||||
void CaptureModeCameraController::SetCameraPreviewSnapPosition(
|
||||
@ -480,6 +486,12 @@ void CaptureModeCameraController::OnCameraDevicesReceived(
|
||||
}
|
||||
|
||||
void CaptureModeCameraController::RefreshCameraPreview() {
|
||||
const bool was_visible_before =
|
||||
camera_preview_widget_ && camera_preview_widget_->IsVisible();
|
||||
base::ScopedClosureRunner deferred_runner(base::BindOnce(
|
||||
&CaptureModeCameraController::TriggerA11yAlertAfterCameraRefresh,
|
||||
weak_ptr_factory_.GetWeakPtr(), was_visible_before));
|
||||
|
||||
const CameraInfo* camera_info = nullptr;
|
||||
if (selected_camera_.is_valid()) {
|
||||
if (camera_info = GetCameraInfoById(selected_camera_, available_cameras_);
|
||||
@ -509,6 +521,14 @@ void CaptureModeCameraController::RefreshCameraPreview() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Destroying the existing camera preview widget before recreating a new one
|
||||
// when a different camera was selected.
|
||||
if (camera_preview_view_ &&
|
||||
camera_preview_view_->camera_id() != selected_camera_) {
|
||||
camera_preview_widget_.reset();
|
||||
camera_preview_view_ = nullptr;
|
||||
}
|
||||
|
||||
if (!camera_preview_widget_) {
|
||||
const auto preview_bounds = GetPreviewWidgetBounds();
|
||||
camera_preview_widget_ = CreateCameraPreviewWidget(preview_bounds);
|
||||
@ -617,4 +637,16 @@ gfx::Rect CaptureModeCameraController::
|
||||
return preview_window->bounds();
|
||||
}
|
||||
|
||||
void CaptureModeCameraController::TriggerA11yAlertAfterCameraRefresh(
|
||||
bool was_preview_visible_before) {
|
||||
const bool is_preview_visible_now =
|
||||
camera_preview_widget_ && camera_preview_widget_->IsVisible();
|
||||
if (was_preview_visible_before != is_preview_visible_now) {
|
||||
capture_mode_util::TriggerAccessibilityAlert(
|
||||
was_preview_visible_before
|
||||
? IDS_ASH_SCREEN_CAPTURE_CAMERA_PREVIEW_HIDDEN
|
||||
: IDS_ASH_SCREEN_CAPTURE_CAMERA_PREVIEW_ON);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace ash
|
||||
|
@ -243,6 +243,12 @@ class ASH_EXPORT CaptureModeCameraController
|
||||
|
||||
void SetBoundsOnPreviewWidget(const gfx::Rect& bounds);
|
||||
|
||||
// Triggers a11y alert after RefreshCameraPreview() based on
|
||||
// `was_preview_visible_before` and the current visibility of
|
||||
// `camera_preview_widget_`. `was_preview_visible_before` is the visibility of
|
||||
// the camera preview when RefreshCameraPreview() was called.
|
||||
void TriggerA11yAlertAfterCameraRefresh(bool was_preview_visible_before);
|
||||
|
||||
// Owned by CaptureModeController and guaranteed to be not null and to outlive
|
||||
// `this`.
|
||||
CaptureModeDelegate* const delegate_;
|
||||
|
Reference in New Issue
Block a user