Commit cd25dcdc authored by Mygod's avatar Mygod

Add a confirm dialog before discarding changes

parent 859ef530
...@@ -68,8 +68,7 @@ ...@@ -68,8 +68,7 @@
android:name=".ProfileConfigActivity" android:name=".ProfileConfigActivity"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:label="Profile config" android:label="Profile config"
android:launchMode="singleTask" android:launchMode="singleTask"/>
android:parentActivityName=".MainActivity"/>
<activity <activity
android:name=".ShadowsocksRunnerActivity" android:name=".ShadowsocksRunnerActivity"
......
package com.github.shadowsocks package com.github.shadowsocks
import android.app.Activity import android.app.Activity
import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import android.support.v7.app.AlertDialog
import android.support.v7.widget.Toolbar import android.support.v7.widget.Toolbar
import android.support.v7.widget.Toolbar.OnMenuItemClickListener import android.support.v7.widget.Toolbar.OnMenuItemClickListener
import com.github.shadowsocks.ShadowsocksApplication.app
import com.github.shadowsocks.utils.Key
class ProfileConfigActivity extends Activity { class ProfileConfigActivity extends Activity {
override def onCreate(savedInstanceState: Bundle) { override def onCreate(savedInstanceState: Bundle) {
...@@ -12,9 +16,16 @@ class ProfileConfigActivity extends Activity { ...@@ -12,9 +16,16 @@ class ProfileConfigActivity extends Activity {
val toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar] val toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar]
toolbar.setTitle("Profile config") // TODO toolbar.setTitle("Profile config") // TODO
toolbar.setNavigationIcon(R.drawable.ic_navigation_close) toolbar.setNavigationIcon(R.drawable.ic_navigation_close)
toolbar.setNavigationOnClickListener(_ => finish()) toolbar.setNavigationOnClickListener(_ => onBackPressed())
toolbar.inflateMenu(R.menu.profile_config_menu) toolbar.inflateMenu(R.menu.profile_config_menu)
toolbar.setOnMenuItemClickListener(getFragmentManager.findFragmentById(R.id.content) toolbar.setOnMenuItemClickListener(getFragmentManager.findFragmentById(R.id.content)
.asInstanceOf[OnMenuItemClickListener]) .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()
} }
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
package com.github.shadowsocks package com.github.shadowsocks
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.content._ import android.content._
import android.os._ import android.os._
import android.support.v14.preference.SwitchPreference import android.support.v14.preference.SwitchPreference
...@@ -34,7 +35,8 @@ import com.github.shadowsocks.database.Profile ...@@ -34,7 +35,8 @@ import com.github.shadowsocks.database.Profile
import com.github.shadowsocks.preferences.KcpCliPreferenceDialogFragment import com.github.shadowsocks.preferences.KcpCliPreferenceDialogFragment
import com.github.shadowsocks.utils.{Action, Key, Utils} 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 lazy val clipboard = getActivity.getSystemService(Context.CLIPBOARD_SERVICE).asInstanceOf[ClipboardManager]
private var profile: Profile = _ private var profile: Profile = _
private var isProxyApps: SwitchPreference = _ private var isProxyApps: SwitchPreference = _
...@@ -59,6 +61,15 @@ class ProfileConfigFragment extends PreferenceFragment with OnMenuItemClickListe ...@@ -59,6 +61,15 @@ class ProfileConfigFragment extends PreferenceFragment with OnMenuItemClickListe
isProxyApps.setChecked(true) isProxyApps.setChecked(true)
false 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() { override def onResume() {
......
...@@ -119,7 +119,7 @@ class Profile { ...@@ -119,7 +119,7 @@ class Profile {
.putString(Key.individual, individual) .putString(Key.individual, individual)
.putBoolean(Key.kcp, kcp) .putBoolean(Key.kcp, kcp)
.putInt(Key.kcpPort, kcpPort) .putInt(Key.kcpPort, kcpPort)
.putString(Key.kcpcli, kcpcli) .remove(Key.dirty)
def deserialize(pref: SharedPreferences) { 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 // 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) name = pref.getString(Key.name, null)
......
...@@ -155,6 +155,8 @@ object Key { ...@@ -155,6 +155,8 @@ object Key {
val kcpPort = "kcpPort" val kcpPort = "kcpPort"
val kcpcli = "kcpcli" val kcpcli = "kcpcli"
val dirty = "profileDirty"
val tfo = "tcp_fastopen" val tfo = "tcp_fastopen"
val currentVersionCode = "currentVersionCode" val currentVersionCode = "currentVersionCode"
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment