Disable editing repeater credentials on Android 5

This commit is contained in:
Mygod
2018-07-21 14:41:48 +08:00
parent 694ff302c3
commit df304fe674
3 changed files with 17 additions and 13 deletions

View File

@@ -1,21 +1,21 @@
package be.mygod.vpnhotspot.manage package be.mygod.vpnhotspot.manage
import android.annotation.TargetApi
import android.content.ComponentName import android.content.ComponentName
import android.content.DialogInterface import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.content.ServiceConnection import android.content.ServiceConnection
import androidx.databinding.BaseObservable
import androidx.databinding.Bindable
import android.net.wifi.WifiConfiguration import android.net.wifi.WifiConfiguration
import android.net.wifi.p2p.WifiP2pGroup import android.net.wifi.p2p.WifiP2pGroup
import android.os.IBinder import android.os.IBinder
import androidx.core.content.ContextCompat
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDialog
import androidx.recyclerview.widget.RecyclerView
import android.view.WindowManager import android.view.WindowManager
import android.widget.EditText import android.widget.EditText
import android.widget.Toast import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDialog
import androidx.core.content.ContextCompat
import androidx.databinding.BaseObservable
import androidx.databinding.Bindable
import androidx.recyclerview.widget.RecyclerView
import be.mygod.vpnhotspot.* import be.mygod.vpnhotspot.*
import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.App.Companion.app
import be.mygod.vpnhotspot.databinding.ListitemRepeaterBinding import be.mygod.vpnhotspot.databinding.ListitemRepeaterBinding
@@ -114,7 +114,7 @@ class RepeaterManager(private val parent: TetheringFragment) : Manager(), Servic
var dialog: WifiP2pDialog? = null var dialog: WifiP2pDialog? = null
dialog = WifiP2pDialog(mainActivity, DialogInterface.OnClickListener { _, which -> dialog = WifiP2pDialog(mainActivity, DialogInterface.OnClickListener { _, which ->
when (which) { when (which) {
DialogInterface.BUTTON_POSITIVE -> when (conf.update(dialog!!.config!!)) { DialogInterface.BUTTON_POSITIVE -> @TargetApi(23) when (conf.update(dialog!!.config!!)) {
true -> app.handler.postDelayed(binder::requestGroupUpdate, 1000) true -> app.handler.postDelayed(binder::requestGroupUpdate, 1000)
false -> mainActivity.snackbar().setText(R.string.noisy_su_failure).show() false -> mainActivity.snackbar().setText(R.string.noisy_su_failure).show()
null -> mainActivity.snackbar().setText(R.string.root_unavailable).show() null -> mainActivity.snackbar().setText(R.string.root_unavailable).show()

View File

@@ -3,6 +3,7 @@ package be.mygod.vpnhotspot.net.wifi
import android.net.wifi.WifiConfiguration import android.net.wifi.WifiConfiguration
import android.os.Build import android.os.Build
import android.util.Log import android.util.Log
import androidx.annotation.RequiresApi
import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.App.Companion.app
import be.mygod.vpnhotspot.util.loggerSu import be.mygod.vpnhotspot.util.loggerSu
import be.mygod.vpnhotspot.util.noisySu import be.mygod.vpnhotspot.util.noisySu
@@ -47,6 +48,8 @@ class P2pSupplicantConfiguration {
} }
} }
// pkill not available on Lollipop. Source: https://android.googlesource.com/platform/system/core/+/master/shell_and_utilities/README.md
@RequiresApi(23)
fun update(config: WifiConfiguration): Boolean? { fun update(config: WifiConfiguration): Boolean? {
val content = content ?: return null val content = content ?: return null
val tempFile = File.createTempFile("vpnhotspot-", ".conf", app.cacheDir) val tempFile = File.createTempFile("vpnhotspot-", ".conf", app.cacheDir)
@@ -71,10 +74,7 @@ class P2pSupplicantConfiguration {
Crashlytics.log(Log.WARN, TAG, "Invalid conf ($ssidFound, $pskFound): $content") Crashlytics.log(Log.WARN, TAG, "Invalid conf ($ssidFound, $pskFound): $content")
} }
if (ssidFound == 0 || pskFound == 0) return false if (ssidFound == 0 || pskFound == 0) return false
// pkill not available on Lollipop. Source: https://android.googlesource.com/platform/system/core/+/master/shell_and_utilities/README.md return noisySu("cat ${tempFile.absolutePath} > /data/misc/wifi/p2p_supplicant.conf", "pkill wpa_supplicant")
return noisySu("cat ${tempFile.absolutePath} > /data/misc/wifi/p2p_supplicant.conf",
if (Build.VERSION.SDK_INT >= 23) "pkill wpa_supplicant"
else "set `ps | grep wpa_supplicant`; kill \$2")
} finally { } finally {
if (!tempFile.delete()) tempFile.deleteOnExit() if (!tempFile.delete()) tempFile.deleteOnExit()
} }

View File

@@ -4,6 +4,7 @@ import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.net.wifi.WifiConfiguration import android.net.wifi.WifiConfiguration
import android.net.wifi.WifiConfiguration.AuthAlgorithm import android.net.wifi.WifiConfiguration.AuthAlgorithm
import android.os.Build
import android.os.Bundle import android.os.Bundle
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
@@ -46,7 +47,10 @@ class WifiP2pDialog(mContext: Context, private val mListener: DialogInterface.On
setTitle(R.string.repeater_configure) setTitle(R.string.repeater_configure)
mSsid = mView.findViewById(R.id.ssid) mSsid = mView.findViewById(R.id.ssid)
mPassword = mView.findViewById(R.id.password) mPassword = mView.findViewById(R.id.password)
setButton(BUTTON_SUBMIT, context.getString(R.string.wifi_save), mListener) // Note: Reading persistent group information in p2p_supplicant.conf wasn't available until this commit:
// https://android.googlesource.com/platform/external/wpa_supplicant_8/+/216983bceec7c450951e2fbcd076b5c75d432e57%5E%21/
// which isn't merged until Android 6.0.
if (Build.VERSION.SDK_INT >= 23) setButton(BUTTON_SUBMIT, context.getString(R.string.wifi_save), mListener)
setButton(DialogInterface.BUTTON_NEGATIVE, setButton(DialogInterface.BUTTON_NEGATIVE,
context.getString(R.string.wifi_cancel), mListener) context.getString(R.string.wifi_cancel), mListener)
setButton(DialogInterface.BUTTON_NEUTRAL, context.getString(R.string.repeater_reset_credentials), mListener) setButton(DialogInterface.BUTTON_NEUTRAL, context.getString(R.string.repeater_reset_credentials), mListener)