Commit 45aa77fa authored by Kuo Jen Wei's avatar Kuo Jen Wei Committed by Commit Bot

CCA: Add sound effect to pause/resume UI

To add sound effect to pause/resume UI, new 'recording-ui-paused' state
is introduced to control the UI transition.

Bug: 1072706
Test: Run "tast run 'camera.CCAUIRecordVideo'", check if sound effect is
applied.

Change-Id: I7e6305e302cea55a14a1174b484a5dc24b06fabf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2296548Reviewed-by: default avatarWei Lee <wtlee@chromium.org>
Commit-Queue: Kuo Jen Wei <inker@chromium.org>
Auto-Submit: Kuo Jen Wei <inker@chromium.org>
Cr-Commit-Position: refs/heads/master@{#789405}
parent 1f57bbec
...@@ -12,9 +12,7 @@ group("chrome_camera_app") { ...@@ -12,9 +12,7 @@ group("chrome_camera_app") {
# According to crbug.com/855747, we should list all the files we want to copy # According to crbug.com/855747, we should list all the files we want to copy
# rather than list only the folders to avoid potential building issue and ease # rather than list only the folders to avoid potential building issue and ease
# the difficulty to diagnose. # the difficulty to diagnose.
deps = [ deps = [ "src/strings:camera_strings" ]
"src/strings:camera_strings",
]
data_deps = [ data_deps = [
":chrome_camera_app_base", ":chrome_camera_app_base",
...@@ -203,6 +201,7 @@ copy("chrome_camera_app_js_views_camera") { ...@@ -203,6 +201,7 @@ copy("chrome_camera_app_js_views_camera") {
copy("chrome_camera_app_sounds") { copy("chrome_camera_app_sounds") {
sources = [ sources = [
"src/sounds/record_end.ogg", "src/sounds/record_end.ogg",
"src/sounds/record_pause.ogg",
"src/sounds/record_start.ogg", "src/sounds/record_start.ogg",
"src/sounds/shutter.ogg", "src/sounds/shutter.ogg",
"src/sounds/tick_final.ogg", "src/sounds/tick_final.ogg",
......
...@@ -116,6 +116,7 @@ ...@@ -116,6 +116,7 @@
<!-- TODO(crbug.com/980846): Add FFMpeg library here with comrpession enabled once video recording is ready to test in SWA --> <!-- TODO(crbug.com/980846): Add FFMpeg library here with comrpession enabled once video recording is ready to test in SWA -->
<include name="IDR_CAMERA_RECORD_END_OGG" file="src/sounds/record_end.ogg" type="BINDATA" /> <include name="IDR_CAMERA_RECORD_END_OGG" file="src/sounds/record_end.ogg" type="BINDATA" />
<include name="IDR_CAMERA_RECORD_PAUSE_OGG" file="src/sounds/record_pause.ogg" type="BINDATA" />
<include name="IDR_CAMERA_RECORD_START_OGG" file="src/sounds/record_start.ogg" type="BINDATA" /> <include name="IDR_CAMERA_RECORD_START_OGG" file="src/sounds/record_start.ogg" type="BINDATA" />
<include name="IDR_CAMERA_SHUTTER_OGG" file="src/sounds/shutter.ogg" type="BINDATA" /> <include name="IDR_CAMERA_SHUTTER_OGG" file="src/sounds/shutter.ogg" type="BINDATA" />
<include name="IDR_CAMERA_TICK_FINAL_OGG" file="src/sounds/tick_final.ogg" type="BINDATA" /> <include name="IDR_CAMERA_TICK_FINAL_OGG" file="src/sounds/tick_final.ogg" type="BINDATA" />
......
...@@ -434,7 +434,7 @@ body.taking.video #recordvideo .red-dot { ...@@ -434,7 +434,7 @@ body.taking.video #recordvideo .red-dot {
width: var(--size); width: var(--size);
} }
body:not(.recording-paused).video #pause-recordvideo .red-dot { body:not(.recording-ui-paused).video #pause-recordvideo .red-dot {
--dot-size: 0px; --dot-size: 0px;
} }
...@@ -469,15 +469,15 @@ body.taking.video #recordvideo .white-square { ...@@ -469,15 +469,15 @@ body.taking.video #recordvideo .white-square {
width: var(--bar-size); width: var(--bar-size);
} }
body.video.recording.recording-paused #recordvideo { body.video.recording.recording-ui-paused #recordvideo {
--size: 44px; --size: 44px;
} }
body.video.recording-paused #pause-recordvideo { body.video.recording-ui-paused #pause-recordvideo {
--size: 60px; --size: 60px;
} }
body.video.recording-paused #pause-recordvideo .two-bars { body.video.recording-ui-paused #pause-recordvideo .two-bars {
--bar-size: 0px; --bar-size: 0px;
} }
...@@ -993,7 +993,7 @@ body:not(.grid):not(.view-grid-settings) #preview-grid-vertical::before { ...@@ -993,7 +993,7 @@ body:not(.grid):not(.view-grid-settings) #preview-grid-vertical::before {
pointer-events: none; pointer-events: none;
} }
body.recording-paused #record-time { body.recording-ui-paused #record-time {
background-color: black; background-color: black;
} }
...@@ -1010,8 +1010,8 @@ body.recording-paused #record-time { ...@@ -1010,8 +1010,8 @@ body.recording-paused #record-time {
width: 6px; width: 6px;
} }
body.recording-paused #record-time .icon, body.recording-ui-paused #record-time .icon,
body:not(.recording-paused) #record-time [i18n-content=record_video_paused_msg] { body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_msg] {
display: none; display: none;
} }
......
...@@ -35,8 +35,12 @@ export const State = { ...@@ -35,8 +35,12 @@ export const State = {
PLAYING_RESULT_VIDEO: 'playing-result-video', PLAYING_RESULT_VIDEO: 'playing-result-video',
PREVIEW_VERTICAL_DOCK: 'preview-vertical-dock', PREVIEW_VERTICAL_DOCK: 'preview-vertical-dock',
PRINT_PERFORMANCE_LOGS: 'print-performance-logs', PRINT_PERFORMANCE_LOGS: 'print-performance-logs',
// Starts/Ends from start()/at stop() of MediaRecorder.
RECORDING: 'recording', RECORDING: 'recording',
// Binds with paused state of MediaRecorder.
RECORDING_PAUSED: 'recording-paused', RECORDING_PAUSED: 'recording-paused',
// Controls appearance of paused/resumed UI.
RECORDING_UI_PAUSED: 'recording-ui-paused',
REVIEW_PHOTO_RESULT: 'review-photo-result', REVIEW_PHOTO_RESULT: 'review-photo-result',
REVIEW_RESULT: 'review-result', REVIEW_RESULT: 'review-result',
REVIEW_VIDEO_RESULT: 'review-video-result', REVIEW_VIDEO_RESULT: 'review-video-result',
......
...@@ -718,7 +718,10 @@ export class Video extends ModeBase { ...@@ -718,7 +718,10 @@ export class Video extends ModeBase {
* Toggles pause/resume state of video recording. * Toggles pause/resume state of video recording.
* @return {!Promise} Promise resolved when recording is paused/resumed. * @return {!Promise} Promise resolved when recording is paused/resumed.
*/ */
togglePaused() { async togglePaused() {
if (!state.get(state.State.RECORDING)) {
return;
}
if (this.togglePaused_ !== null) { if (this.togglePaused_ !== null) {
return this.togglePaused_; return this.togglePaused_;
} }
...@@ -735,12 +738,18 @@ export class Video extends ModeBase { ...@@ -735,12 +738,18 @@ export class Video extends ModeBase {
this.togglePaused_ = null; this.togglePaused_ = null;
waitable.signal(); waitable.signal();
}; };
this.mediaRecorder_.addEventListener(toggledEvent, onToggled); const playEffect = async () => {
state.set(state.State.RECORDING_UI_PAUSED, toBePaused);
await sound.play(toBePaused ? '#sound-rec-pause' : '#sound-rec-start');
};
this.mediaRecorder_.addEventListener(toggledEvent, onToggled);
if (toBePaused) { if (toBePaused) {
waitable.wait().then(playEffect);
this.recordTime_.stop({pause: true}); this.recordTime_.stop({pause: true});
this.mediaRecorder_.pause(); this.mediaRecorder_.pause();
} else { } else {
await playEffect();
this.recordTime_.start({resume: true}); this.recordTime_.start({resume: true});
this.mediaRecorder_.resume(); this.mediaRecorder_.resume();
} }
...@@ -841,6 +850,7 @@ export class Video extends ModeBase { ...@@ -841,6 +850,7 @@ export class Video extends ModeBase {
const onstop = (event) => { const onstop = (event) => {
state.set(state.State.RECORDING, false); state.set(state.State.RECORDING, false);
state.set(state.State.RECORDING_PAUSED, false); state.set(state.State.RECORDING_PAUSED, false);
state.set(state.State.RECORDING_UI_PAUSED, false);
this.mediaRecorder_.removeEventListener( this.mediaRecorder_.removeEventListener(
'dataavailable', ondataavailable); 'dataavailable', ondataavailable);
...@@ -858,6 +868,7 @@ export class Video extends ModeBase { ...@@ -858,6 +868,7 @@ export class Video extends ModeBase {
this.mediaRecorder_.start(100); this.mediaRecorder_.start(100);
state.set(state.State.RECORDING, true); state.set(state.State.RECORDING, true);
state.set(state.State.RECORDING_PAUSED, false); state.set(state.State.RECORDING_PAUSED, false);
state.set(state.State.RECORDING_UI_PAUSED, false);
}); });
} }
} }
......
...@@ -387,8 +387,10 @@ ...@@ -387,8 +387,10 @@
data-timeout="1000"> data-timeout="1000">
<audio id="sound-shutter" src="../sounds/shutter.ogg" data-timeout="350"> <audio id="sound-shutter" src="../sounds/shutter.ogg" data-timeout="350">
<audio id="sound-rec-start" src="../sounds/record_start.ogg" <audio id="sound-rec-start" src="../sounds/record_start.ogg"
data-timeout="200"> data-timeout="300">
<audio id="sound-rec-end" src="../sounds/record_end.ogg" data-timeout="450"> <audio id="sound-rec-end" src="../sounds/record_end.ogg" data-timeout="450">
<audio id="sound-rec-pause" src="../sounds/record_pause.ogg"
data-timeout="500">
<template id="resolution-item-template"> <template id="resolution-item-template">
<label class="menu-item circle resolution-option"> <label class="menu-item circle resolution-option">
<input class="icon" type="radio" tabindex="0"> <input class="icon" type="radio" tabindex="0">
......
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