diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index ea9f5bbe..95c4bbf7 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -68,8 +68,7 @@ android:name=".ProfileConfigActivity" android:excludeFromRecents="true" android:label="Profile config" - android:launchMode="singleTask" - android:parentActivityName=".MainActivity"/> + android:launchMode="singleTask"/> finish()) + toolbar.setNavigationOnClickListener(_ => onBackPressed()) toolbar.inflateMenu(R.menu.profile_config_menu) toolbar.setOnMenuItemClickListener(getFragmentManager.findFragmentById(R.id.content) .asInstanceOf[OnMenuItemClickListener]) } + + override def onBackPressed(): Unit = if (app.settings.getBoolean(Key.dirty, false)) new AlertDialog.Builder(this) + .setTitle("Confirm?") // TODO + .setPositiveButton(android.R.string.yes, ((_, _) => finish()): DialogInterface.OnClickListener) + .setNegativeButton(android.R.string.no, null) + .create() + .show() else super.onBackPressed() } diff --git a/src/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala b/src/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala index 47e03cc2..ce48e26e 100644 --- a/src/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala +++ b/src/main/scala/com/github/shadowsocks/ProfileConfigFragment.scala @@ -20,6 +20,7 @@ package com.github.shadowsocks +import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.content._ import android.os._ import android.support.v14.preference.SwitchPreference @@ -34,7 +35,8 @@ import com.github.shadowsocks.database.Profile import com.github.shadowsocks.preferences.KcpCliPreferenceDialogFragment import com.github.shadowsocks.utils.{Action, Key, Utils} -class ProfileConfigFragment extends PreferenceFragment with OnMenuItemClickListener { +class ProfileConfigFragment extends PreferenceFragment with OnMenuItemClickListener + with OnSharedPreferenceChangeListener { private lazy val clipboard = getActivity.getSystemService(Context.CLIPBOARD_SERVICE).asInstanceOf[ClipboardManager] private var profile: Profile = _ private var isProxyApps: SwitchPreference = _ @@ -59,6 +61,15 @@ class ProfileConfigFragment extends PreferenceFragment with OnMenuItemClickListe isProxyApps.setChecked(true) false }) + app.settings.registerOnSharedPreferenceChangeListener(this) + } + + override def onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String): Unit = + if (findPreference(key) != null) app.editor.putBoolean(Key.dirty, true).apply() + + override def onDestroy() { + app.settings.unregisterOnSharedPreferenceChangeListener(this) + super.onDestroy() } override def onResume() { diff --git a/src/main/scala/com/github/shadowsocks/database/Profile.scala b/src/main/scala/com/github/shadowsocks/database/Profile.scala index b431b1e8..d893bc29 100644 --- a/src/main/scala/com/github/shadowsocks/database/Profile.scala +++ b/src/main/scala/com/github/shadowsocks/database/Profile.scala @@ -119,7 +119,7 @@ class Profile { .putString(Key.individual, individual) .putBoolean(Key.kcp, kcp) .putInt(Key.kcpPort, kcpPort) - .putString(Key.kcpcli, kcpcli) + .remove(Key.dirty) def deserialize(pref: SharedPreferences) { // It's assumed that default values are never used, so 0/false/null is always used even if that isn't the case name = pref.getString(Key.name, null) diff --git a/src/main/scala/com/github/shadowsocks/utils/Constants.scala b/src/main/scala/com/github/shadowsocks/utils/Constants.scala index 3e8bfbfc..1da063a5 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Constants.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Constants.scala @@ -155,6 +155,8 @@ object Key { val kcpPort = "kcpPort" val kcpcli = "kcpcli" + val dirty = "profileDirty" + val tfo = "tcp_fastopen" val currentVersionCode = "currentVersionCode" }