From df304fe674023da58f793f605c9979199df10872 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sat, 21 Jul 2018 14:41:48 +0800 Subject: [PATCH] Disable editing repeater credentials on Android 5 --- .../mygod/vpnhotspot/manage/RepeaterManager.kt | 16 ++++++++-------- .../net/wifi/P2pSupplicantConfiguration.kt | 8 ++++---- .../mygod/vpnhotspot/net/wifi/WifiP2pDialog.kt | 6 +++++- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt index 40f5783e..4bcf482c 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/RepeaterManager.kt @@ -1,21 +1,21 @@ package be.mygod.vpnhotspot.manage +import android.annotation.TargetApi import android.content.ComponentName import android.content.DialogInterface import android.content.Intent import android.content.ServiceConnection -import androidx.databinding.BaseObservable -import androidx.databinding.Bindable import android.net.wifi.WifiConfiguration import android.net.wifi.p2p.WifiP2pGroup 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.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.App.Companion.app import be.mygod.vpnhotspot.databinding.ListitemRepeaterBinding @@ -114,7 +114,7 @@ class RepeaterManager(private val parent: TetheringFragment) : Manager(), Servic var dialog: WifiP2pDialog? = null dialog = WifiP2pDialog(mainActivity, DialogInterface.OnClickListener { _, 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) false -> mainActivity.snackbar().setText(R.string.noisy_su_failure).show() null -> mainActivity.snackbar().setText(R.string.root_unavailable).show() diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/P2pSupplicantConfiguration.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/P2pSupplicantConfiguration.kt index 1cbd98d1..4af032ee 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/P2pSupplicantConfiguration.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/P2pSupplicantConfiguration.kt @@ -3,6 +3,7 @@ package be.mygod.vpnhotspot.net.wifi import android.net.wifi.WifiConfiguration import android.os.Build import android.util.Log +import androidx.annotation.RequiresApi import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.util.loggerSu 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? { val content = content ?: return null val tempFile = File.createTempFile("vpnhotspot-", ".conf", app.cacheDir) @@ -71,10 +74,7 @@ class P2pSupplicantConfiguration { Crashlytics.log(Log.WARN, TAG, "Invalid conf ($ssidFound, $pskFound): $content") } 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", - if (Build.VERSION.SDK_INT >= 23) "pkill wpa_supplicant" - else "set `ps | grep wpa_supplicant`; kill \$2") + return noisySu("cat ${tempFile.absolutePath} > /data/misc/wifi/p2p_supplicant.conf", "pkill wpa_supplicant") } finally { if (!tempFile.delete()) tempFile.deleteOnExit() } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiP2pDialog.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiP2pDialog.kt index e888d441..60642868 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiP2pDialog.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiP2pDialog.kt @@ -4,6 +4,7 @@ import android.content.Context import android.content.DialogInterface import android.net.wifi.WifiConfiguration import android.net.wifi.WifiConfiguration.AuthAlgorithm +import android.os.Build import android.os.Bundle import com.google.android.material.textfield.TextInputLayout import androidx.appcompat.app.AlertDialog @@ -46,7 +47,10 @@ class WifiP2pDialog(mContext: Context, private val mListener: DialogInterface.On setTitle(R.string.repeater_configure) mSsid = mView.findViewById(R.id.ssid) 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, context.getString(R.string.wifi_cancel), mListener) setButton(DialogInterface.BUTTON_NEUTRAL, context.getString(R.string.repeater_reset_credentials), mListener)