0

Notify user when recording is aborted due to audio capture disabled.

Bug: b/249355530
Change-Id: I582edd1393dd512edaac0f02d51210e359945154
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3923874
Reviewed-by: Yilkal Abe <yilkal@chromium.org>
Commit-Queue: Li Lin <llin@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1053298}
This commit is contained in:
Li Lin
2022-09-30 01:19:48 +00:00
committed by Chromium LUCI CQ
parent 4ff8b013e3
commit 2e97a3d8b0
10 changed files with 70 additions and 6 deletions

@ -4578,6 +4578,14 @@ Here are some things you can try to get started.
Something went wrong. Try again.
</message>
<message name="IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TITLE" desc="The title of the notification when Projector session is aborted due to audio capture policy disabled.">
Cant create screencast
</message>
<message name="IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TEXT" desc="The text of the notification when Projector session is aborted due to audio capture policy disabled.">
Your administrator doesnt allow audio capture. Contact your administrator for more info.
</message>
<message name="IDS_ASH_PROJECTOR_FAILURE_MESSAGE_TRANSCRIPTION" desc="The test of the notification when Projector transcription fails.">
Can't generate transcript
</message>

@ -0,0 +1 @@
e811052fa24990f59da11466316e643b118e2da6

@ -0,0 +1 @@
e811052fa24990f59da11466316e643b118e2da6

@ -374,6 +374,13 @@ void ProjectorControllerImpl::OnRecordingStartAborted() {
projector_session_->Stop();
auto* capture_mode_controller = CaptureModeController::Get();
if (capture_mode_controller->IsAudioCaptureDisabledByPolicy()) {
ui_controller_->ShowFailureNotification(
IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TEXT,
IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TITLE);
}
if (client_)
client_->OpenProjectorApp();

@ -78,6 +78,9 @@ void RecordCreationFlowError(int message_id) {
case IDS_ASH_PROJECTOR_FAILURE_MESSAGE_TRANSCRIPTION:
error = ProjectorCreationFlowError::kTranscriptionError;
break;
case IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TEXT:
error = ProjectorCreationFlowError::kSessionAbortedByAudioPolicyDisabled;
break;
default:
NOTREACHED();
break;

@ -87,10 +87,11 @@ enum class ProjectorCreationFlow {
enum class ProjectorCreationFlowError {
kSaveError = 0,
kTranscriptionError = 1,
kSessionAbortedByAudioPolicyDisabled = 2,
// Add future entries above this comment, in sync with
// "ProjectorCreationFlowError" in src/tools/metrics/histograms/enums.xml.
// Update kMaxValue to the last value.
kMaxValue = kTranscriptionError
kMaxValue = kSessionAbortedByAudioPolicyDisabled
};
// These enum values represent potential error that occurs at policy value

@ -20,7 +20,6 @@
#include "ash/resources/vector_icons/vector_icons.h"
#include "ash/root_window_controller.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/toast/toast_manager_impl.h"
#include "base/callback_helpers.h"
#include "components/live_caption/views/caption_bubble.h"
@ -122,11 +121,11 @@ void ShowNotification(
} // namespace
// static
void ProjectorUiController::ShowFailureNotification(int message_id) {
void ProjectorUiController::ShowFailureNotification(int message_id,
int title_id) {
RecordCreationFlowError(message_id);
ShowNotification(
kProjectorErrorNotificationId, IDS_ASH_PROJECTOR_FAILURE_TITLE,
message_id,
kProjectorErrorNotificationId, title_id, message_id,
message_center::SystemNotificationWarningLevel::CRITICAL_WARNING);
}

@ -8,6 +8,7 @@
#include "ash/ash_export.h"
#include "ash/projector/projector_metrics.h"
#include "ash/public/cpp/projector/projector_session.h"
#include "ash/strings/grit/ash_strings.h"
#include "base/scoped_observation.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/skia/include/core/SkColor.h"
@ -26,7 +27,9 @@ class ASH_EXPORT ProjectorUiController : public ProjectorSessionObserver {
public:
// Shows a notification informing the user that a Projector error has
// occurred.
static void ShowFailureNotification(int message_id);
static void ShowFailureNotification(
int message_id,
int title_id = IDS_ASH_PROJECTOR_FAILURE_TITLE);
// Shows a notification informing the user that a Projector save error has
// occurred.

@ -252,6 +252,45 @@ TEST_F(ProjectorUiControllerTest, ShowFailureNotification) {
/*count=*/2);
}
TEST_F(ProjectorUiControllerTest, ShowFailureNotificationWithTitle) {
base::HistogramTester histogram_tester;
MockMessageCenterObserver mock_message_center_observer;
message_center::MessageCenter::Get()->AddObserver(
&mock_message_center_observer);
EXPECT_CALL(
mock_message_center_observer,
OnNotificationAdded(/*notification_id=*/"projector_error_notification"))
.Times(1);
EXPECT_CALL(mock_message_center_observer,
OnNotificationDisplayed(
/*notification_id=*/"projector_error_notification",
message_center::DisplaySource::DISPLAY_SOURCE_POPUP));
ProjectorUiController::ShowFailureNotification(
IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TEXT,
IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TITLE);
const message_center::NotificationList::Notifications& notifications =
message_center::MessageCenter::Get()->GetVisibleNotifications();
EXPECT_EQ(notifications.size(), 1u);
EXPECT_EQ((*notifications.begin())->id(), "projector_error_notification");
EXPECT_EQ(
(*notifications.begin())->message(),
l10n_util::GetStringUTF16(IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TEXT));
EXPECT_EQ(
(*notifications.begin())->title(),
l10n_util::GetStringUTF16(IDS_ASH_PROJECTOR_ABORT_BY_AUDIO_POLICY_TITLE));
histogram_tester.ExpectBucketCount(
kProjectorCreationFlowErrorHistogramName,
ProjectorCreationFlowError::kSessionAbortedByAudioPolicyDisabled,
/*expected_count=*/1);
histogram_tester.ExpectTotalCount(kProjectorCreationFlowErrorHistogramName,
/*count=*/1);
}
TEST_F(ProjectorUiControllerTest, ShowSaveFailureNotification) {
base::HistogramTester histogram_tester;

@ -82087,6 +82087,8 @@ https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.7.1.pdf
<enum name="ProjectorCreationFlowError">
<int value="0" label="Can't save recording"/>
<int value="1" label="Can't generate transcription"/>
<int value="2"
label="Session aborted since audio capture policy is disabled"/>
</enum>
<enum name="ProjectorMarkerColor">