Disable editing repeater credentials on Android 5
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user