diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/App.kt b/mobile/src/main/java/be/mygod/vpnhotspot/App.kt index fa48f740..3046e8c1 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/App.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/App.kt @@ -11,6 +11,8 @@ import android.preference.PreferenceManager class App : Application() { companion object { + const val ACTION_CLEAN_ROUTINGS = "be.mygod.vpnhotspot.CLEAN_ROUTINGS" + lateinit var app: App } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterService.kt b/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterService.kt index 25739944..6d39616e 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterService.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterService.kt @@ -140,6 +140,16 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, VpnListener.C intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO), intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP)) } + App.ACTION_CLEAN_ROUTINGS -> { + val routing = routing + try { + routing!!.started = false + if (status == Status.ACTIVE && !initRouting(upstream!!, routing.downstream, routing.hostAddress)) + Toast.makeText(this@RepeaterService, R.string.noisy_su_failure, Toast.LENGTH_SHORT).show() + } catch (e: Exception) { + Toast.makeText(this@RepeaterService, e.message, Toast.LENGTH_SHORT).show() + } + } } } private val onVpnUnavailable = Runnable { startFailure(getString(R.string.repeater_vpn_unavailable)) } @@ -202,6 +212,8 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, VpnListener.C unregisterReceiver() registerReceiver(receiver, intentFilter(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION, WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)) + LocalBroadcastManager.getInstance(this) + .registerReceiver(receiver, intentFilter(App.ACTION_CLEAN_ROUTINGS)) receiverRegistered = true upstream = ifname p2pManager.requestGroupInfo(channel, { @@ -319,6 +331,7 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, VpnListener.C private fun unregisterReceiver() { if (receiverRegistered) { unregisterReceiver(receiver) + LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver) receiverRegistered = false } } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/Routing.kt b/mobile/src/main/java/be/mygod/vpnhotspot/Routing.kt index fcffaed9..1bea0379 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/Routing.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/Routing.kt @@ -26,7 +26,6 @@ class Routing(private val upstream: String, val downstream: String, ownerAddress private val startScript = LinkedList() private val stopScript = LinkedList() var started = false - private set fun ipForward(): Routing { startScript.add("echo 1 >/proc/sys/net/ipv4/ip_forward") diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt index 69408602..e717d258 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/SettingsPreferenceFragment.kt @@ -5,6 +5,7 @@ import android.net.Uri import android.os.Bundle import android.support.customtabs.CustomTabsIntent import android.support.v4.content.ContextCompat +import android.support.v4.content.LocalBroadcastManager import android.widget.Toast import com.takisoft.fix.support.v7.preference.PreferenceFragmentCompatDividers import java.io.IOException @@ -18,6 +19,7 @@ class SettingsPreferenceFragment : PreferenceFragmentCompatDividers() { addPreferencesFromResource(R.xml.pref_settings) findPreference("service.clean").setOnPreferenceClickListener { Routing.clean() + LocalBroadcastManager.getInstance(context!!).sendBroadcastSync(Intent(App.ACTION_CLEAN_ROUTINGS)) true } findPreference("misc.logcat").setOnPreferenceClickListener { diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/TetheringService.kt b/mobile/src/main/java/be/mygod/vpnhotspot/TetheringService.kt index b5925a06..61d92c13 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/TetheringService.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/TetheringService.kt @@ -29,10 +29,15 @@ class TetheringService : Service(), VpnListener.Callback { private var upstream: String? = null private var receiverRegistered = false private val receiver = broadcastReceiver { _, intent -> - val remove = routings.keys - NetUtils.getTetheredIfaces(intent.extras) - if (remove.isEmpty()) return@broadcastReceiver - val failed = remove.any { routings.remove(it)?.stop() == false } - if (failed) Toast.makeText(this, getText(R.string.noisy_su_failure), Toast.LENGTH_SHORT).show() + when (intent.action) { + NetUtils.ACTION_TETHER_STATE_CHANGED -> { + val remove = routings.keys - NetUtils.getTetheredIfaces(intent.extras) + if (remove.isEmpty()) return@broadcastReceiver + val failed = remove.any { routings.remove(it)?.stop() == false } + if (failed) Toast.makeText(this, getText(R.string.noisy_su_failure), Toast.LENGTH_SHORT).show() + } + App.ACTION_CLEAN_ROUTINGS -> for (iface in routings.keys) routings[iface] = null + } updateRoutings() } diff --git a/mobile/src/main/res/values-zh-rCN/strings.xml b/mobile/src/main/res/values-zh-rCN/strings.xml index a0656897..90c11e26 100644 --- a/mobile/src/main/res/values-zh-rCN/strings.xml +++ b/mobile/src/main/res/values-zh-rCN/strings.xml @@ -39,8 +39,7 @@ 服务 下游 DNS 服务器:端口 - 清理路由规则 - 请关闭所有服务后使用 + 清理/重新应用路由规则 杂项 导出日志 这种非常有用哇 diff --git a/mobile/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml index 0aa7b934..fa030fd5 100644 --- a/mobile/src/main/res/values/strings.xml +++ b/mobile/src/main/res/values/strings.xml @@ -42,8 +42,7 @@ Service Downstream DNS server:port - Clean routing rules - Only use after having shut down everything + Clean/reapply routing rules Misc Export logcat Such useful very wow diff --git a/mobile/src/main/res/xml/pref_settings.xml b/mobile/src/main/res/xml/pref_settings.xml index ee9e4ca4..afa86b72 100644 --- a/mobile/src/main/res/xml/pref_settings.xml +++ b/mobile/src/main/res/xml/pref_settings.xml @@ -9,8 +9,7 @@ android:defaultValue="8.8.8.8:53"/> + android:title="@string/settings_service_clean"/>