diff --git a/mobile/src/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala b/mobile/src/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala index c6470bf2..a3de92be 100644 --- a/mobile/src/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala +++ b/mobile/src/main/scala/com/github/shadowsocks/GlobalConfigFragment.scala @@ -20,13 +20,16 @@ package com.github.shadowsocks +import android.content.SharedPreferences +import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.os.Bundle import android.support.design.widget.Snackbar import android.support.v14.preference.SwitchPreference import be.mygod.preference.PreferenceFragment import com.github.shadowsocks.utils.{Key, TcpFastOpen} +import com.github.shadowsocks.ShadowsocksApplication.app -class GlobalConfigFragment extends PreferenceFragment { +class GlobalConfigFragment extends PreferenceFragment with OnSharedPreferenceChangeListener { override def onCreatePreferences(bundle: Bundle, key: String) { addPreferencesFromResource(R.xml.pref_global) val switch = findPreference(Key.isAutoConnect).asInstanceOf[SwitchPreference] @@ -53,5 +56,16 @@ class GlobalConfigFragment extends PreferenceFragment { tfo.setEnabled(false) tfo.setSummary(getString(R.string.tcp_fastopen_summary_unsupported, java.lang.System.getProperty("os.version"))) } + app.settings.registerOnSharedPreferenceChangeListener(this) + } + + override def onDestroy() { + app.settings.unregisterOnSharedPreferenceChangeListener(this) + super.onDestroy() + } + + def onSharedPreferenceChanged(pref: SharedPreferences, key: String): Unit = key match { + case Key.isNAT => findPreference(key).asInstanceOf[SwitchPreference].setChecked(pref.getBoolean(key, false)) + case _ => } } diff --git a/mobile/src/main/scala/com/github/shadowsocks/MainActivity.scala b/mobile/src/main/scala/com/github/shadowsocks/MainActivity.scala index 0ec162b4..51ea18ba 100644 --- a/mobile/src/main/scala/com/github/shadowsocks/MainActivity.scala +++ b/mobile/src/main/scala/com/github/shadowsocks/MainActivity.scala @@ -170,7 +170,7 @@ class MainActivity extends Activity with ServiceBoundContext with Drawer.OnDrawe override def onServiceDisconnected(): Unit = changeState(State.IDLE) private def addDisableNatToSnackbar(snackbar: Snackbar) = snackbar.setAction(R.string.switch_to_vpn, (_ => - if (state == State.STOPPED) app.editor.putBoolean(Key.isNAT, false)): View.OnClickListener) + if (state == State.STOPPED) app.editor.putBoolean(Key.isNAT, false).apply()): View.OnClickListener) override def binderDied() { detachService()