diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/GroupServerFragment.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/GroupServerFragment.kt index eaf274ae..667c5839 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/GroupServerFragment.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/GroupServerFragment.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.ItemTouchHelper import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import androidx.activity.result.contract.ActivityResultContracts import com.v2ray.ang.AppConfig import com.v2ray.ang.R import com.v2ray.ang.contracts.MainAdapterListener @@ -26,6 +27,7 @@ import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.helper.SimpleItemTouchHelperCallback import com.v2ray.ang.util.LogUtil import com.v2ray.ang.viewmodel.MainViewModel +import com.v2ray.ang.handler.SettingsChangeManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -44,6 +46,11 @@ class GroupServerFragment : BaseFragment(), private val share_method_more: Array by lazy { ownerActivity.resources.getStringArray(R.array.share_method_more) } + private val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + if (SettingsChangeManager.consumeRestartService() && mainViewModel.isRunning.value == true) { + ownerActivity.restartV2Ray() + } + } companion object { private const val ARG_SUB_ID = "subscriptionId" @@ -168,27 +175,20 @@ class GroupServerFragment : BaseFragment(), * @param profile The server configuration */ private fun editServer(guid: String, profile: ProfileItem) { - val intent = Intent().putExtra("guid", guid) + val activityClass = when (profile.configType) { + EConfigType.CUSTOM -> ServerCustomConfigActivity::class.java + EConfigType.POLICYGROUP -> ServerGroupActivity::class.java + EConfigType.PROXYCHAIN -> ServerProxyChainActivity::class.java + else -> ServerActivity::class.java + } + + val intent = Intent(ownerActivity, activityClass) + .putExtra("guid", guid) .putExtra("isRunning", mainViewModel.isRunning.value) .putExtra("createConfigType", profile.configType.value) .putExtra("subscriptionId", subId) - when (profile.configType) { - EConfigType.CUSTOM -> { - ownerActivity.startActivity(intent.setClass(ownerActivity, ServerCustomConfigActivity::class.java)) - } - EConfigType.POLICYGROUP -> { - ownerActivity.startActivity(intent.setClass(ownerActivity, ServerGroupActivity::class.java)) - } - - EConfigType.PROXYCHAIN -> { - ownerActivity.startActivity(intent.setClass(ownerActivity, ServerProxyChainActivity::class.java)) - } - - else -> { - ownerActivity.startActivity(intent.setClass(ownerActivity, ServerActivity::class.java)) - } - } + launcher.launch(intent) } /** diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerActivity.kt index b0ffdfea..641b7a8b 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerActivity.kt @@ -31,6 +31,7 @@ import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.JsonUtil import com.v2ray.ang.util.Utils +import com.v2ray.ang.handler.SettingsChangeManager class ServerActivity : BaseActivity() { @@ -507,6 +508,9 @@ class ServerActivity : BaseActivity() { } //LogUtil.i(AppConfig.TAG, JsonUtil.toJsonPretty(config) ?: "") MmkvManager.encodeServerConfig(editGuid, config) + if (isRunning) { + SettingsChangeManager.makeRestartService() + } toastSuccess(R.string.toast_success) finish() return true @@ -656,17 +660,9 @@ class ServerActivity : BaseActivity() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_server, menu) - val delButton = menu.findItem(R.id.del_config) - val saveButton = menu.findItem(R.id.save_config) - if (editGuid.isNotEmpty()) { - if (isRunning) { - delButton?.isVisible = false - saveButton?.isVisible = false - } - } else { - delButton?.isVisible = false - } + val delButton = menu.findItem(R.id.del_config) + delButton?.isVisible = editGuid.isNotEmpty() && !isRunning return super.onCreateOptionsMenu(menu) } diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerCustomConfigActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerCustomConfigActivity.kt index 3319dfb3..36d09f53 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerCustomConfigActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerCustomConfigActivity.kt @@ -19,6 +19,7 @@ import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.LogUtil import com.v2ray.ang.util.Utils +import com.v2ray.ang.handler.SettingsChangeManager class ServerCustomConfigActivity : BaseActivity() { private val binding by lazy { ActivityServerCustomConfigBinding.inflate(layoutInflater) } @@ -94,6 +95,9 @@ class ServerCustomConfigActivity : BaseActivity() { MmkvManager.encodeServerConfig(editGuid, config) MmkvManager.encodeServerRaw(editGuid, binding.editor.text.toString()) + if (isRunning) { + SettingsChangeManager.makeRestartService() + } toastSuccess(R.string.toast_success) finish() return true @@ -119,17 +123,9 @@ class ServerCustomConfigActivity : BaseActivity() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_server, menu) - val delButton = menu.findItem(R.id.del_config) - val saveButton = menu.findItem(R.id.save_config) - if (editGuid.isNotEmpty()) { - if (isRunning) { - delButton?.isVisible = false - saveButton?.isVisible = false - } - } else { - delButton?.isVisible = false - } + val delButton = menu.findItem(R.id.del_config) + delButton?.isVisible = editGuid.isNotEmpty() && !isRunning return super.onCreateOptionsMenu(menu) } diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerGroupActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerGroupActivity.kt index ff4639e2..75447e57 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerGroupActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerGroupActivity.kt @@ -15,6 +15,7 @@ import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.toastSuccess import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.Utils +import com.v2ray.ang.handler.SettingsChangeManager class ServerGroupActivity : BaseActivity() { private val binding by lazy { ActivityServerGroupBinding.inflate(layoutInflater) } @@ -100,6 +101,9 @@ class ServerGroupActivity : BaseActivity() { config.description = "${binding.spPolicyGroupType.selectedItem} - ${binding.spPolicyGroupSubId.selectedItem} - ${config.policyGroupFilter}" MmkvManager.encodeServerConfig(editGuid, config) + if (isRunning) { + SettingsChangeManager.makeRestartService() + } toastSuccess(R.string.toast_success) finish() return true @@ -143,17 +147,9 @@ class ServerGroupActivity : BaseActivity() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_server, menu) - val delButton = menu.findItem(R.id.del_config) - val saveButton = menu.findItem(R.id.save_config) - if (editGuid.isNotEmpty()) { - if (isRunning) { - delButton?.isVisible = false - saveButton?.isVisible = false - } - } else { - delButton?.isVisible = false - } + val delButton = menu.findItem(R.id.del_config) + delButton?.isVisible = editGuid.isNotEmpty() && !isRunning return super.onCreateOptionsMenu(menu) } diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerProxyChainActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerProxyChainActivity.kt index c733940b..e2d60503 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerProxyChainActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/ServerProxyChainActivity.kt @@ -19,6 +19,7 @@ import com.v2ray.ang.helper.SimpleItemTouchHelperCallback import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.util.Utils +import com.v2ray.ang.handler.SettingsChangeManager class ServerProxyChainActivity : BaseActivity() { private val binding by lazy { ActivityServerProxyChainBinding.inflate(layoutInflater) } @@ -133,6 +134,9 @@ class ServerProxyChainActivity : BaseActivity() { } MmkvManager.encodeServerConfig(editGuid, config) + if (isRunning) { + SettingsChangeManager.makeRestartService() + } toastSuccess(R.string.toast_success) finish() return true @@ -195,17 +199,9 @@ class ServerProxyChainActivity : BaseActivity() { override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_server, menu) - val delButton = menu.findItem(R.id.del_config) - val saveButton = menu.findItem(R.id.save_config) - if (editGuid.isNotEmpty()) { - if (isRunning) { - delButton?.isVisible = false - saveButton?.isVisible = false - } - } else { - delButton?.isVisible = false - } + val delButton = menu.findItem(R.id.del_config) + delButton?.isVisible = editGuid.isNotEmpty() && !isRunning return super.onCreateOptionsMenu(menu) }