feat: play supplied audio on electronic photo completion
This commit is contained in:
@@ -44,6 +44,29 @@ class LocalAudioPlaybackTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test fun electronicCompletionSwitchesToDedicatedClipAndPreservesPrintAudio() {
|
||||
val instrumentation = InstrumentationRegistry.getInstrumentation()
|
||||
lateinit var service: LocalAudioPlayService
|
||||
instrumentation.runOnMainSync { service = LocalAudioPlayService(instrumentation.targetContext) }
|
||||
try {
|
||||
instrumentation.runOnMainSync { service.playByRoute(AppRoutes.PRINT_SUCCESS) }
|
||||
awaitPlaying(service)
|
||||
assertEquals(R.raw.print_complete_page, service.currentResId.value)
|
||||
|
||||
instrumentation.runOnMainSync {
|
||||
service.playByRoute(AppRoutes.buildElectronicCompletionRoute("AUDIO-TEST-ORDER"))
|
||||
}
|
||||
awaitPlaying(service)
|
||||
assertEquals(R.raw.electronic_complete_page, service.currentResId.value)
|
||||
|
||||
instrumentation.runOnMainSync { service.playByRoute(AppRoutes.PRINT_SUCCESS) }
|
||||
awaitPlaying(service)
|
||||
assertEquals(R.raw.print_complete_page, service.currentResId.value)
|
||||
} finally {
|
||||
instrumentation.runOnMainSync { service.release() }
|
||||
}
|
||||
}
|
||||
|
||||
private fun awaitPlaying(service: LocalAudioPlayService) {
|
||||
val deadline = System.currentTimeMillis() + 5000
|
||||
while (!service.isPlaying.value && System.currentTimeMillis() < deadline) Thread.sleep(20)
|
||||
|
||||
@@ -47,6 +47,7 @@ class LocalAudioPlayService @Inject constructor(
|
||||
AppRoutes.PHOTO_SELECT to R.raw.upload_unpaid_result_page,
|
||||
AppRoutes.PRINTING to R.raw.printing_page,
|
||||
AppRoutes.PRINT_SUCCESS to R.raw.print_complete_page,
|
||||
ELECTRONIC_COMPLETION_AUDIO_KEY to R.raw.electronic_complete_page,
|
||||
// 特殊状态页面
|
||||
"face_recognition_recognizing" to R.raw.face_recognition_recognizing_page,
|
||||
"face_recognition_failed" to R.raw.face_recognition_failed_page,
|
||||
@@ -112,10 +113,6 @@ class LocalAudioPlayService @Inject constructor(
|
||||
|
||||
// 同一结果页根据入口选择播报,避免最近照片误播识别成功。
|
||||
val audioKey = localAudioKeyForRoute(route)
|
||||
if (audioKey == ELECTRONIC_COMPLETION_AUDIO_KEY) {
|
||||
stop()
|
||||
return
|
||||
}
|
||||
|
||||
val audioResId = ROUTE_TO_AUDIO_MAP[audioKey]
|
||||
if (audioResId == null) {
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.yzx.kiosk.audio
|
||||
import com.yzx.kiosk.navigation.routes.AppRoutes
|
||||
import java.net.URLDecoder
|
||||
|
||||
internal const val ELECTRONIC_COMPLETION_AUDIO_KEY = "electronic_completion_silent"
|
||||
internal const val ELECTRONIC_COMPLETION_AUDIO_KEY = "electronic_completion"
|
||||
|
||||
internal const val RECENT_PHOTOS_AUDIO_KEY = "recent_photos_result"
|
||||
|
||||
|
||||
Binary file not shown.
@@ -5,7 +5,7 @@ import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
|
||||
class LocalAudioRouteTest {
|
||||
@Test fun `electronic completion suppresses printing audio while print routes retain it`() {
|
||||
@Test fun `electronic completion uses its own audio while print routes retain theirs`() {
|
||||
assertEquals(ELECTRONIC_COMPLETION_AUDIO_KEY, localAudioKeyForRoute(AppRoutes.buildElectronicCompletionRoute("ORDER")))
|
||||
assertEquals(AppRoutes.PRINTING, localAudioKeyForRoute(AppRoutes.buildPrintingRoute("[]", "ORDER", 1)))
|
||||
assertEquals(AppRoutes.PRINTING, localAudioKeyForRoute("printing?urls=electronic%3Dtrue"))
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
# 电子版完成页语音
|
||||
|
||||
- 来源:用户提供的 `9月15日.wav`。
|
||||
- 项目资源名称:`app/src/main/res/raw/electronic_complete_page.wav`。
|
||||
- 原先从打印完成提示音裁剪得到的版本已被替换。
|
||||
- 按原文件复制,未裁剪、转码或调整音量;48 kHz、双声道、16-bit PCM WAV,时长 5.632 秒。
|
||||
- 进入电子版完成页时通过 `LocalAudioPlayService` 播放此资源。
|
||||
- 打印完成页继续使用 `print_complete_page.wav`。
|
||||
Reference in New Issue
Block a user