diff options
Diffstat (limited to 'libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java')
-rw-r--r-- | libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java | 193 |
1 files changed, 165 insertions, 28 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java index 3392ac2e6..ad5231d4e 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java @@ -19,6 +19,14 @@ package com.android.wifitrackerlib; import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE; import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLED; import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_PERMANENTLY_DISABLED; +import static android.net.wifi.WifiInfo.SECURITY_TYPE_EAP; +import static android.net.wifi.WifiInfo.SECURITY_TYPE_EAP_WPA3_ENTERPRISE; +import static android.net.wifi.WifiInfo.SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT; +import static android.net.wifi.WifiInfo.SECURITY_TYPE_OPEN; +import static android.net.wifi.WifiInfo.SECURITY_TYPE_OWE; +import static android.net.wifi.WifiInfo.SECURITY_TYPE_PSK; +import static android.net.wifi.WifiInfo.SECURITY_TYPE_SAE; +import static android.net.wifi.WifiInfo.SECURITY_TYPE_WEP; import static java.util.Comparator.comparingInt; @@ -1080,26 +1088,59 @@ public class Utils { } /** - * Converts a frequency in MHz to the display string of the corresponding Wi-Fi band. + * Converts a frequency to one of + * {@link WifiScanner#WIFI_BAND_UNSPECIFIED}, + * {@link WifiScanner#WIFI_BAND_24_GHZ}, + * {@link WifiScanner#WIFI_BAND_5_GHZ}, + * {@link WifiScanner#WIFI_BAND_6_GHZ} */ - public static String getBandString(@NonNull Context context, int freqMhz) { + public static int getBand(int freqMhz) { if (freqMhz >= WifiEntry.MIN_FREQ_24GHZ && freqMhz < WifiEntry.MAX_FREQ_24GHZ) { - return context.getResources().getString(R.string.wifitrackerlib_wifi_band_24_ghz); + return WifiScanner.WIFI_BAND_24_GHZ; } else if (freqMhz >= WifiEntry.MIN_FREQ_5GHZ && freqMhz < WifiEntry.MAX_FREQ_5GHZ) { - return context.getResources().getString(R.string.wifitrackerlib_wifi_band_5_ghz); + return WifiScanner.WIFI_BAND_5_GHZ; } else if (freqMhz >= WifiEntry.MIN_FREQ_6GHZ && freqMhz < WifiEntry.MAX_FREQ_6GHZ) { - return context.getResources().getString(R.string.wifitrackerlib_wifi_band_6_ghz); + return WifiScanner.WIFI_BAND_6_GHZ; } else { - return context.getResources().getString(R.string.wifitrackerlib_wifi_band_unknown); + return WifiScanner.WIFI_BAND_UNSPECIFIED; } } /** + * Converts one of + * {@link WifiScanner#WIFI_BAND_UNSPECIFIED}, + * {@link WifiScanner#WIFI_BAND_24_GHZ}, + * {@link WifiScanner#WIFI_BAND_5_GHZ}, + * {@link WifiScanner#WIFI_BAND_6_GHZ} + * to the display string of the corresponding Wi-Fi band. + */ + public static String bandToBandString(@NonNull Context context, int scannerBand) { + switch (scannerBand) { + case WifiScanner.WIFI_BAND_24_GHZ: + return context.getResources().getString(R.string.wifitrackerlib_wifi_band_24_ghz); + case WifiScanner.WIFI_BAND_5_GHZ: + return context.getResources().getString(R.string.wifitrackerlib_wifi_band_5_ghz); + case WifiScanner.WIFI_BAND_6_GHZ: + return context.getResources().getString(R.string.wifitrackerlib_wifi_band_6_ghz); + default: + return context.getResources().getString(R.string.wifitrackerlib_wifi_band_unknown); + } + } + + /** + * Converts a frequency in MHz to the display string of the corresponding Wi-Fi band. + */ + public static String frequencyToBandString(@NonNull Context context, int freqMhz) { + return bandToBandString(context, getBand(freqMhz)); + } + + /** * Converts the band info in WifiInfo to the display string of the corresponding Wi-Fi band(s). */ - public static String getBandString(@NonNull Context context, @NonNull WifiInfo wifiInfo) { + public static String wifiInfoToBandString( + @NonNull Context context, @NonNull WifiInfo wifiInfo) { if (!BuildCompat.isAtLeastU()) { - return getBandString(context, wifiInfo.getFrequency()); + return frequencyToBandString(context, wifiInfo.getFrequency()); } StringJoiner sj = new StringJoiner( @@ -1109,27 +1150,49 @@ public class Utils { .map(MloLink::getBand) .distinct() .sorted() - .forEach((band) -> { - switch (band) { - case WifiScanner.WIFI_BAND_24_GHZ: - sj.add(context.getResources() - .getString(R.string.wifitrackerlib_wifi_band_24_ghz)); - break; - case WifiScanner.WIFI_BAND_5_GHZ: - sj.add(context.getResources() - .getString(R.string.wifitrackerlib_wifi_band_5_ghz)); - break; - case WifiScanner.WIFI_BAND_6_GHZ: - sj.add(context.getResources() - .getString(R.string.wifitrackerlib_wifi_band_6_ghz)); - break; - default: - sj.add(context.getResources() - .getString(R.string.wifitrackerlib_wifi_band_unknown)); - } - }); + .forEach((band) -> sj.add(bandToBandString(context, band))); if (sj.length() == 0) { - return getBandString(context, wifiInfo.getFrequency()); + return frequencyToBandString(context, wifiInfo.getFrequency()); + } + return sj.toString(); + } + + /** + * Returns the link speed string of the WifiInfo for Tx if isTx is {@code true}, else + * return the Rx link speed. + */ + public static String getSpeedString( + @NonNull Context context, @Nullable WifiInfo wifiInfo, boolean isTx) { + if (wifiInfo == null) { + return ""; + } + int wifiInfoSpeedMbps = + isTx ? wifiInfo.getTxLinkSpeedMbps() : wifiInfo.getRxLinkSpeedMbps(); + if (wifiInfoSpeedMbps <= 0) { + return ""; + } + if (!BuildCompat.isAtLeastU()) { + return context.getString(R.string.wifitrackerlib_link_speed_mbps, + wifiInfoSpeedMbps); + } + List<MloLink> activeMloLinks = wifiInfo.getAssociatedMloLinks().stream() + .filter((link) -> link.getState() == MloLink.MLO_LINK_STATE_ACTIVE) + .toList(); + if (activeMloLinks.size() <= 1) { + return context.getString(R.string.wifitrackerlib_link_speed_mbps, + wifiInfoSpeedMbps); + } + StringJoiner sj = new StringJoiner( + context.getString(R.string.wifitrackerlib_multiband_separator)); + for (MloLink link : activeMloLinks) { + int linkSpeedMbps = isTx ? link.getTxLinkSpeedMbps() : link.getRxLinkSpeedMbps(); + if (linkSpeedMbps <= 0) { + continue; + } + sj.add(context.getString( + R.string.wifitrackerlib_link_speed_on_band, + context.getString(R.string.wifitrackerlib_link_speed_mbps, linkSpeedMbps), + bandToBandString(context, link.getBand()))); } return sj.toString(); } @@ -1144,4 +1207,78 @@ public class Utils { } return NonSdkApiWrapper.getVcnWifiInfo(capabilities); } + + /** + * Converts security types to a display string. + */ + public static String getSecurityString(@NonNull Context context, + @NonNull List<Integer> securityTypes, boolean concise) { + if (securityTypes.size() == 0) { + return concise ? "" : context.getString(R.string.wifitrackerlib_wifi_security_none); + } + if (securityTypes.size() == 1) { + final int security = securityTypes.get(0); + switch(security) { + case SECURITY_TYPE_EAP: + return concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_eap_wpa_wpa2) : + context.getString( + R.string.wifitrackerlib_wifi_security_eap_wpa_wpa2); + case SECURITY_TYPE_EAP_WPA3_ENTERPRISE: + return concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_eap_wpa3) : + context.getString( + R.string.wifitrackerlib_wifi_security_eap_wpa3); + case SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT: + return concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_eap_suiteb) : + context.getString(R.string.wifitrackerlib_wifi_security_eap_suiteb); + case SECURITY_TYPE_PSK: + return concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_wpa_wpa2) : + context.getString( + R.string.wifitrackerlib_wifi_security_wpa_wpa2); + case SECURITY_TYPE_WEP: + return context.getString(R.string.wifitrackerlib_wifi_security_wep); + case SECURITY_TYPE_SAE: + return concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_sae) : + context.getString(R.string.wifitrackerlib_wifi_security_sae); + case SECURITY_TYPE_OWE: + return concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_owe) : + context.getString(R.string.wifitrackerlib_wifi_security_owe); + case SECURITY_TYPE_OPEN: + return concise ? "" : context.getString( + R.string.wifitrackerlib_wifi_security_none); + } + } + if (securityTypes.size() == 2) { + if (securityTypes.contains(SECURITY_TYPE_OPEN) + && securityTypes.contains(SECURITY_TYPE_OWE)) { + StringJoiner sj = new StringJoiner("/"); + sj.add(context.getString(R.string.wifitrackerlib_wifi_security_none)); + sj.add(concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_owe) : + context.getString(R.string.wifitrackerlib_wifi_security_owe)); + return sj.toString(); + } + if (securityTypes.contains(SECURITY_TYPE_PSK) + && securityTypes.contains(SECURITY_TYPE_SAE)) { + return concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_wpa_wpa2_wpa3) : + context.getString( + R.string.wifitrackerlib_wifi_security_wpa_wpa2_wpa3); + } + if (securityTypes.contains(SECURITY_TYPE_EAP) + && securityTypes.contains(SECURITY_TYPE_EAP_WPA3_ENTERPRISE)) { + return concise ? context.getString( + R.string.wifitrackerlib_wifi_security_short_eap_wpa_wpa2_wpa3) : + context.getString( + R.string.wifitrackerlib_wifi_security_eap_wpa_wpa2_wpa3); + } + } + // Unknown security types + return concise ? "" : context.getString(R.string.wifitrackerlib_wifi_security_none); + } } |