95 lines
4.2 KiB
Kotlin
95 lines
4.2 KiB
Kotlin
package be.mygod.vpnhotspot
|
|
|
|
import android.content.ComponentName
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import android.content.ServiceConnection
|
|
import android.net.Uri
|
|
import android.os.Bundle
|
|
import android.os.IBinder
|
|
import android.support.customtabs.CustomTabsIntent
|
|
import android.support.v4.content.ContextCompat
|
|
import android.support.v4.content.LocalBroadcastManager
|
|
import android.support.v7.preference.Preference
|
|
import be.mygod.vpnhotspot.preference.AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat
|
|
import com.takisoft.fix.support.v7.preference.PreferenceFragmentCompatDividers
|
|
import java.net.NetworkInterface
|
|
|
|
class SettingsFragment : PreferenceFragmentCompatDividers(), ServiceConnection {
|
|
private lateinit var service: Preference
|
|
private var binder: HotspotService.HotspotBinder? = null
|
|
private val statusListener = broadcastReceiver { _, _ -> onStatusChanged() }
|
|
private val customTabsIntent by lazy {
|
|
CustomTabsIntent.Builder().setToolbarColor(ContextCompat.getColor(activity!!, R.color.colorPrimary)).build()
|
|
}
|
|
|
|
override fun onCreatePreferencesFix(savedInstanceState: Bundle?, rootKey: String?) {
|
|
addPreferencesFromResource(R.xml.pref_settings)
|
|
service = findPreference("service")
|
|
findPreference("service.clean").setOnPreferenceClickListener {
|
|
noisySu("iptables -t nat -F PREROUTING",
|
|
"while iptables -D FORWARD -j vpnhotspot_fwd; do done",
|
|
"iptables -F vpnhotspot_fwd",
|
|
"iptables -X vpnhotspot_fwd",
|
|
"while ip rule del lookup 62; do done",
|
|
"ip route flush table 62")
|
|
true
|
|
}
|
|
findPreference("misc.logcat").setOnPreferenceClickListener {
|
|
val intent = Intent(Intent.ACTION_SEND)
|
|
.setType("text/plain")
|
|
.putExtra(Intent.EXTRA_TEXT, Runtime.getRuntime().exec(arrayOf("logcat", "-d"))
|
|
.inputStream.bufferedReader().use { it.readText() })
|
|
startActivity(Intent.createChooser(intent, getString(R.string.abc_shareactionprovider_share_with)))
|
|
true
|
|
}
|
|
findPreference("misc.source").setOnPreferenceClickListener {
|
|
customTabsIntent.launchUrl(activity, Uri.parse("https://github.com/Mygod/VPNHotspot"))
|
|
true
|
|
}
|
|
findPreference("misc.donate").setOnPreferenceClickListener {
|
|
customTabsIntent.launchUrl(activity, Uri.parse("https://mygod.be/donate/"))
|
|
true
|
|
}
|
|
}
|
|
|
|
override fun onDisplayPreferenceDialog(preference: Preference) = when (preference.key) {
|
|
HotspotService.KEY_UPSTREAM -> displayPreferenceDialog(
|
|
AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat(), HotspotService.KEY_UPSTREAM,
|
|
Bundle().put(AlwaysAutoCompleteEditTextPreferenceDialogFragmentCompat.KEY_SUGGESTIONS,
|
|
NetworkInterface.getNetworkInterfaces().asSequence()
|
|
.filter { it.isUp && !it.isLoopback && it.interfaceAddresses.isNotEmpty() }
|
|
.map { it.name }.toList().toTypedArray()))
|
|
else -> super.onDisplayPreferenceDialog(preference)
|
|
}
|
|
|
|
override fun onStart() {
|
|
super.onStart()
|
|
val activity = activity!!
|
|
activity.bindService(Intent(activity, HotspotService::class.java), this, Context.BIND_AUTO_CREATE)
|
|
}
|
|
|
|
override fun onStop() {
|
|
onServiceDisconnected(null)
|
|
activity!!.unbindService(this)
|
|
super.onStop()
|
|
}
|
|
|
|
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
|
|
binder = service as HotspotService.HotspotBinder
|
|
onStatusChanged()
|
|
LocalBroadcastManager.getInstance(activity!!)
|
|
.registerReceiver(statusListener, intentFilter(HotspotService.STATUS_CHANGED))
|
|
}
|
|
|
|
override fun onServiceDisconnected(name: ComponentName?) {
|
|
LocalBroadcastManager.getInstance(activity!!).unregisterReceiver(statusListener)
|
|
binder = null
|
|
service.isEnabled = false
|
|
}
|
|
|
|
private fun onStatusChanged() {
|
|
service.isEnabled = binder!!.service.status == HotspotService.Status.IDLE
|
|
}
|
|
}
|