summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--framework/java/android/net/wifi/util/Environment.java13
-rw-r--r--service/java/com/android/server/wifi/mainline_supplicant/MainlineSupplicant.java19
2 files changed, 32 insertions, 0 deletions
diff --git a/framework/java/android/net/wifi/util/Environment.java b/framework/java/android/net/wifi/util/Environment.java
index f98265845a..a20b24744d 100644
--- a/framework/java/android/net/wifi/util/Environment.java
+++ b/framework/java/android/net/wifi/util/Environment.java
@@ -46,6 +46,12 @@ public class Environment {
new File("/apex", WIFI_APEX_NAME).getAbsolutePath();
/**
+ * Path to the mainline supplicant binary.
+ */
+ private static final String MAINLINE_SUPPLICANT_BINARY_PATH =
+ WIFI_APEX_PATH + "/bin/wpa_supplicant_mainline";
+
+ /**
* Wifi shared folder.
*/
public static File getWifiSharedDirectory() {
@@ -69,6 +75,13 @@ public class Environment {
}
/**
+ * Returns true if the mainline supplicant binary is in the Wifi Apex.
+ */
+ public static boolean isMainlineSupplicantBinaryInWifiApex() {
+ return new File(MAINLINE_SUPPLICANT_BINARY_PATH).isFile();
+ }
+
+ /**
* Return whether the VNDK version of the vendor partition is newer than the given API level.
* If the property is set to non-integer value, this means the vendor partition is using
* current API level and true is returned.
diff --git a/service/java/com/android/server/wifi/mainline_supplicant/MainlineSupplicant.java b/service/java/com/android/server/wifi/mainline_supplicant/MainlineSupplicant.java
index e347122942..2bf735a22d 100644
--- a/service/java/com/android/server/wifi/mainline_supplicant/MainlineSupplicant.java
+++ b/service/java/com/android/server/wifi/mainline_supplicant/MainlineSupplicant.java
@@ -26,6 +26,7 @@ import android.system.wifi.mainline_supplicant.IMainlineSupplicant;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.wifi.flags.Flags;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -45,9 +46,11 @@ public class MainlineSupplicant {
private final Object mLock = new Object();
private SupplicantDeathRecipient mDeathRecipient;
private CountDownLatch mWaitForDeathLatch;
+ private final boolean mIsServiceAvailable;
public MainlineSupplicant() {
mDeathRecipient = new SupplicantDeathRecipient();
+ mIsServiceAvailable = canServiceBeAccessed();
}
@VisibleForTesting
@@ -91,6 +94,22 @@ public class MainlineSupplicant {
}
/**
+ * Check whether the mainline supplicant service can be accessed.
+ */
+ private boolean canServiceBeAccessed() {
+ // Requires an Android B+ Selinux policy and a copy of the binary.
+ return Environment.isSdkAtLeastB() && Flags.mainlineSupplicant()
+ && Environment.isMainlineSupplicantBinaryInWifiApex();
+ }
+
+ /**
+ * Returns true if the mainline supplicant service is available on this device.
+ */
+ public boolean isAvailable() {
+ return mIsServiceAvailable;
+ }
+
+ /**
* Start the mainline supplicant process.
*
* @return true if the process was started, false otherwise.