Allow user to exit app easily

This commit is contained in:
Mygod
2019-07-11 09:54:42 +08:00
parent b6e9523463
commit 07ce4f4e25
4 changed files with 15 additions and 7 deletions

View File

@@ -21,17 +21,16 @@ abstract class RoutingManager(private val caller: Any, val downstream: String, p
private val active = mutableMapOf<String, RoutingManager>() private val active = mutableMapOf<String, RoutingManager>()
fun clean() { fun clean(reinit: Boolean = true) {
for (manager in active.values) manager.routing?.stop() for (manager in active.values) manager.routing?.stop()
val cleaned = try { try {
Routing.clean() Routing.clean()
true
} catch (e: RuntimeException) { } catch (e: RuntimeException) {
Timber.d(e) Timber.d(e)
SmartSnackbar.make(e).show() SmartSnackbar.make(e).show()
false return
} }
if (cleaned) for (manager in active.values) manager.initRouting() if (reinit) for (manager in active.values) manager.initRouting()
} }
} }

View File

@@ -17,13 +17,14 @@ import be.mygod.vpnhotspot.preference.AlwaysAutoCompleteEditTextPreferenceDialog
import be.mygod.vpnhotspot.preference.SharedPreferenceDataStore import be.mygod.vpnhotspot.preference.SharedPreferenceDataStore
import be.mygod.vpnhotspot.util.RootSession import be.mygod.vpnhotspot.util.RootSession
import be.mygod.vpnhotspot.util.launchUrl import be.mygod.vpnhotspot.util.launchUrl
import be.mygod.vpnhotspot.widget.SmartSnackbar import com.google.android.material.snackbar.Snackbar
import timber.log.Timber import timber.log.Timber
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.io.PrintWriter import java.io.PrintWriter
import java.net.NetworkInterface import java.net.NetworkInterface
import java.net.SocketException import java.net.SocketException
import kotlin.system.exitProcess
class SettingsPreferenceFragment : PreferenceFragmentCompat() { class SettingsPreferenceFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@@ -44,7 +45,13 @@ class SettingsPreferenceFragment : PreferenceFragmentCompat() {
true true
} }
findPreference<Preference>(IpMonitor.KEY)!!.setOnPreferenceChangeListener { _, _ -> findPreference<Preference>(IpMonitor.KEY)!!.setOnPreferenceChangeListener { _, _ ->
SmartSnackbar.make(R.string.settings_restart_required).show() Snackbar.make(requireView(), R.string.settings_restart_required, Snackbar.LENGTH_LONG).apply {
setAction(R.string.settings_exit_app) {
RoutingManager.clean(false)
RootSession.trimMemory()
exitProcess(0)
}
}.show()
true true
} }
findPreference<Preference>("misc.logcat")!!.setOnPreferenceClickListener { findPreference<Preference>("misc.logcat")!!.setOnPreferenceClickListener {

View File

@@ -113,6 +113,7 @@
<string name="settings_misc_donate_summary">请给我钱</string> <string name="settings_misc_donate_summary">请给我钱</string>
<string name="settings_misc_donate_more">PayPal, Flattr 等其他方式…</string> <string name="settings_misc_donate_more">PayPal, Flattr 等其他方式…</string>
<string name="settings_restart_required">重启应用以应用新的设置。</string> <string name="settings_restart_required">重启应用以应用新的设置。</string>
<string name="settings_exit_app">退出</string>
<string name="notification_tethering_title">VPN 共享已启用</string> <string name="notification_tethering_title">VPN 共享已启用</string>
<string name="notification_channel_tethering">VPN 共享服务</string> <string name="notification_channel_tethering">VPN 共享服务</string>

View File

@@ -119,6 +119,7 @@
<string name="settings_misc_donate_summary">I love money</string> <string name="settings_misc_donate_summary">I love money</string>
<string name="settings_misc_donate_more">PayPal, Flattr, more…</string> <string name="settings_misc_donate_more">PayPal, Flattr, more…</string>
<string name="settings_restart_required">Restart this app to apply this setting.</string> <string name="settings_restart_required">Restart this app to apply this setting.</string>
<string name="settings_exit_app">Exit</string>
<string name="notification_tethering_title">VPN tethering active</string> <string name="notification_tethering_title">VPN tethering active</string>
<string name="notification_channel_tethering">VPN Tethering Service</string> <string name="notification_channel_tethering">VPN Tethering Service</string>