From 4c7c964e65dcc551b317e69548871a7064a99f9e Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 22 Sep 2026 10:41:31 +0800 Subject: [PATCH] Show service start failure details Pass the optional failure message from the service layer through `MainServiceEvent` and show it in `MainViewModel` when available. This preserves the existing generic error toast as a fallback while surfacing more specific startup failures to the user. --- .../src/main/java/com/v2ray/ang/ui/main/MainRepository.kt | 4 +++- .../main/java/com/v2ray/ang/ui/main/MainServiceEvent.kt | 2 +- .../src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt | 8 ++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainRepository.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainRepository.kt index cf00177f4..fa37a4761 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainRepository.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainRepository.kt @@ -52,7 +52,9 @@ class MainRepository( AppConfig.MSG_STATE_RUNNING -> MainServiceEvent.StateRunning AppConfig.MSG_STATE_NOT_RUNNING -> MainServiceEvent.StateNotRunning AppConfig.MSG_STATE_START_SUCCESS -> MainServiceEvent.StateStartSuccess - AppConfig.MSG_STATE_START_FAILURE -> MainServiceEvent.StateStartFailure + AppConfig.MSG_STATE_START_FAILURE -> MainServiceEvent.StateStartFailure( + safeIntent.getStringExtra("content") + ) AppConfig.MSG_STATE_STOP_SUCCESS -> MainServiceEvent.StateStopSuccess AppConfig.MSG_MEASURE_DELAY_RESULT -> safeIntent diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainServiceEvent.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainServiceEvent.kt index 376422803..f02a8aacb 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainServiceEvent.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainServiceEvent.kt @@ -7,7 +7,7 @@ sealed class MainServiceEvent { data object StateRunning : MainServiceEvent() data object StateNotRunning : MainServiceEvent() data object StateStartSuccess : MainServiceEvent() - data object StateStartFailure : MainServiceEvent() + data class StateStartFailure(val message: String? = null) : MainServiceEvent() data object StateStopSuccess : MainServiceEvent() data class MeasureDelayResult(val result: ConnectionTestResult, val requestId: String) : MainServiceEvent() data class MeasureDelayCancelled(val requestId: String) : MainServiceEvent() diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt index 75bc0f02c..129921de0 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/main/MainViewModel.kt @@ -134,8 +134,12 @@ class MainViewModel( updateRunningState(true) } - MainServiceEvent.StateStartFailure -> { - toastError(R.string.toast_services_failure) + is MainServiceEvent.StateStartFailure -> { + if (!event.message.isNullOrBlank()) { + toastError(event.message) + } else { + toastError(R.string.toast_services_failure) + } updateRunningState(false) }