diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt index a021c1ec..137840b4 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt @@ -4,6 +4,7 @@ import android.os.Bundle import android.support.v7.app.AlertDialog import android.text.Editable import android.text.TextUtils +import android.util.Log import android.view.Menu import android.view.MenuItem import com.google.gson.Gson @@ -100,6 +101,11 @@ class Server2Activity : BaseActivity() { if (saveSuccess) { //update config defaultDPreference.setPrefString(AppConfig.ANG_CONFIG + edit_guid, tv_content.text.toString()) + if (edit_index == configs.index) { + if (!AngConfigManager.genStoreV2rayConfig(edit_index)) { + Log.d(AppConfig.ANG_PACKAGE, "update custom config $edit_index but generate full configuration failed!") + } + } finish() return true } else { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt index 6ab91599..6bdadcc6 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt @@ -1,5 +1,6 @@ package com.v2ray.ang.ui +import android.arch.lifecycle.ViewModelProviders import android.content.Intent import android.os.Bundle import android.support.v7.preference.* @@ -9,6 +10,7 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils +import com.v2ray.ang.viewmodel.SettingsViewModel class SettingsActivity : BaseActivity() { companion object { @@ -37,6 +39,8 @@ class SettingsActivity : BaseActivity() { const val PREF_FORWARD_IPV6 = "pref_forward_ipv6" } + private val settingsViewModel by lazy { ViewModelProviders.of(this).get(SettingsViewModel::class.java) } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) @@ -44,6 +48,8 @@ class SettingsActivity : BaseActivity() { title = getString(R.string.title_settings) supportActionBar?.setDisplayHomeAsUpEnabled(true) + + settingsViewModel.startListenPreferenceChange() } class SettingsFragment : PreferenceFragmentCompat() { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt new file mode 100644 index 00000000..5f278a60 --- /dev/null +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt @@ -0,0 +1,46 @@ +package com.v2ray.ang.viewmodel + +import android.app.Application +import android.arch.lifecycle.AndroidViewModel +import android.content.SharedPreferences +import android.support.v7.preference.PreferenceManager +import android.util.Log +import com.v2ray.ang.AppConfig +import com.v2ray.ang.ui.SettingsActivity.Companion +import com.v2ray.ang.util.AngConfigManager +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch + +class SettingsViewModel(application: Application) : AndroidViewModel(application), SharedPreferences.OnSharedPreferenceChangeListener { + fun startListenPreferenceChange() { + PreferenceManager.getDefaultSharedPreferences(getApplication()).registerOnSharedPreferenceChangeListener(this) + } + + override fun onCleared() { + PreferenceManager.getDefaultSharedPreferences(getApplication()).unregisterOnSharedPreferenceChangeListener(this) + Log.i(AppConfig.ANG_PACKAGE, "Settings ViewModel is cleared") + super.onCleared() + } + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String?) { + Log.d(AppConfig.ANG_PACKAGE, "Observe settings changed: $key") + when(key) { + Companion.PREF_SNIFFING_ENABLED, + Companion.PREF_PROXY_SHARING, + Companion.PREF_LOCAL_DNS_ENABLED, + Companion.PREF_REMOTE_DNS, + Companion.PREF_DOMESTIC_DNS, + Companion.PREF_ROUTING_DOMAIN_STRATEGY, + Companion.PREF_ROUTING_MODE, + AppConfig.PREF_V2RAY_ROUTING_AGENT, + AppConfig.PREF_V2RAY_ROUTING_BLOCKED, + AppConfig.PREF_V2RAY_ROUTING_DIRECT -> { + GlobalScope.launch { + if (!AngConfigManager.genStoreV2rayConfig(AngConfigManager.configs.index)) { + Log.d(AppConfig.ANG_PACKAGE, "$key changed but generate full configuration failed!") + } + } + } + } + } +}