diff --git a/app/src/androidTest/java/com/yzx/kiosk/audio/LocalAudioPlaybackTest.kt b/app/src/androidTest/java/com/yzx/kiosk/audio/LocalAudioPlaybackTest.kt index d16083b..e34a6fe 100644 --- a/app/src/androidTest/java/com/yzx/kiosk/audio/LocalAudioPlaybackTest.kt +++ b/app/src/androidTest/java/com/yzx/kiosk/audio/LocalAudioPlaybackTest.kt @@ -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) diff --git a/app/src/main/java/com/yzx/kiosk/audio/LocalAudioPlayService.kt b/app/src/main/java/com/yzx/kiosk/audio/LocalAudioPlayService.kt index 420786e..71d3a62 100644 --- a/app/src/main/java/com/yzx/kiosk/audio/LocalAudioPlayService.kt +++ b/app/src/main/java/com/yzx/kiosk/audio/LocalAudioPlayService.kt @@ -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) { diff --git a/app/src/main/java/com/yzx/kiosk/audio/LocalAudioRoute.kt b/app/src/main/java/com/yzx/kiosk/audio/LocalAudioRoute.kt index 445f47c..8c2ac34 100644 --- a/app/src/main/java/com/yzx/kiosk/audio/LocalAudioRoute.kt +++ b/app/src/main/java/com/yzx/kiosk/audio/LocalAudioRoute.kt @@ -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" diff --git a/app/src/main/res/raw/electronic_complete_page.wav b/app/src/main/res/raw/electronic_complete_page.wav new file mode 100644 index 0000000..25dd40e Binary files /dev/null and b/app/src/main/res/raw/electronic_complete_page.wav differ diff --git a/app/src/test/java/com/yzx/kiosk/audio/LocalAudioRouteTest.kt b/app/src/test/java/com/yzx/kiosk/audio/LocalAudioRouteTest.kt index 043ca9b..34e19fd 100644 --- a/app/src/test/java/com/yzx/kiosk/audio/LocalAudioRouteTest.kt +++ b/app/src/test/java/com/yzx/kiosk/audio/LocalAudioRouteTest.kt @@ -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")) diff --git a/docs/verification/electronic-completion/audio.md b/docs/verification/electronic-completion/audio.md new file mode 100644 index 0000000..b144f42 --- /dev/null +++ b/docs/verification/electronic-completion/audio.md @@ -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`。