diff options
-rw-r--r-- | framework/java/android/net/wifi/util/Environment.java | 13 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/mainline_supplicant/MainlineSupplicant.java | 19 |
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. |