From b0213ffdf656e15618dd28fc7da2986a263bc753 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Fri, 16 Jan 2026 17:40:09 +0800 Subject: [PATCH] Refactor FAB state handling in MainActivity --- .../java/com/v2ray/ang/ui/MainActivity.kt | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt index 10b59c02..b4679fef 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/MainActivity.kt @@ -159,19 +159,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList private fun setupViewModel() { mainViewModel.updateTestResultAction.observe(this) { setTestState(it) } mainViewModel.isRunning.observe(this) { isRunning -> - if (isRunning) { - binding.fab.setImageResource(R.drawable.ic_stop_24dp) - binding.fab.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.color_fab_active)) - binding.fab.contentDescription = getString(R.string.action_stop_service) - setTestState(getString(R.string.connection_connected)) - binding.layoutTest.isFocusable = true - } else { - binding.fab.setImageResource(R.drawable.ic_play_24dp) - binding.fab.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.color_fab_inactive)) - binding.fab.contentDescription = getString(R.string.tasker_start_service) - setTestState(getString(R.string.connection_not_connected)) - binding.layoutTest.isFocusable = false - } + applyRunningState(false, isRunning) } mainViewModel.startListenBroadcast() mainViewModel.initAssets(assets) @@ -196,6 +184,8 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList } private fun handleFabAction() { + applyRunningState(isLoading = true, isRunning = false) + if (mainViewModel.isRunning.value == true) { V2RayServiceManager.stopVService(this) } else if ((MmkvManager.decodeSettingsString(AppConfig.PREF_MODE) ?: VPN) == VPN) { @@ -241,6 +231,27 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList binding.tvTestState.text = content } + private fun applyRunningState(isLoading: Boolean, isRunning: Boolean) { + if (isLoading) { + binding.fab.setImageResource(R.drawable.ic_fab_check) + return + } + + if (isRunning) { + binding.fab.setImageResource(R.drawable.ic_stop_24dp) + binding.fab.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.color_fab_active)) + binding.fab.contentDescription = getString(R.string.action_stop_service) + setTestState(getString(R.string.connection_connected)) + binding.layoutTest.isFocusable = true + } else { + binding.fab.setImageResource(R.drawable.ic_play_24dp) + binding.fab.backgroundTintList = ColorStateList.valueOf(ContextCompat.getColor(this, R.color.color_fab_inactive)) + binding.fab.contentDescription = getString(R.string.tasker_start_service) + setTestState(getString(R.string.connection_not_connected)) + binding.layoutTest.isFocusable = false + } + } + override fun onResume() { super.onResume() }