diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailActivity.kt index 015811a5..d1f5377c 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailActivity.kt @@ -44,12 +44,13 @@ class SeriesDetailActivity : BaseActivity( Toast.LENGTH_LONG ).show() finish() + return } bindData() viewModel.seriesId = seriesId - viewModel.getSeriesDetail() + viewModel.getSeriesDetail { finish() } } override fun setupView() { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailViewModel.kt index db69a0b8..8056effc 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/series/detail/SeriesDetailViewModel.kt @@ -34,7 +34,7 @@ class SeriesDetailViewModel( private val unknownErrorMessage: String get() = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown) - fun getSeriesDetail() { + fun getSeriesDetail(onFailure: (() -> Unit)? = null) { _isLoading.value = true compositeDisposable.add( @@ -51,6 +51,10 @@ class SeriesDetailViewModel( _seriesDetailLiveData.value = seriesDetailResponse } else { _toastLiveData.value = it.message ?: unknownErrorMessage + + if (onFailure != null) { + onFailure() + } } _isLoading.value = false }, @@ -58,6 +62,10 @@ class SeriesDetailViewModel( _isLoading.value = false it.message?.let { message -> Logger.e(message) } _toastLiveData.postValue(unknownErrorMessage) + + if (onFailure != null) { + onFailure() + } } ) ) diff --git a/docs/20260226_시리즈상세오류시이전페이지이동.md b/docs/20260226_시리즈상세오류시이전페이지이동.md new file mode 100644 index 00000000..41da7d62 --- /dev/null +++ b/docs/20260226_시리즈상세오류시이전페이지이동.md @@ -0,0 +1,18 @@ +- [x] SeriesDetailActivity/SeriesDetailViewModel 오류 처리 흐름 확인 +- [x] 시리즈 상세 조회 실패 시 이전 페이지 이동 로직 반영 +- [x] 관련 테스트 실행 및 결과 확인 + +## 검증 기록 + +- 일시: 2026-02-26 +- 무엇을/왜: 시리즈 상세 진입 후 `getSeriesDetail` 실패 시 토스트만 노출되고 화면이 유지되어 사용자 요청대로 이전 페이지 복귀가 필요함. +- 어떻게: + - `SeriesDetailViewModel.getSeriesDetail`에 `onFailure` 콜백을 추가하고 실패 분기(`success=false`, `onError`)에서 콜백을 실행하도록 수정. + - `SeriesDetailActivity`에서 `viewModel.getSeriesDetail { finish() }` 형태로 호출해 조회 실패 시 이전 페이지로 이동. + - `seriesId <= 0` 가드에서 `finish()` 이후 `return`을 추가해 후속 로직 실행 방지. +- 실행 명령: + - `./gradlew :app:testDebugUnitTest && ./gradlew :app:assembleDebug` +- 결과: + - `:app:testDebugUnitTest` 성공 + - `:app:assembleDebug` 성공 + - Kotlin LSP 미구성 환경으로 `lsp_diagnostics`는 실행 불가(도구에서 `.kt` 서버 미설정 오류 확인)