summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-02 23:58:19 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-02 23:58:19 +0000
commit6be5a5b74dec5a129e5147c14fa4d3a14ac94dbf (patch)
tree36c2e576b8c46c113f1a32fffaf72abc33019356
parent52794ef3f27a94bcad74d4188fc45c89e4dd0a7e (diff)
parent2f5d40b1318f1758ad1397fdaf4bd65a54e60ff6 (diff)
downloadwifi-simpleperf-release.tar.gz
Snap for 11400057 from 2f5d40b1318f1758ad1397fdaf4bd65a54e60ff6 to simpleperf-releasesimpleperf-release
Change-Id: I217719c460c81f4eb713f524ebaee8003b9725a8
-rw-r--r--libs/WifiTrackerLib/Android.bp1
-rw-r--r--libs/WifiTrackerLib/res/values-ar/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-ca/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-ca/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-cs/strings.xml4
-rw-r--r--libs/WifiTrackerLib/res/values-eu/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-fr-rCA/strings.xml4
-rw-r--r--libs/WifiTrackerLib/res/values-hy/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-iw/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-kn/strings.xml6
-rw-r--r--libs/WifiTrackerLib/res/values-or/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-or/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-pa/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-pt-rPT/arrays.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-pt-rPT/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-ru/strings.xml4
-rw-r--r--libs/WifiTrackerLib/res/values-sk/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-zh-rCN/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-zh-rHK/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values/config.xml20
-rw-r--r--libs/WifiTrackerLib/res/values/strings.xml6
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java80
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java4
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java135
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/KnownNetworkEntry.java9
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java21
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkRequestEntry.java5
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java20
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java4
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java32
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java4
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java4
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java93
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java193
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java143
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java155
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiTrackerInjector.java16
-rw-r--r--libs/WifiTrackerLib/tests/Android.bp3
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java133
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/KnownNetworkEntryTest.java9
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/MergedCarrierEntryTest.java22
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/NetworkDetailsTrackerTest.java3
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java27
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/SavedNetworkTrackerTest.java4
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardNetworkDetailsTrackerTest.java3
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java175
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/UtilsTest.java150
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java293
48 files changed, 1344 insertions, 469 deletions
diff --git a/libs/WifiTrackerLib/Android.bp b/libs/WifiTrackerLib/Android.bp
index ca94243ff..baf355e9b 100644
--- a/libs/WifiTrackerLib/Android.bp
+++ b/libs/WifiTrackerLib/Android.bp
@@ -1,4 +1,5 @@
package {
+ default_team: "trendy_team_fwk_wifi_hal",
default_applicable_licenses: ["Android-Apache-2.0"],
}
diff --git a/libs/WifiTrackerLib/res/values-ar/strings.xml b/libs/WifiTrackerLib/res/values-ar/strings.xml
index 298ecfe2a..2b4a3fd03 100644
--- a/libs/WifiTrackerLib/res/values-ar/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ar/strings.xml
@@ -19,7 +19,7 @@
<string name="wifitrackerlib_summary_separator" msgid="6613897475167609815">" / "</string>
<string name="wifitrackerlib_checking_for_internet_access" msgid="4787495471423429472">"جارٍ التأكّد من الاتصال بالإنترنت..."</string>
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"الاتصال التلقائي غير مُفعَّل."</string>
- <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"تم الحفظ من قِبل <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"تم الحفظ من قِبل <xliff:g id="NAME">%1$s</xliff:g>."</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"لن يتم الاتصال بالإنترنت تلقائيًا."</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"لا يتوفّر اتصال بالإنترنت"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"حدثت مشكلة في المصادقة."</string>
diff --git a/libs/WifiTrackerLib/res/values-ca/arrays.xml b/libs/WifiTrackerLib/res/values-ca/arrays.xml
index 3d226f588..8c28cf048 100644
--- a/libs/WifiTrackerLib/res/values-ca/arrays.xml
+++ b/libs/WifiTrackerLib/res/values-ca/arrays.xml
@@ -26,7 +26,7 @@
<item msgid="9055468790485684083">"S\'està connectant…"</item>
<item msgid="6099499723199990208">"S\'està autenticant…"</item>
<item msgid="6794055951297347103">"S\'està obtenint l\'adreça IP…"</item>
- <item msgid="5450920562291300229">"Connectada"</item>
+ <item msgid="5450920562291300229">"Connectat"</item>
<item msgid="6332116533879646145">"Suspesa"</item>
<item msgid="294459081501073818">"S\'està desconnectant…"</item>
<item msgid="1577368920272598676">"Desconnectada"</item>
diff --git a/libs/WifiTrackerLib/res/values-ca/strings.xml b/libs/WifiTrackerLib/res/values-ca/strings.xml
index 5d1002fd3..fc28a37a1 100644
--- a/libs/WifiTrackerLib/res/values-ca/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ca/strings.xml
@@ -21,7 +21,7 @@
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"Connexió automàtica desactivada"</string>
<string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Desada per <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"No es connectarà automàticament"</string>
- <string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Sense accés a Internet"</string>
+ <string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"No hi ha accés a Internet"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"Problema d\'autenticació"</string>
<string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"Comprova la contrasenya i torna-ho a provar"</string>
<string name="wifitrackerlib_wifi_disabled_network_failure" msgid="3046956554224277166">"Error de configuració d\'IP"</string>
diff --git a/libs/WifiTrackerLib/res/values-cs/strings.xml b/libs/WifiTrackerLib/res/values-cs/strings.xml
index ed574bb8a..0472dc5f7 100644
--- a/libs/WifiTrackerLib/res/values-cs/strings.xml
+++ b/libs/WifiTrackerLib/res/values-cs/strings.xml
@@ -19,9 +19,9 @@
<string name="wifitrackerlib_summary_separator" msgid="6613897475167609815">" / "</string>
<string name="wifitrackerlib_checking_for_internet_access" msgid="4787495471423429472">"Kontrola přístupu k internetu…"</string>
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"Automatické připojení je vypnuté"</string>
- <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Uložil(a): <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Uloženo uživatelem <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"Nelze se automaticky připojit"</string>
- <string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Není připojení k internetu"</string>
+ <string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Nejste připojeni k internetu"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"Problém s ověřením"</string>
<string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"Zkontrolujte heslo a zkuste to znovu"</string>
<string name="wifitrackerlib_wifi_disabled_network_failure" msgid="3046956554224277166">"Selhání konfigurace protokolu IP"</string>
diff --git a/libs/WifiTrackerLib/res/values-eu/strings.xml b/libs/WifiTrackerLib/res/values-eu/strings.xml
index 9e5526f3c..58cc61c3f 100644
--- a/libs/WifiTrackerLib/res/values-eu/strings.xml
+++ b/libs/WifiTrackerLib/res/values-eu/strings.xml
@@ -75,7 +75,7 @@
<string name="wifitrackerlib_osu_completing_sign_up" msgid="4359503050543182480">"Izena ematen…"</string>
<string name="wifitrackerlib_osu_sign_up_failed" msgid="3964140125523395898">"Ezin izan da erregistratu. Berriro saiatzeko, ukitu hau."</string>
<string name="wifitrackerlib_osu_sign_up_complete" msgid="3279606633343124580">"Erregistratu da. Konektatzen…"</string>
- <string name="wifitrackerlib_imsi_protection_warning" msgid="7202210931586169466">"Gailuaren kokapenaren jarraipena egiteko balio duen SIM identifikatzaile bat jasotzen du sare honek. "<annotation id="url">"Lortu informazio gehiago"</annotation></string>
+ <string name="wifitrackerlib_imsi_protection_warning" msgid="7202210931586169466">"Gailuaren kokapenaren jarraipena egiteko balio duen SIM ID bat jasotzen du sare honek. "<annotation id="url">"Lortu informazio gehiago"</annotation></string>
<string name="wifitrackerlib_wifi_wont_autoconnect_for_now" msgid="4923161724964349851">"Oraingoz ez da automatikoki konektatuko wifira"</string>
<string name="wifitrackerlib_wifi_standard_unknown" msgid="8339211498889012019">"Ezezaguna"</string>
<string name="wifitrackerlib_wifi_standard_legacy" msgid="7760511318791054384">"Zaharkitua"</string>
diff --git a/libs/WifiTrackerLib/res/values-fr-rCA/strings.xml b/libs/WifiTrackerLib/res/values-fr-rCA/strings.xml
index 968ceaccf..9248e42fe 100644
--- a/libs/WifiTrackerLib/res/values-fr-rCA/strings.xml
+++ b/libs/WifiTrackerLib/res/values-fr-rCA/strings.xml
@@ -19,7 +19,7 @@
<string name="wifitrackerlib_summary_separator" msgid="6613897475167609815">" / "</string>
<string name="wifitrackerlib_checking_for_internet_access" msgid="4787495471423429472">"Recherche d\'un accès Internet…"</string>
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"La connexion automatique est désactivée"</string>
- <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Enregistré par <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Enregistrés par <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"Reconnexion automatique impossible"</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Aucun accès à Internet"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"Problème d\'authentification"</string>
@@ -57,7 +57,7 @@
<string name="wifitrackerlib_wifi_security_short_eap_suiteb" msgid="6335062557041604336">"Suite-B-192"</string>
<string name="wifitrackerlib_wifi_security_eap_suiteb" msgid="4715703239786225763">"WPA3-Enterprise 192 bits"</string>
<string name="wifitrackerlib_wifi_security_short_wpa_wpa2" msgid="6770438383385707243">"WPA/WPA2"</string>
- <string name="wifitrackerlib_wifi_security_wpa_wpa2" msgid="5767878305316110228">"WPA/WPA2-Personnel"</string>
+ <string name="wifitrackerlib_wifi_security_wpa_wpa2" msgid="5767878305316110228">"WPA/WPA2-Personal"</string>
<string name="wifitrackerlib_wifi_security_short_wpa_wpa2_wpa3" msgid="4489424775550194618">"WPA/WPA2/WPA3"</string>
<string name="wifitrackerlib_wifi_security_wpa_wpa2_wpa3" msgid="4154428413248489642">"WPA/WPA2/WPA3-Personal"</string>
<string name="wifitrackerlib_wifi_security_wep" msgid="7714779033848180369">"WEP"</string>
diff --git a/libs/WifiTrackerLib/res/values-hy/strings.xml b/libs/WifiTrackerLib/res/values-hy/strings.xml
index f1749bb5b..1a881b219 100644
--- a/libs/WifiTrackerLib/res/values-hy/strings.xml
+++ b/libs/WifiTrackerLib/res/values-hy/strings.xml
@@ -19,7 +19,7 @@
<string name="wifitrackerlib_summary_separator" msgid="6613897475167609815">" / "</string>
<string name="wifitrackerlib_checking_for_internet_access" msgid="4787495471423429472">"Ինտերնետի հասանելիության ստուգում…"</string>
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"Ավտոմատ միացումն անջատված է"</string>
- <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Պահված է՝ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Ով է պահել՝ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"Չի միանա ավտոմատ"</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Ինտերնետ կապ չկա"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"Նույնականացման խնդիր"</string>
diff --git a/libs/WifiTrackerLib/res/values-iw/strings.xml b/libs/WifiTrackerLib/res/values-iw/strings.xml
index 500806c8a..c2366b405 100644
--- a/libs/WifiTrackerLib/res/values-iw/strings.xml
+++ b/libs/WifiTrackerLib/res/values-iw/strings.xml
@@ -19,7 +19,7 @@
<string name="wifitrackerlib_summary_separator" msgid="6613897475167609815">" / "</string>
<string name="wifitrackerlib_checking_for_internet_access" msgid="4787495471423429472">"מתבצעת בדיקה לצורך גישה לאינטרנט..."</string>
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"החיבור האוטומטי כבוי"</string>
- <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"נשמרה על-ידי: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"נשמרה על-ידי <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"לא יתבצע חיבור באופן אוטומטי"</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"אין גישה לאינטרנט"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"בעיית אימות"</string>
diff --git a/libs/WifiTrackerLib/res/values-kn/strings.xml b/libs/WifiTrackerLib/res/values-kn/strings.xml
index e47928534..acdc3716f 100644
--- a/libs/WifiTrackerLib/res/values-kn/strings.xml
+++ b/libs/WifiTrackerLib/res/values-kn/strings.xml
@@ -23,18 +23,18 @@
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕನೆಕ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶವಿಲ್ಲ"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"ದೃಢೀಕರಣದ ಸಮಸ್ಯೆ"</string>
- <string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"ಪಾಸ್‌ವರ್ಡ್ ಪರಿಶೀಲಿಸಿ, ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
+ <string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"ಪಾಸ್‌ವರ್ಡ್ ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="wifitrackerlib_wifi_disabled_network_failure" msgid="3046956554224277166">"IP ಕಾನ್ಫಿಗರೇಶನ್ ವೈಫಲ್ಯ"</string>
<string name="wifitrackerlib_wifi_disabled_transition_disable_indication" msgid="6416221593061166867">"ಪ್ರಸ್ತುತ ಭದ್ರತಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಜೊತೆ ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="wifitrackerlib_wifi_disabled_generic" msgid="4278806060337007814">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
- <string name="wifitrackerlib_wifi_ap_unable_to_handle_new_sta" msgid="931922372010639716">"ಆ್ಯಕ್ಸೆಸ್ ಪಾಯಿಂಟ್ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string>
+ <string name="wifitrackerlib_wifi_ap_unable_to_handle_new_sta" msgid="931922372010639716">"ಪ್ರವೇಶ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string>
<string name="wifitrackerlib_wifi_poor_channel_conditions" msgid="26484680900376236">"ತಾತ್ಕಾಲಿಕ ಕಳಪೆ ನೆಟ್‌ವರ್ಕ್ ಸ್ಥಿತಿಗಳು"</string>
<string name="wifitrackerlib_wifi_mbo_oce_assoc_disallowed_insufficient_rssi" msgid="5078611817423181773">"ದುರ್ಬಲ ಸಿಗ್ನಲ್. ರೂಟರ್‌ನ ಹತ್ತಿರ ಹೋಗಿ ಕನೆಕ್ಟ್ ಮಾಡಿ ನೋಡಿ."</string>
<string name="wifitrackerlib_wifi_mbo_assoc_disallowed_max_num_sta_associated" msgid="4418848919914618807">"ನೆಟ್‌ವರ್ಕ್ ಸಾಮರ್ಥ್ಯದ ಮಿತಿ ಮೀರಿದೆ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="wifitrackerlib_wifi_mbo_assoc_disallowed_cannot_connect" msgid="2692286425448897083">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="wifitrackerlib_wifi_network_not_found" msgid="1308764769892463388">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="wifitrackerlib_wifi_disconnected" msgid="3320414360982942679">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</string>
- <string name="wifitrackerlib_wifi_remembered" msgid="2406091442008343041">"ಸೇವ್‌ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="wifitrackerlib_wifi_remembered" msgid="2406091442008343041">"ಉಳಿಸಲಾಗಿದೆ"</string>
<string name="wifitrackerlib_wifi_metered_label" msgid="8818508951778620385">"ಮೀಟರ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="wifitrackerlib_wifi_unmetered_label" msgid="1902150402929678469">"ಮೀಟರ್ ಮಾಡಲಾಗಿಲ್ಲ"</string>
<string name="wifitrackerlib_connected_via_app" msgid="7823921840931347560">"<xliff:g id="NAME">%1$s</xliff:g> ಆ್ಯಪ್ ಮೂಲಕ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ"</string>
diff --git a/libs/WifiTrackerLib/res/values-or/arrays.xml b/libs/WifiTrackerLib/res/values-or/arrays.xml
index 838ab874c..607552e7b 100644
--- a/libs/WifiTrackerLib/res/values-or/arrays.xml
+++ b/libs/WifiTrackerLib/res/values-or/arrays.xml
@@ -26,7 +26,7 @@
<item msgid="9055468790485684083">"ସଂଯୋଗ ହେଉଛି…"</item>
<item msgid="6099499723199990208">"ପ୍ରାମାଣିକରଣ କରାଯାଉଛି…"</item>
<item msgid="6794055951297347103">"IP ଠିକଣା ପ୍ରାପ୍ତ କରୁଛି…"</item>
- <item msgid="5450920562291300229">"କନେକ୍ଟ କରାଯାଇଛି"</item>
+ <item msgid="5450920562291300229">"ସଂଯୋଗ ହୋଇଛି"</item>
<item msgid="6332116533879646145">"ସାମୟିକ ଭାବରେ ବନ୍ଦ କରାଯାଇଛି"</item>
<item msgid="294459081501073818">"ବିଚ୍ଛିନ୍ନ କରାଯାଉଛି…"</item>
<item msgid="1577368920272598676">"ବିଚ୍ଛିନ୍ନ କରାଯାଇଛି"</item>
diff --git a/libs/WifiTrackerLib/res/values-or/strings.xml b/libs/WifiTrackerLib/res/values-or/strings.xml
index 9e992f962..2cfe11bbe 100644
--- a/libs/WifiTrackerLib/res/values-or/strings.xml
+++ b/libs/WifiTrackerLib/res/values-or/strings.xml
@@ -34,7 +34,7 @@
<string name="wifitrackerlib_wifi_mbo_assoc_disallowed_cannot_connect" msgid="2692286425448897083">"ସଂଯୋଗ କରାଯାଇପାରିବ ନାହିଁ। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="wifitrackerlib_wifi_network_not_found" msgid="1308764769892463388">"ସଂଯୋଗ କରାଯାଇପାରିବ ନାହିଁ। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="wifitrackerlib_wifi_disconnected" msgid="3320414360982942679">"ବିଚ୍ଛିନ୍ନ କରାଯାଇଛି"</string>
- <string name="wifitrackerlib_wifi_remembered" msgid="2406091442008343041">"ସେଭ କରାଯାଇଛି"</string>
+ <string name="wifitrackerlib_wifi_remembered" msgid="2406091442008343041">"ସେଭ୍ କରାଯାଇଛି"</string>
<string name="wifitrackerlib_wifi_metered_label" msgid="8818508951778620385">"ମିଟର ହୋଇଥିବା"</string>
<string name="wifitrackerlib_wifi_unmetered_label" msgid="1902150402929678469">"ମିଟର ହୋଇନଥିବା"</string>
<string name="wifitrackerlib_connected_via_app" msgid="7823921840931347560">"<xliff:g id="NAME">%1$s</xliff:g> ମାଧ୍ୟମରେ ସଂଯୋଗ କରାଯାଇଛି"</string>
diff --git a/libs/WifiTrackerLib/res/values-pa/strings.xml b/libs/WifiTrackerLib/res/values-pa/strings.xml
index 322e547c7..ba9beec75 100644
--- a/libs/WifiTrackerLib/res/values-pa/strings.xml
+++ b/libs/WifiTrackerLib/res/values-pa/strings.xml
@@ -23,7 +23,7 @@
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"ਕੋਈ ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ ਨਹੀਂ"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"ਪ੍ਰਮਾਣੀਕਰਨ ਸਮੱਸਿਆ"</string>
- <string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"ਪਾਸਵਰਡ ਦੀ ਜਾਂਚ ਕਰ ਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
+ <string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"ਪਾਸਵਰਡ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
<string name="wifitrackerlib_wifi_disabled_network_failure" msgid="3046956554224277166">"IP ਸੰਰੂਪਣ ਅਸਫਲਤਾ"</string>
<string name="wifitrackerlib_wifi_disabled_transition_disable_indication" msgid="6416221593061166867">"ਮੌਜੂਦਾ ਸੁਰੱਖਿਆ ਸੈਟਿੰਗਾਂ ਨਾਲ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string name="wifitrackerlib_wifi_disabled_generic" msgid="4278806060337007814">"ਬੰਦ ਕੀਤਾ ਗਿਆ"</string>
diff --git a/libs/WifiTrackerLib/res/values-pt-rPT/arrays.xml b/libs/WifiTrackerLib/res/values-pt-rPT/arrays.xml
index 351582278..822b09180 100644
--- a/libs/WifiTrackerLib/res/values-pt-rPT/arrays.xml
+++ b/libs/WifiTrackerLib/res/values-pt-rPT/arrays.xml
@@ -26,7 +26,7 @@
<item msgid="9055468790485684083">"A ligar…"</item>
<item msgid="6099499723199990208">"A autenticar…"</item>
<item msgid="6794055951297347103">"A obter endereço IP…"</item>
- <item msgid="5450920562291300229">"Ligada"</item>
+ <item msgid="5450920562291300229">"Ligado"</item>
<item msgid="6332116533879646145">"Suspenso"</item>
<item msgid="294459081501073818">"A desligar…"</item>
<item msgid="1577368920272598676">"Desligado"</item>
diff --git a/libs/WifiTrackerLib/res/values-pt-rPT/strings.xml b/libs/WifiTrackerLib/res/values-pt-rPT/strings.xml
index 0ba5796f0..179435b6f 100644
--- a/libs/WifiTrackerLib/res/values-pt-rPT/strings.xml
+++ b/libs/WifiTrackerLib/res/values-pt-rPT/strings.xml
@@ -23,7 +23,7 @@
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"Não é efetuada uma ligação automaticamente."</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Sem acesso à Internet."</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"Problema de autenticação"</string>
- <string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"Verifique palavra-passe e tente de novo"</string>
+ <string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"Verifique a palavra-passe e tente novamente."</string>
<string name="wifitrackerlib_wifi_disabled_network_failure" msgid="3046956554224277166">"Falha de configuração de IP"</string>
<string name="wifitrackerlib_wifi_disabled_transition_disable_indication" msgid="6416221593061166867">"Indisponível com as definições de segurança atuais"</string>
<string name="wifitrackerlib_wifi_disabled_generic" msgid="4278806060337007814">"Desativada"</string>
diff --git a/libs/WifiTrackerLib/res/values-ru/strings.xml b/libs/WifiTrackerLib/res/values-ru/strings.xml
index b25060f77..befda266b 100644
--- a/libs/WifiTrackerLib/res/values-ru/strings.xml
+++ b/libs/WifiTrackerLib/res/values-ru/strings.xml
@@ -21,9 +21,9 @@
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"Автоподключение отключено"</string>
<string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Сохранено: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"Подключение не будет выполняться автоматически"</string>
- <string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Без доступа к интернету"</string>
+ <string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Без доступа к Интернету"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"Ошибка аутентификации"</string>
- <string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"Неверный пароль. Повторите попытку."</string>
+ <string name="wifitrackerlib_wifi_check_password_try_again" msgid="2327777719175574699">"Похоже, вы указали неверный пароль. Повторите попытку."</string>
<string name="wifitrackerlib_wifi_disabled_network_failure" msgid="3046956554224277166">"Ошибка конфигурации IP"</string>
<string name="wifitrackerlib_wifi_disabled_transition_disable_indication" msgid="6416221593061166867">"Доступ закрыт согласно настройкам безопасности"</string>
<string name="wifitrackerlib_wifi_disabled_generic" msgid="4278806060337007814">"Отключено"</string>
diff --git a/libs/WifiTrackerLib/res/values-sk/strings.xml b/libs/WifiTrackerLib/res/values-sk/strings.xml
index c757dc71c..e3e495511 100644
--- a/libs/WifiTrackerLib/res/values-sk/strings.xml
+++ b/libs/WifiTrackerLib/res/values-sk/strings.xml
@@ -19,7 +19,7 @@
<string name="wifitrackerlib_summary_separator" msgid="6613897475167609815">" / "</string>
<string name="wifitrackerlib_checking_for_internet_access" msgid="4787495471423429472">"Kontroluje sa dostupnosť internetového pripojenia..."</string>
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"Automatické pripojenie je vypnuté"</string>
- <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Uložila aplikácia <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"Uložil používateľ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"Nedôjde k automatickému pripojeniu"</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"Bez prístupu k internetu"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"Problém s overením"</string>
diff --git a/libs/WifiTrackerLib/res/values-zh-rCN/strings.xml b/libs/WifiTrackerLib/res/values-zh-rCN/strings.xml
index 5be532e2e..cbf3a82b8 100644
--- a/libs/WifiTrackerLib/res/values-zh-rCN/strings.xml
+++ b/libs/WifiTrackerLib/res/values-zh-rCN/strings.xml
@@ -19,7 +19,7 @@
<string name="wifitrackerlib_summary_separator" msgid="6613897475167609815">" / "</string>
<string name="wifitrackerlib_checking_for_internet_access" msgid="4787495471423429472">"正在检查互联网访问权限…"</string>
<string name="wifitrackerlib_auto_connect_disable" msgid="4714835547164460651">"自动连接已关闭"</string>
- <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"由<xliff:g id="NAME">%1$s</xliff:g>保存"</string>
+ <string name="wifitrackerlib_saved_network" msgid="5353460010746484376">"已由<xliff:g id="NAME">%1$s</xliff:g>保存"</string>
<string name="wifitrackerlib_wifi_no_internet_no_reconnect" msgid="6618216332537706908">"无法自动连接"</string>
<string name="wifitrackerlib_wifi_no_internet" msgid="4998563744669636949">"无法访问互联网"</string>
<string name="wifitrackerlib_wifi_disabled_password_failure" msgid="2850244218754633550">"身份验证出现问题"</string>
diff --git a/libs/WifiTrackerLib/res/values-zh-rHK/strings.xml b/libs/WifiTrackerLib/res/values-zh-rHK/strings.xml
index 3b2aae751..cb8ac49c4 100644
--- a/libs/WifiTrackerLib/res/values-zh-rHK/strings.xml
+++ b/libs/WifiTrackerLib/res/values-zh-rHK/strings.xml
@@ -43,7 +43,7 @@
<string name="wifitrackerlib_private_dns_broken" msgid="6049401148262718707">"無法存取私人 DNS 伺服器"</string>
<string name="wifitrackerlib_wifi_connected_cannot_provide_internet" msgid="3803471522215612745">"已連接裝置,但無法提供互聯網連線。"</string>
<string name="wifi_connected_low_quality" msgid="4478331645458058445">"品質欠佳"</string>
- <string name="wifitrackerlib_admin_restricted_network" msgid="5439914801076897515">"你的機構禁止使用"</string>
+ <string name="wifitrackerlib_admin_restricted_network" msgid="5439914801076897515">"您的機構禁止使用"</string>
<string name="wifitrackerlib_hotspot_network_summary" msgid="7661086683527884190">"來自「<xliff:g id="MODEL_NAME">%2$s</xliff:g>」的「<xliff:g id="NETWORK_NAME">%1$s</xliff:g>」"</string>
<string name="wifitrackerlib_hotspot_network_alternate" msgid="4966814473758893807">"來自「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」的「<xliff:g id="NETWORK_NAME">%1$s</xliff:g>」"</string>
<string name="wifitrackerlib_hotspot_network_connecting" msgid="2072252282318270780">"正在連線…"</string>
diff --git a/libs/WifiTrackerLib/res/values/config.xml b/libs/WifiTrackerLib/res/values/config.xml
new file mode 100644
index 000000000..91df95872
--- /dev/null
+++ b/libs/WifiTrackerLib/res/values/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2023 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Enables verbose logging on user debug builds by default -->
+ <bool name="wifitrackerlib_enable_verbose_logging_for_userdebug">false</bool>
+</resources>
diff --git a/libs/WifiTrackerLib/res/values/strings.xml b/libs/WifiTrackerLib/res/values/strings.xml
index 691fb214f..5ebf2ba26 100644
--- a/libs/WifiTrackerLib/res/values/strings.xml
+++ b/libs/WifiTrackerLib/res/values/strings.xml
@@ -247,5 +247,9 @@
<!-- Summary for the Wi-Fi 6Ghz band [CHAR LIMIT=50]-->
<string name="wifitrackerlib_wifi_band_6_ghz">6 GHz</string>
<!-- Separator between Wi-Fi bands in a list [CHAR LIMIT=50]-->
- <string name="wifitrackerlib_multiband_separator">, </string>
+ <string name="wifitrackerlib_multiband_separator">", "</string>
+ <!-- Summary for link speed on Mbps -->
+ <string name="wifitrackerlib_link_speed_mbps"><xliff:g id="link_speed_mbps" example="233">%1$d</xliff:g> Mbps</string>
+ <!-- Summary for link speed on a specific band -->
+ <string name="wifitrackerlib_link_speed_on_band"><xliff:g id="link_speed" example="233 Mbps">%1$s</xliff:g> on <xliff:g id="band" example="2.4 GHz">%2$s</xliff:g></string>
</resources>
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
index 5f1abd9a5..e464090a5 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
@@ -42,6 +42,7 @@ import android.net.wifi.sharedconnectivity.app.KnownNetworkConnectionStatus;
import android.net.wifi.sharedconnectivity.app.SharedConnectivityClientCallback;
import android.net.wifi.sharedconnectivity.app.SharedConnectivityManager;
import android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState;
+import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.telephony.SubscriptionManager;
@@ -93,8 +94,6 @@ public class BaseWifiTracker {
private static boolean sVerboseLogging;
- public static boolean mEnableSharedConnectivityFeature = false;
-
public static boolean isVerboseLoggingEnabled() {
return BaseWifiTracker.sVerboseLogging;
}
@@ -102,6 +101,7 @@ public class BaseWifiTracker {
private int mWifiState = WifiManager.WIFI_STATE_DISABLED;
private boolean mIsInitialized = false;
+ private boolean mIsScanningDisabled = false;
// Registered on the worker thread
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@@ -126,6 +126,8 @@ public class BaseWifiTracker {
handleConfiguredNetworksChangedAction(intent);
} else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
handleNetworkStateChangedAction(intent);
+ } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {
+ handleRssiChangedAction(intent);
} else if (TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED.equals(action)) {
handleDefaultSubscriptionChanged(intent.getIntExtra(
"subscription", SubscriptionManager.INVALID_SUBSCRIPTION_ID));
@@ -134,6 +136,7 @@ public class BaseWifiTracker {
};
private final BaseWifiTracker.Scanner mScanner;
private final BaseWifiTrackerCallback mListener;
+ private final @NonNull LifecycleObserver mLifecycleObserver;
protected final WifiTrackerInjector mInjector;
protected final Context mContext;
@@ -189,6 +192,20 @@ public class BaseWifiTracker {
@WorkerThread
public void onCapabilitiesChanged(@NonNull Network network,
@NonNull NetworkCapabilities networkCapabilities) {
+ List<Network> underlyingNetworks =
+ networkCapabilities.getUnderlyingNetworks();
+ if (underlyingNetworks != null) {
+ Network currentWifiNetwork = mWifiManager.getCurrentNetwork();
+ if (underlyingNetworks.contains(currentWifiNetwork)) {
+ // If the default network has an underlying Wi-Fi network (e.g. it's
+ // a VPN), treat the Wi-Fi network as the default network.
+ handleDefaultNetworkCapabilitiesChanged(currentWifiNetwork,
+ new NetworkCapabilities.Builder(networkCapabilities)
+ .setTransportInfo(mWifiManager.getConnectionInfo())
+ .build());
+ return;
+ }
+ }
handleDefaultNetworkCapabilitiesChanged(network, networkCapabilities);
}
@@ -279,7 +296,12 @@ public class BaseWifiTracker {
/**
* Constructor for BaseWifiTracker.
* @param injector Injector for commonly referenced objects.
- * @param lifecycle Lifecycle this is tied to for lifecycle callbacks.
+ * @param lifecycle Lifecycle to register the internal LifecycleObserver with. Note that we
+ * register the LifecycleObserver inside the constructor, which may cause an
+ * NPE if the Lifecycle invokes onStart/onStop/onDestroyed within
+ * {@link Lifecycle#addObserver}. To avoid this, pass {@code null} here and
+ * register the LifecycleObserver from {@link #getLifecycleObserver()}
+ * instead.
* @param context Context for registering broadcast receiver and for resource strings.
* @param wifiManager Provides all Wi-Fi info.
* @param connectivityManager Provides network info.
@@ -292,7 +314,7 @@ public class BaseWifiTracker {
@SuppressWarnings("StaticAssignmentInConstructor")
BaseWifiTracker(
@NonNull WifiTrackerInjector injector,
- @NonNull Lifecycle lifecycle, @NonNull Context context,
+ @Nullable Lifecycle lifecycle, @NonNull Context context,
@NonNull WifiManager wifiManager,
@NonNull ConnectivityManager connectivityManager,
@NonNull Handler mainHandler,
@@ -304,7 +326,7 @@ public class BaseWifiTracker {
String tag) {
mInjector = injector;
mActivityManager = context.getSystemService(ActivityManager.class);
- lifecycle.addObserver(new LifecycleObserver() {
+ mLifecycleObserver = new LifecycleObserver() {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
@MainThread
public void onStart() {
@@ -322,13 +344,16 @@ public class BaseWifiTracker {
public void onDestroy() {
BaseWifiTracker.this.onDestroy();
}
- });
+ };
+ if (lifecycle != null) {
+ lifecycle.addObserver(mLifecycleObserver);
+ }
mContext = context;
mWifiManager = wifiManager;
mConnectivityManager = connectivityManager;
mConnectivityDiagnosticsManager =
context.getSystemService(ConnectivityDiagnosticsManager.class);
- if (mEnableSharedConnectivityFeature && BuildCompat.isAtLeastU()) {
+ if (mInjector.isSharedConnectivityFeatureEnabled() && BuildCompat.isAtLeastU()) {
mSharedConnectivityManager = context.getSystemService(SharedConnectivityManager.class);
mSharedConnectivityCallback = createSharedConnectivityCallback();
}
@@ -342,7 +367,31 @@ public class BaseWifiTracker {
mScanResultUpdater = new ScanResultUpdater(clock,
maxScanAgeMillis + scanIntervalMillis);
mScanner = new BaseWifiTracker.Scanner(workerHandler.getLooper());
- sVerboseLogging = mWifiManager.isVerboseLoggingEnabled();
+ if (mContext.getResources().getBoolean(
+ R.bool.wifitrackerlib_enable_verbose_logging_for_userdebug)
+ && Build.TYPE.equals("userdebug")) {
+ sVerboseLogging = true;
+ } else {
+ sVerboseLogging = mWifiManager.isVerboseLoggingEnabled();
+ }
+ }
+
+ /**
+ * Disable the scanning mechanism permanently.
+ */
+ public void disableScanning() {
+ mIsScanningDisabled = true;
+ // This method indicates SystemUI usage, which shouldn't output verbose logs since it's
+ // always up.
+ sVerboseLogging = false;
+ }
+
+ /**
+ * Returns the LifecycleObserver to listen on the app's lifecycle state.
+ */
+ @AnyThread
+ public LifecycleObserver getLifecycleObserver() {
+ return mLifecycleObserver;
}
/**
@@ -360,6 +409,9 @@ public class BaseWifiTracker {
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
filter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+ if (isVerboseLoggingEnabled()) {
+ filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
+ }
filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
mContext.registerReceiver(mBroadcastReceiver, filter,
@@ -502,6 +554,14 @@ public class BaseWifiTracker {
}
/**
+ * Handle receiving the WifiManager.NETWORK_STATE_CHANGED_ACTION broadcast
+ */
+ @WorkerThread
+ protected void handleRssiChangedAction(@NonNull Intent intent) {
+ // Do nothing.
+ }
+
+ /**
* Handle link property changes for the given network.
*/
@WorkerThread
@@ -751,7 +811,7 @@ public class BaseWifiTracker {
* Scanning should only happen when Wi-Fi is enabled and the activity is started.
*/
private boolean shouldScan() {
- return mIsWifiEnabled && mIsStartedState;
+ return mIsWifiEnabled && mIsStartedState && !mIsScanningDisabled;
}
@WorkerThread
@@ -769,6 +829,8 @@ public class BaseWifiTracker {
WifiScanner.ScanSettings scanSettings = new WifiScanner.ScanSettings();
scanSettings.band = WifiScanner.WIFI_BAND_BOTH;
scanSettings.setRnrSetting(WifiScanner.WIFI_RNR_ENABLED);
+ scanSettings.reportEvents = WifiScanner.REPORT_EVENT_FULL_SCAN_RESULT
+ | WifiScanner.REPORT_EVENT_AFTER_EACH_SCAN;
WifiScanner wifiScanner = mContext.getSystemService(WifiScanner.class);
if (wifiScanner != null) {
wifiScanner.stopScan(mFirstScanListener);
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java
index a30dd5e7c..6b392954f 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkDetailsTracker.java
@@ -111,7 +111,7 @@ public class HotspotNetworkDetailsTracker extends NetworkDetailsTracker {
@WorkerThread
@Override
protected void handleServiceConnected() {
- if (mEnableSharedConnectivityFeature && mSharedConnectivityManager != null) {
+ if (mInjector.isSharedConnectivityFeatureEnabled() && mSharedConnectivityManager != null) {
mHotspotNetworkData = mSharedConnectivityManager.getHotspotNetworks().stream().filter(
network -> network.getDeviceId() == mChosenEntry.getHotspotNetworkEntryKey()
.getDeviceId()).findFirst().orElse(null);
@@ -126,7 +126,7 @@ public class HotspotNetworkDetailsTracker extends NetworkDetailsTracker {
@WorkerThread
@Override
protected void handleHotspotNetworksUpdated(List<HotspotNetwork> networks) {
- if (mEnableSharedConnectivityFeature) {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
mHotspotNetworkData = networks.stream().filter(network -> network.getDeviceId()
== mChosenEntry.getHotspotNetworkEntryKey().getDeviceId()).findFirst().orElse(
null);
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
index 0495fef9c..9da34caa0 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
@@ -16,6 +16,7 @@
package com.android.wifitrackerlib;
+import static android.net.wifi.WifiInfo.DEFAULT_MAC_ADDRESS;
import static android.os.Build.VERSION_CODES;
import android.annotation.TargetApi;
@@ -28,6 +29,7 @@ import android.net.wifi.sharedconnectivity.app.NetworkProviderInfo;
import android.net.wifi.sharedconnectivity.app.SharedConnectivityManager;
import android.os.Handler;
import android.text.BidiFormatter;
+import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.IntDef;
@@ -42,6 +44,7 @@ import org.json.JSONObject;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Objects;
/**
@@ -59,8 +62,6 @@ public class HotspotNetworkEntry extends WifiEntry {
@Nullable private HotspotNetwork mHotspotNetworkData;
@NonNull private HotspotNetworkEntryKey mKey;
- private boolean mServerInitiatedConnection = false;
-
/**
* If editing this IntDef also edit the definition in:
* {@link android.net.wifi.sharedconnectivity.app.HotspotNetwork}
@@ -123,7 +124,7 @@ public class HotspotNetworkEntry extends WifiEntry {
@NonNull WifiManager wifiManager,
@Nullable SharedConnectivityManager sharedConnectivityManager,
@NonNull HotspotNetwork hotspotNetworkData) {
- super(callbackHandler, wifiManager, false /*forSavedNetworksPage*/);
+ super(injector, callbackHandler, wifiManager, false /*forSavedNetworksPage*/);
mInjector = injector;
mContext = context;
mSharedConnectivityManager = sharedConnectivityManager;
@@ -140,7 +141,7 @@ public class HotspotNetworkEntry extends WifiEntry {
@NonNull WifiManager wifiManager,
@Nullable SharedConnectivityManager sharedConnectivityManager,
@NonNull HotspotNetworkEntryKey key) {
- super(callbackHandler, wifiManager, false /*forSavedNetworksPage*/);
+ super(injector, callbackHandler, wifiManager, false /*forSavedNetworksPage*/);
mInjector = injector;
mContext = context;
mSharedConnectivityManager = sharedConnectivityManager;
@@ -175,11 +176,21 @@ public class HotspotNetworkEntry extends WifiEntry {
if (mKey.isVirtualEntry()) {
return false;
}
- return Objects.equals(mKey.getBssid(), wifiInfo.getBSSID());
+ return Objects.equals(mKey.getScanResultKey(),
+ new StandardWifiEntry.ScanResultKey(WifiInfo.sanitizeSsid(wifiInfo.getSSID()),
+ Collections.singletonList(wifiInfo.getCurrentSecurityType())));
+ }
+
+ @Override
+ public int getLevel() {
+ if (getConnectedState() == CONNECTED_STATE_DISCONNECTED) {
+ return WIFI_LEVEL_MAX;
+ }
+ return super.getLevel();
}
@Override
- public String getTitle() {
+ public synchronized String getTitle() {
if (mHotspotNetworkData == null) {
return "";
}
@@ -187,11 +198,11 @@ public class HotspotNetworkEntry extends WifiEntry {
}
@Override
- public String getSummary(boolean concise) {
+ public synchronized String getSummary(boolean concise) {
if (mHotspotNetworkData == null) {
return "";
}
- if (getConnectedState() != CONNECTED_STATE_CONNECTED && mServerInitiatedConnection) {
+ if (mCalledConnect) {
return mContext.getString(R.string.wifitrackerlib_hotspot_network_connecting);
}
return mContext.getString(R.string.wifitrackerlib_hotspot_network_summary,
@@ -205,7 +216,7 @@ public class HotspotNetworkEntry extends WifiEntry {
*
* @return Display string.
*/
- public String getAlternateSummary() {
+ public synchronized String getAlternateSummary() {
if (mHotspotNetworkData == null) {
return "";
}
@@ -215,13 +226,73 @@ public class HotspotNetworkEntry extends WifiEntry {
mHotspotNetworkData.getNetworkProviderInfo().getDeviceName()));
}
+ @Override
+ public synchronized String getSsid() {
+ StandardWifiEntry.ScanResultKey scanResultKey = mKey.getScanResultKey();
+ if (scanResultKey == null) {
+ return null;
+ }
+ return scanResultKey.getSsid();
+ }
+
+ @Override
+ @Nullable
+ public synchronized String getMacAddress() {
+ if (mWifiInfo == null) {
+ return null;
+ }
+ final String wifiInfoMac = mWifiInfo.getMacAddress();
+ if (!TextUtils.isEmpty(wifiInfoMac)
+ && !TextUtils.equals(wifiInfoMac, DEFAULT_MAC_ADDRESS)) {
+ return wifiInfoMac;
+ }
+ if (getPrivacy() != PRIVACY_RANDOMIZED_MAC) {
+ final String[] factoryMacs = mWifiManager.getFactoryMacAddresses();
+ if (factoryMacs.length > 0) {
+ return factoryMacs[0];
+ }
+ }
+ return null;
+ }
+
+ @Override
+ @Privacy
+ public int getPrivacy() {
+ return PRIVACY_RANDOMIZED_MAC;
+ }
+
+ @Override
+ public synchronized String getSecurityString(boolean concise) {
+ if (mHotspotNetworkData == null) {
+ return "";
+ }
+ return Utils.getSecurityString(mContext,
+ new ArrayList<>(mHotspotNetworkData.getHotspotSecurityTypes()), concise);
+ }
+
+ @Override
+ public synchronized String getStandardString() {
+ if (mWifiInfo == null) {
+ return "";
+ }
+ return Utils.getStandardString(mContext, mWifiInfo.getWifiStandard());
+ }
+
+ @Override
+ public synchronized String getBandString() {
+ if (mWifiInfo == null) {
+ return "";
+ }
+ return Utils.wifiInfoToBandString(mContext, mWifiInfo);
+ }
+
/**
* Connection strength between the host device and the internet.
*
* @return Displayed connection strength in the range 0 to 4.
*/
@IntRange(from = 0, to = 4)
- public int getUpstreamConnectionStrength() {
+ public synchronized int getUpstreamConnectionStrength() {
if (mHotspotNetworkData == null) {
return 0;
}
@@ -234,7 +305,7 @@ public class HotspotNetworkEntry extends WifiEntry {
* @return NetworkType enum.
*/
@NetworkType
- public int getNetworkType() {
+ public synchronized int getNetworkType() {
if (mHotspotNetworkData == null) {
return HotspotNetwork.NETWORK_TYPE_UNKNOWN;
}
@@ -247,7 +318,7 @@ public class HotspotNetworkEntry extends WifiEntry {
* @return DeviceType enum.
*/
@DeviceType
- public int getDeviceType() {
+ public synchronized int getDeviceType() {
if (mHotspotNetworkData == null) {
return NetworkProviderInfo.DEVICE_TYPE_UNKNOWN;
}
@@ -258,7 +329,7 @@ public class HotspotNetworkEntry extends WifiEntry {
* The battery percentage of the host device.
*/
@IntRange(from = 0, to = 100)
- public int getBatteryPercentage() {
+ public synchronized int getBatteryPercentage() {
if (mHotspotNetworkData == null) {
return 0;
}
@@ -268,7 +339,7 @@ public class HotspotNetworkEntry extends WifiEntry {
/**
* If the host device is currently charging its battery.
*/
- public boolean isBatteryCharging() {
+ public synchronized boolean isBatteryCharging() {
if (mHotspotNetworkData == null) {
return false;
}
@@ -276,12 +347,12 @@ public class HotspotNetworkEntry extends WifiEntry {
}
@Override
- public boolean canConnect() {
+ public synchronized boolean canConnect() {
return getConnectedState() == CONNECTED_STATE_DISCONNECTED;
}
@Override
- public void connect(@Nullable ConnectCallback callback) {
+ public synchronized void connect(@Nullable ConnectCallback callback) {
mConnectCallback = callback;
if (mSharedConnectivityManager == null) {
if (callback != null) {
@@ -294,12 +365,12 @@ public class HotspotNetworkEntry extends WifiEntry {
}
@Override
- public boolean canDisconnect() {
+ public synchronized boolean canDisconnect() {
return getConnectedState() != CONNECTED_STATE_DISCONNECTED;
}
@Override
- public void disconnect(@Nullable DisconnectCallback callback) {
+ public synchronized void disconnect(@Nullable DisconnectCallback callback) {
mDisconnectCallback = callback;
if (mSharedConnectivityManager == null) {
if (callback != null) {
@@ -324,7 +395,7 @@ public class HotspotNetworkEntry extends WifiEntry {
if (mConnectCallback == null) return;
switch (status) {
case HotspotNetworkConnectionStatus.CONNECTION_STATUS_ENABLING_HOTSPOT:
- mServerInitiatedConnection = true;
+ mCalledConnect = true;
notifyOnUpdated();
break;
case HotspotNetworkConnectionStatus.CONNECTION_STATUS_UNKNOWN_ERROR:
@@ -337,7 +408,7 @@ public class HotspotNetworkEntry extends WifiEntry {
case HotspotNetworkConnectionStatus.CONNECTION_STATUS_CONNECT_TO_HOTSPOT_FAILED:
mCallbackHandler.post(() -> mConnectCallback.onConnectResult(
ConnectCallback.CONNECT_STATUS_FAILURE_UNKNOWN));
- mServerInitiatedConnection = false;
+ mCalledConnect = false;
notifyOnUpdated();
break;
default:
@@ -348,14 +419,11 @@ public class HotspotNetworkEntry extends WifiEntry {
static class HotspotNetworkEntryKey {
private static final String KEY_IS_VIRTUAL_ENTRY_KEY = "IS_VIRTUAL_ENTRY_KEY";
private static final String KEY_DEVICE_ID_KEY = "DEVICE_ID_KEY";
- private static final String KEY_BSSID_KEY = "BSSID_KEY";
private static final String KEY_SCAN_RESULT_KEY = "SCAN_RESULT_KEY";
private boolean mIsVirtualEntry;
private long mDeviceId;
@Nullable
- private String mBssid;
- @Nullable
private StandardWifiEntry.ScanResultKey mScanResultKey;
/**
@@ -365,15 +433,12 @@ public class HotspotNetworkEntry extends WifiEntry {
*/
HotspotNetworkEntryKey(@NonNull HotspotNetwork hotspotNetworkData) {
mDeviceId = hotspotNetworkData.getDeviceId();
- if (hotspotNetworkData.getHotspotSsid() == null
- || (hotspotNetworkData.getHotspotBssid() == null)
- || (hotspotNetworkData.getHotspotSecurityTypes() == null)) {
+ if (hotspotNetworkData.getHotspotSsid() == null || (
+ hotspotNetworkData.getHotspotSecurityTypes() == null)) {
mIsVirtualEntry = true;
- mBssid = null;
mScanResultKey = null;
} else {
mIsVirtualEntry = false;
- mBssid = hotspotNetworkData.getHotspotBssid();
mScanResultKey = new StandardWifiEntry.ScanResultKey(
hotspotNetworkData.getHotspotSsid(),
new ArrayList<>(hotspotNetworkData.getHotspotSecurityTypes()));
@@ -398,9 +463,6 @@ public class HotspotNetworkEntry extends WifiEntry {
if (keyJson.has(KEY_DEVICE_ID_KEY)) {
mDeviceId = keyJson.getLong(KEY_DEVICE_ID_KEY);
}
- if (keyJson.has(KEY_BSSID_KEY)) {
- mBssid = keyJson.getString(KEY_BSSID_KEY);
- }
if (keyJson.has(KEY_SCAN_RESULT_KEY)) {
mScanResultKey = new StandardWifiEntry.ScanResultKey(keyJson.getString(
KEY_SCAN_RESULT_KEY));
@@ -419,9 +481,6 @@ public class HotspotNetworkEntry extends WifiEntry {
try {
keyJson.put(KEY_IS_VIRTUAL_ENTRY_KEY, mIsVirtualEntry);
keyJson.put(KEY_DEVICE_ID_KEY, mDeviceId);
- if (mBssid != null) {
- keyJson.put(KEY_BSSID_KEY, mBssid);
- }
if (mScanResultKey != null) {
keyJson.put(KEY_SCAN_RESULT_KEY, mScanResultKey.toString());
}
@@ -441,14 +500,6 @@ public class HotspotNetworkEntry extends WifiEntry {
}
/**
- * Returns the BSSID of this HotspotNetworkEntryKey to match against wifiInfo
- */
- @Nullable
- String getBssid() {
- return mBssid;
- }
-
- /**
* Returns the ScanResultKey of this HotspotNetworkEntryKey to match against ScanResults
*/
@Nullable
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/KnownNetworkEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/KnownNetworkEntry.java
index f163ee300..c5632c17e 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/KnownNetworkEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/KnownNetworkEntry.java
@@ -19,7 +19,6 @@ package com.android.wifitrackerlib;
import static android.os.Build.VERSION_CODES;
import android.annotation.TargetApi;
-import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
@@ -65,25 +64,25 @@ public class KnownNetworkEntry extends StandardWifiEntry{
public @interface ConnectionStatus {} // TODO(b/271868642): Add IfThisThanThat lint
KnownNetworkEntry(
- @NonNull WifiTrackerInjector injector, @NonNull Context context,
+ @NonNull WifiTrackerInjector injector,
@NonNull Handler callbackHandler, @NonNull StandardWifiEntryKey key,
@NonNull WifiManager wifiManager,
@Nullable SharedConnectivityManager sharedConnectivityManager,
@NonNull KnownNetwork knownNetworkData) {
- super(injector, context, callbackHandler, key, wifiManager,
+ super(injector, callbackHandler, key, wifiManager,
false /* forSavedNetworksPage */);
mSharedConnectivityManager = sharedConnectivityManager;
mKnownNetworkData = knownNetworkData;
}
KnownNetworkEntry(
- @NonNull WifiTrackerInjector injector, @NonNull Context context,
+ @NonNull WifiTrackerInjector injector,
@NonNull Handler callbackHandler, @NonNull StandardWifiEntryKey key,
@Nullable List<WifiConfiguration> configs, @Nullable List<ScanResult> scanResults,
@NonNull WifiManager wifiManager,
@Nullable SharedConnectivityManager sharedConnectivityManager,
@NonNull KnownNetwork knownNetworkData) throws IllegalArgumentException {
- super(injector, context, callbackHandler, key, configs, scanResults, wifiManager,
+ super(injector, callbackHandler, key, configs, scanResults, wifiManager,
false /* forSavedNetworksPage */);
mSharedConnectivityManager = sharedConnectivityManager;
mKnownNetworkData = knownNetworkData;
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java
index 413a1ee2d..090592dea 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java
@@ -21,7 +21,6 @@ import static android.net.wifi.WifiInfo.sanitizeSsid;
import static com.android.wifitrackerlib.Utils.getVerboseLoggingDescription;
-import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
@@ -42,16 +41,14 @@ public class MergedCarrierEntry extends WifiEntry {
private final int mSubscriptionId;
@NonNull private final String mKey;
- @NonNull private final Context mContext;
boolean mIsCellDefaultRoute;
- MergedCarrierEntry(@NonNull Handler callbackHandler,
+ MergedCarrierEntry(@NonNull WifiTrackerInjector injector,
+ @NonNull Handler callbackHandler,
@NonNull WifiManager wifiManager,
boolean forSavedNetworksPage,
- @NonNull Context context,
int subscriptionId) throws IllegalArgumentException {
- super(callbackHandler, wifiManager, forSavedNetworksPage);
- mContext = context;
+ super(injector, callbackHandler, wifiManager, forSavedNetworksPage);
mSubscriptionId = subscriptionId;
mKey = KEY_PREFIX + subscriptionId;
}
@@ -170,7 +167,10 @@ public class MergedCarrierEntry extends WifiEntry {
}
}
- /* package */ int getSubscriptionId() {
+ /**
+ * Returns the current subscription ID this merged carrier network is for.
+ */
+ public int getSubscriptionId() {
return mSubscriptionId;
}
@@ -178,4 +178,11 @@ public class MergedCarrierEntry extends WifiEntry {
mIsCellDefaultRoute = isCellDefaultRoute;
notifyOnUpdated();
}
+
+ @Override
+ public String toString() {
+ StringJoiner sj = new StringJoiner("][", "[", "]");
+ sj.add("SubId:" + mSubscriptionId);
+ return super.toString() + sj;
+ }
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkRequestEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkRequestEntry.java
index efeb19ad0..a0261a80a 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkRequestEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkRequestEntry.java
@@ -16,7 +16,6 @@
package com.android.wifitrackerlib;
-import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Handler;
@@ -38,10 +37,10 @@ public class NetworkRequestEntry extends StandardWifiEntry {
NetworkRequestEntry(
@NonNull WifiTrackerInjector injector,
- @NonNull Context context, @NonNull Handler callbackHandler,
+ @NonNull Handler callbackHandler,
@NonNull StandardWifiEntryKey key, @NonNull WifiManager wifiManager,
boolean forSavedNetworksPage) throws IllegalArgumentException {
- super(injector, context, callbackHandler, key, wifiManager, forSavedNetworksPage);
+ super(injector, callbackHandler, key, wifiManager, forSavedNetworksPage);
}
@Override
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java
index 7d8ad4edb..ffb933009 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/OsuWifiEntry.java
@@ -21,7 +21,6 @@ import static androidx.core.util.Preconditions.checkNotNull;
import static com.android.wifitrackerlib.Utils.getBestScanResultByLevel;
import static com.android.wifitrackerlib.WifiEntry.ConnectCallback.CONNECT_STATUS_FAILURE_UNKNOWN;
-import android.content.Context;
import android.net.Uri;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
@@ -45,6 +44,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.StringJoiner;
/**
* WifiEntry representation of an Online Sign-up entry, uniquely identified by FQDN.
@@ -56,7 +56,6 @@ class OsuWifiEntry extends WifiEntry {
@NonNull private final List<ScanResult> mCurrentScanResults = new ArrayList<>();
@NonNull private final String mKey;
- @NonNull private final Context mContext;
@NonNull private final OsuProvider mOsuProvider;
private String mSsid;
private String mOsuStatusString;
@@ -69,15 +68,14 @@ class OsuWifiEntry extends WifiEntry {
*/
OsuWifiEntry(
@NonNull WifiTrackerInjector injector,
- @NonNull Context context, @NonNull Handler callbackHandler,
+ @NonNull Handler callbackHandler,
@NonNull OsuProvider osuProvider,
@NonNull WifiManager wifiManager,
boolean forSavedNetworksPage) throws IllegalArgumentException {
- super(callbackHandler, wifiManager, forSavedNetworksPage);
+ super(injector, callbackHandler, wifiManager, forSavedNetworksPage);
checkNotNull(osuProvider, "Cannot construct with null osuProvider!");
- mContext = context;
mOsuProvider = osuProvider;
mKey = osuProviderToOsuWifiEntryKey(osuProvider);
mUserManager = injector.getUserManager();
@@ -207,7 +205,8 @@ class OsuWifiEntry extends WifiEntry {
mIsAlreadyProvisioned = isAlreadyProvisioned;
}
- private boolean hasAdminRestrictions() {
+ @Override
+ public synchronized boolean hasAdminRestrictions() {
if (mHasAddConfigUserRestriction && !mIsAlreadyProvisioned) {
return true;
}
@@ -314,4 +313,13 @@ class OsuWifiEntry extends WifiEntry {
}
}
}
+
+ @Override
+ public String toString() {
+ StringJoiner sj = new StringJoiner("][", "[", "]");
+ sj.add("FriendlyName:" + mOsuProvider.getFriendlyName());
+ sj.add("ServerUri:" + mOsuProvider.getServerUri());
+ sj.add("SSID:" + mSsid);
+ return super.toString() + sj;
+ }
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
index b6be43f48..d4c1b4ad1 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
@@ -94,7 +94,7 @@ public class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
uniqueIdToPasspointWifiEntryKey(passpointConfig.getUniqueId())))
.findAny();
if (optionalPasspointConfig.isPresent()) {
- mChosenEntry = new PasspointWifiEntry(mInjector, mContext, mMainHandler,
+ mChosenEntry = new PasspointWifiEntry(mInjector, mMainHandler,
optionalPasspointConfig.get(), mWifiManager,
false /* forSavedNetworksPage */);
} else {
@@ -222,7 +222,7 @@ public class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
osuProviderToPasspointConfig.get(provider);
if (provisionedConfig != null && TextUtils.equals(mChosenEntry.getKey(),
uniqueIdToPasspointWifiEntryKey(provisionedConfig.getUniqueId()))) {
- mOsuWifiEntry = new OsuWifiEntry(mInjector, mContext, mMainHandler, provider,
+ mOsuWifiEntry = new OsuWifiEntry(mInjector, mMainHandler, provider,
mWifiManager, false /* forSavedNetworksPage */);
mOsuWifiEntry.updateScanResultInfo(osuProviderToScans.get(provider));
mOsuWifiEntry.setAlreadyProvisioned(true);
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
index c47570061..cb500c23c 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
@@ -70,8 +70,6 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
@NonNull private final String mKey;
@NonNull private final String mFqdn;
@NonNull private final String mFriendlyName;
- @NonNull private final WifiTrackerInjector mInjector;
- @NonNull private final Context mContext;
@Nullable
private PasspointConfiguration mPasspointConfig;
@Nullable private WifiConfiguration mWifiConfig;
@@ -95,15 +93,13 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
*/
PasspointWifiEntry(
@NonNull WifiTrackerInjector injector,
- @NonNull Context context, @NonNull Handler callbackHandler,
+ @NonNull Handler callbackHandler,
@NonNull PasspointConfiguration passpointConfig,
@NonNull WifiManager wifiManager,
boolean forSavedNetworksPage) throws IllegalArgumentException {
- super(callbackHandler, wifiManager, forSavedNetworksPage);
+ super(injector, callbackHandler, wifiManager, forSavedNetworksPage);
checkNotNull(passpointConfig, "Cannot construct with null PasspointConfiguration!");
- mInjector = injector;
- mContext = context;
mPasspointConfig = passpointConfig;
mKey = uniqueIdToPasspointWifiEntryKey(passpointConfig.getUniqueId());
mFqdn = passpointConfig.getHomeSp().getFqdn();
@@ -125,14 +121,12 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
@NonNull WifiConfiguration wifiConfig,
@NonNull WifiManager wifiManager,
boolean forSavedNetworksPage) throws IllegalArgumentException {
- super(callbackHandler, wifiManager, forSavedNetworksPage);
+ super(injector, callbackHandler, wifiManager, forSavedNetworksPage);
checkNotNull(wifiConfig, "Cannot construct with null WifiConfiguration!");
if (!wifiConfig.isPasspoint()) {
throw new IllegalArgumentException("Given WifiConfiguration is not for Passpoint!");
}
- mInjector = injector;
- mContext = context;
mWifiConfig = wifiConfig;
mKey = uniqueIdToPasspointWifiEntryKey(wifiConfig.getKey());
mFqdn = wifiConfig.FQDN;
@@ -468,13 +462,14 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
@Override
public synchronized String getBandString() {
if (mWifiInfo != null) {
- return Utils.getBandString(mContext, mWifiInfo);
+ return Utils.wifiInfoToBandString(mContext, mWifiInfo);
}
if (!mCurrentHomeScanResults.isEmpty()) {
- return Utils.getBandString(mContext, mCurrentHomeScanResults.get(0).frequency);
+ return Utils.frequencyToBandString(mContext, mCurrentHomeScanResults.get(0).frequency);
}
if (!mCurrentRoamingScanResults.isEmpty()) {
- return Utils.getBandString(mContext, mCurrentRoamingScanResults.get(0).frequency);
+ return Utils.frequencyToBandString(
+ mContext, mCurrentRoamingScanResults.get(0).frequency);
}
return "";
}
@@ -622,4 +617,17 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
public PasspointConfiguration getPasspointConfig() {
return mPasspointConfig;
}
+
+ @Override
+ public String toString() {
+ StringJoiner sj = new StringJoiner("][", "[", "]");
+ sj.add("FQDN:" + mFqdn);
+ sj.add("FriendlyName:" + mFriendlyName);
+ if (mPasspointConfig != null) {
+ sj.add("UniqueId:" + mPasspointConfig.getUniqueId());
+ } else if (mWifiConfig != null) {
+ sj.add("UniqueId:" + mWifiConfig.getKey());
+ }
+ return super.toString() + sj;
+ }
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java
index cf6288a2f..fa9c320db 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java
@@ -468,7 +468,7 @@ public class SavedNetworkTracker extends BaseWifiTracker {
// Create new entry for each unmatched config
for (StandardWifiEntryKey key : wifiConfigsByKey.keySet()) {
- mStandardWifiEntryCache.add(new StandardWifiEntry(mInjector, mContext, mMainHandler,
+ mStandardWifiEntryCache.add(new StandardWifiEntry(mInjector, mMainHandler,
key, wifiConfigsByKey.get(key), null, mWifiManager,
true /* forSavedNetworksPage */));
}
@@ -500,7 +500,7 @@ public class SavedNetworkTracker extends BaseWifiTracker {
// Create new entry for each unmatched config
for (String key : passpointConfigsByKey.keySet()) {
mPasspointWifiEntryCache.put(key,
- new PasspointWifiEntry(mInjector, mContext, mMainHandler,
+ new PasspointWifiEntry(mInjector, mMainHandler,
passpointConfigsByKey.get(key), mWifiManager,
true /* forSavedNetworksPage */));
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
index b1a8f83e7..2accc2321 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
@@ -83,10 +83,10 @@ public class StandardNetworkDetailsTracker extends NetworkDetailsTracker {
mainHandler, workerHandler, clock, maxScanAgeMillis, scanIntervalMillis, TAG);
mKey = new StandardWifiEntryKey(key);
if (mKey.isNetworkRequest()) {
- mChosenEntry = new NetworkRequestEntry(mInjector, mContext, mMainHandler, mKey,
+ mChosenEntry = new NetworkRequestEntry(mInjector, mMainHandler, mKey,
mWifiManager, false /* forSavedNetworksPage */);
} else {
- mChosenEntry = new StandardWifiEntry(mInjector, mContext, mMainHandler, mKey,
+ mChosenEntry = new StandardWifiEntry(mInjector, mMainHandler, mKey,
mWifiManager, false /* forSavedNetworksPage */);
}
// It is safe to call updateStartInfo() in the main thread here since onStart() won't have
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
index 95ab2599c..1c8e06c2c 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
@@ -48,7 +48,6 @@ import static com.android.wifitrackerlib.Utils.getVerboseLoggingDescription;
import android.annotation.SuppressLint;
import android.app.admin.DevicePolicyManager;
import android.app.admin.WifiSsidPolicy;
-import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
@@ -103,9 +102,6 @@ public class StandardWifiEntry extends WifiEntry {
@NonNull private final StandardWifiEntryKey mKey;
- @NonNull private final WifiTrackerInjector mInjector;
- @NonNull protected final Context mContext;
-
// Map of security type to matching scan results
@NonNull private final Map<Integer, List<ScanResult>> mMatchingScanResults = new ArrayMap<>();
// Map of security type to matching WifiConfiguration
@@ -137,12 +133,11 @@ public class StandardWifiEntry extends WifiEntry {
StandardWifiEntry(
@NonNull WifiTrackerInjector injector,
- @NonNull Context context, @NonNull Handler callbackHandler,
- @NonNull StandardWifiEntryKey key, @NonNull WifiManager wifiManager,
+ @NonNull Handler callbackHandler,
+ @NonNull StandardWifiEntryKey key,
+ @NonNull WifiManager wifiManager,
boolean forSavedNetworksPage) {
- super(callbackHandler, wifiManager, forSavedNetworksPage);
- mInjector = injector;
- mContext = context;
+ super(injector, callbackHandler, wifiManager, forSavedNetworksPage);
mKey = key;
mIsWpa3SaeSupported = wifiManager.isWpa3SaeSupported();
mIsWpa3SuiteBSupported = wifiManager.isWpa3SuiteBSupported();
@@ -155,13 +150,13 @@ public class StandardWifiEntry extends WifiEntry {
StandardWifiEntry(
@NonNull WifiTrackerInjector injector,
- @NonNull Context context, @NonNull Handler callbackHandler,
+ @NonNull Handler callbackHandler,
@NonNull StandardWifiEntryKey key,
@Nullable List<WifiConfiguration> configs,
@Nullable List<ScanResult> scanResults,
@NonNull WifiManager wifiManager,
boolean forSavedNetworksPage) throws IllegalArgumentException {
- this(injector, context, callbackHandler, key, wifiManager,
+ this(injector, callbackHandler, key, wifiManager,
forSavedNetworksPage);
if (configs != null && !configs.isEmpty()) {
updateConfig(configs);
@@ -590,74 +585,7 @@ public class StandardWifiEntry extends WifiEntry {
@Override
public synchronized String getSecurityString(boolean concise) {
- if (mTargetSecurityTypes.size() == 0) {
- return concise ? "" : mContext.getString(R.string.wifitrackerlib_wifi_security_none);
- }
- if (mTargetSecurityTypes.size() == 1) {
- final int security = mTargetSecurityTypes.get(0);
- switch(security) {
- case SECURITY_TYPE_EAP:
- return concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_eap_wpa_wpa2) :
- mContext.getString(
- R.string.wifitrackerlib_wifi_security_eap_wpa_wpa2);
- case SECURITY_TYPE_EAP_WPA3_ENTERPRISE:
- return concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_eap_wpa3) :
- mContext.getString(
- R.string.wifitrackerlib_wifi_security_eap_wpa3);
- case SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT:
- return concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_eap_suiteb) :
- mContext.getString(R.string.wifitrackerlib_wifi_security_eap_suiteb);
- case SECURITY_TYPE_PSK:
- return concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_wpa_wpa2) :
- mContext.getString(
- R.string.wifitrackerlib_wifi_security_wpa_wpa2);
- case SECURITY_TYPE_WEP:
- return mContext.getString(R.string.wifitrackerlib_wifi_security_wep);
- case SECURITY_TYPE_SAE:
- return concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_sae) :
- mContext.getString(R.string.wifitrackerlib_wifi_security_sae);
- case SECURITY_TYPE_OWE:
- return concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_owe) :
- mContext.getString(R.string.wifitrackerlib_wifi_security_owe);
- case SECURITY_TYPE_OPEN:
- return concise ? "" : mContext.getString(
- R.string.wifitrackerlib_wifi_security_none);
- }
- }
- if (mTargetSecurityTypes.size() == 2) {
- if (mTargetSecurityTypes.contains(SECURITY_TYPE_OPEN)
- && mTargetSecurityTypes.contains(SECURITY_TYPE_OWE)) {
- StringJoiner sj = new StringJoiner("/");
- sj.add(mContext.getString(R.string.wifitrackerlib_wifi_security_none));
- sj.add(concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_owe) :
- mContext.getString(R.string.wifitrackerlib_wifi_security_owe));
- return sj.toString();
- }
- if (mTargetSecurityTypes.contains(SECURITY_TYPE_PSK)
- && mTargetSecurityTypes.contains(SECURITY_TYPE_SAE)) {
- return concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_wpa_wpa2_wpa3) :
- mContext.getString(
- R.string.wifitrackerlib_wifi_security_wpa_wpa2_wpa3);
- }
- if (mTargetSecurityTypes.contains(SECURITY_TYPE_EAP)
- && mTargetSecurityTypes.contains(SECURITY_TYPE_EAP_WPA3_ENTERPRISE)) {
- return concise ? mContext.getString(
- R.string.wifitrackerlib_wifi_security_short_eap_wpa_wpa2_wpa3) :
- mContext.getString(
- R.string.wifitrackerlib_wifi_security_eap_wpa_wpa2_wpa3);
- }
- }
- // Unknown security types
- Log.e(TAG, "Couldn't get string for security types: " + mTargetSecurityTypes);
- return concise ? "" : mContext.getString(R.string.wifitrackerlib_wifi_security_none);
+ return Utils.getSecurityString(mContext, mTargetSecurityTypes, concise);
}
@Override
@@ -674,10 +602,10 @@ public class StandardWifiEntry extends WifiEntry {
@Override
public synchronized String getBandString() {
if (mWifiInfo != null) {
- return Utils.getBandString(mContext, mWifiInfo);
+ return Utils.wifiInfoToBandString(mContext, mWifiInfo);
}
if (!mTargetScanResults.isEmpty()) {
- return Utils.getBandString(mContext, mTargetScanResults.get(0).frequency);
+ return Utils.frequencyToBandString(mContext, mTargetScanResults.get(0).frequency);
}
return "";
}
@@ -1075,7 +1003,8 @@ public class StandardWifiEntry extends WifiEntry {
mIsAdminRestricted = false;
}
- private boolean hasAdminRestrictions() {
+ @Override
+ public synchronized boolean hasAdminRestrictions() {
if ((mHasAddConfigUserRestriction && !(isSaved() || isSuggestion()))
|| mIsAdminRestricted) {
return true;
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);
+ }
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
index 0c575f73b..0dea00695 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
@@ -23,6 +23,7 @@ import static androidx.core.util.Preconditions.checkNotNull;
import static com.android.wifitrackerlib.Utils.getNetworkPart;
import static com.android.wifitrackerlib.Utils.getSingleSecurityTypeFromMultipleSecurityTypes;
+import android.content.Context;
import android.net.ConnectivityDiagnosticsManager;
import android.net.LinkAddress;
import android.net.LinkProperties;
@@ -35,6 +36,7 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
+import android.text.TextUtils;
import androidx.annotation.AnyThread;
import androidx.annotation.IntDef;
@@ -212,6 +214,8 @@ public class WifiEntry {
entry.getConnectedState() != CONNECTED_STATE_CONNECTED)
.thenComparing((WifiEntry entry) -> !(entry instanceof KnownNetworkEntry))
.thenComparing((WifiEntry entry) -> !(entry instanceof HotspotNetworkEntry))
+ .thenComparing((WifiEntry entry) -> (entry instanceof HotspotNetworkEntry)
+ ? -((HotspotNetworkEntry) entry).getUpstreamConnectionStrength() : 0)
.thenComparing((WifiEntry entry) -> !entry.canConnect())
.thenComparing((WifiEntry entry) -> !entry.isSubscription())
.thenComparing((WifiEntry entry) -> !entry.isSaved())
@@ -227,6 +231,8 @@ public class WifiEntry {
protected final boolean mForSavedNetworksPage;
+ @NonNull protected final WifiTrackerInjector mInjector;
+ @NonNull protected final Context mContext;
protected final WifiManager mWifiManager;
// Callback associated with this WifiEntry. Subclasses should call its methods appropriately.
@@ -253,10 +259,14 @@ public class WifiEntry {
private Optional<ManageSubscriptionAction> mManageSubscriptionAction = Optional.empty();
- public WifiEntry(@NonNull Handler callbackHandler, @NonNull WifiManager wifiManager,
- boolean forSavedNetworksPage) throws IllegalArgumentException {
+ public WifiEntry(@NonNull WifiTrackerInjector injector, @NonNull Handler callbackHandler,
+ @NonNull WifiManager wifiManager, boolean forSavedNetworksPage)
+ throws IllegalArgumentException {
+ checkNotNull(injector, "Cannot construct with null injector!");
checkNotNull(callbackHandler, "Cannot construct with null handler!");
checkNotNull(wifiManager, "Cannot construct with null WifiManager!");
+ mInjector = injector;
+ mContext = mInjector.getContext();
mCallbackHandler = callbackHandler;
mForSavedNetworksPage = forSavedNetworksPage;
mWifiManager = wifiManager;
@@ -658,6 +668,20 @@ public class WifiEntry {
return "";
}
+ /**
+ * Returns the string displayed for Tx link speed.
+ */
+ public String getTxSpeedString() {
+ return Utils.getSpeedString(mContext, mWifiInfo, /* isTx */ true);
+ }
+
+ /**
+ * Returns the string displayed for Rx link speed.
+ */
+ public String getRxSpeedString() {
+ return Utils.getSpeedString(mContext, mWifiInfo, /* isTx */ false);
+ }
+
/** Returns whether subscription of the entry is expired */
public boolean isExpired() {
return false;
@@ -733,6 +757,13 @@ public class WifiEntry {
}
/**
+ * Whether there are admin restrictions preventing connection to this network.
+ */
+ public boolean hasAdminRestrictions() {
+ return false;
+ }
+
+ /**
* Sets the callback listener for WifiEntryCallback methods.
* Subsequent calls will overwrite the previous listener.
*/
@@ -870,18 +901,21 @@ public class WifiEntry {
/**
* Updates this WifiEntry with the given primary WifiInfo/NetworkInfo if they match.
* @param primaryWifiInfo Primary WifiInfo that has changed
- * @param networkInfo NetworkInfo of the primary network
+ * @param networkInfo NetworkInfo of the primary network if available
*/
synchronized void onPrimaryWifiInfoChanged(
- @NonNull WifiInfo primaryWifiInfo, @NonNull NetworkInfo networkInfo) {
- if (!connectionInfoMatches(primaryWifiInfo)) {
+ @Nullable WifiInfo primaryWifiInfo, @Nullable NetworkInfo networkInfo) {
+ if (primaryWifiInfo == null || !connectionInfoMatches(primaryWifiInfo)) {
if (mNetworkInfo != null) {
mNetworkInfo = null;
notifyOnUpdated();
}
return;
}
- mNetworkInfo = networkInfo;
+ mWifiInfo = primaryWifiInfo;
+ if (networkInfo != null) {
+ mNetworkInfo = networkInfo;
+ }
notifyOnUpdated();
}
@@ -1088,18 +1122,9 @@ public class WifiEntry {
@Override
public void onSuccess() {
synchronized (WifiEntry.this) {
+ // Wait for L3 connection before returning the success result.
mCalledConnect = true;
}
- // If we aren't connected to the network after 10 seconds, trigger the failure callback
- mCallbackHandler.postDelayed(() -> {
- final ConnectCallback connectCallback = mConnectCallback;
- if (connectCallback != null && mCalledConnect
- && getConnectedState() == CONNECTED_STATE_DISCONNECTED) {
- connectCallback.onConnectResult(
- ConnectCallback.CONNECT_STATUS_FAILURE_UNKNOWN);
- mCalledConnect = false;
- }
- }, 10_000 /* delayMillis */);
}
@Override
@@ -1107,8 +1132,7 @@ public class WifiEntry {
mCallbackHandler.post(() -> {
final ConnectCallback connectCallback = mConnectCallback;
if (connectCallback != null) {
- connectCallback.onConnectResult(
- ConnectCallback.CONNECT_STATUS_FAILURE_UNKNOWN);
+ connectCallback.onConnectResult(ConnectCallback.CONNECT_STATUS_FAILURE_UNKNOWN);
}
});
}
@@ -1149,34 +1173,61 @@ public class WifiEntry {
@Override
public String toString() {
- return new StringBuilder()
- .append(getKey())
- .append(",title:")
- .append(getTitle())
- .append(",summary:")
- .append(getSummary())
- .append(",isSaved:")
- .append(isSaved())
- .append(",isSubscription:")
- .append(isSubscription())
- .append(",isSuggestion:")
- .append(isSuggestion())
- .append(",level:")
- .append(getLevel())
- .append(shouldShowXLevelIcon() ? "X" : "")
- .append(",security:")
- .append(getSecurityTypes())
- .append(",connected:")
- .append(getConnectedState() == CONNECTED_STATE_CONNECTED ? "true" : "false")
- .append(",connectedInfo:")
- .append(getConnectedInfo())
- .append(",hasInternet:")
- .append(hasInternetAccess())
- .append(",isDefault:")
- .append(mIsDefaultNetwork)
- .append(",isPrimary:")
- .append(isPrimaryNetwork())
- .toString();
+ StringJoiner sj = new StringJoiner("][", "[", "]");
+ sj.add(this.getClass().getSimpleName());
+ sj.add(getTitle());
+ sj.add(getSummary());
+ sj.add("Level:" + getLevel() + (shouldShowXLevelIcon() ? "!" : ""));
+ String security = getSecurityString(true);
+ if (!TextUtils.isEmpty(security)) {
+ sj.add(security);
+ }
+ int connectedState = getConnectedState();
+ if (connectedState == CONNECTED_STATE_CONNECTED) {
+ sj.add("Connected");
+ } else if (connectedState == CONNECTED_STATE_CONNECTING) {
+ sj.add("Connecting...");
+ }
+ if (hasInternetAccess()) {
+ sj.add("Internet");
+ }
+ if (isDefaultNetwork()) {
+ sj.add("Default");
+ }
+ if (isPrimaryNetwork()) {
+ sj.add("Primary");
+ }
+ if (isLowQuality()) {
+ sj.add("LowQuality");
+ }
+ if (isSaved()) {
+ sj.add("Saved");
+ }
+ if (isSubscription()) {
+ sj.add("Subscription");
+ }
+ if (isSuggestion()) {
+ sj.add("Suggestion");
+ }
+ if (isMetered()) {
+ sj.add("Metered");
+ }
+ if ((isSaved() || isSuggestion() || isSubscription()) && !isAutoJoinEnabled()) {
+ sj.add("AutoJoinDisabled");
+ }
+ if (isExpired()) {
+ sj.add("Expired");
+ }
+ if (canSignIn()) {
+ sj.add("SignIn");
+ }
+ if (shouldEditBeforeConnect()) {
+ sj.add("EditBeforeConnect");
+ }
+ if (hasAdminRestrictions()) {
+ sj.add("AdminRestricted");
+ }
+ return sj.toString();
}
/**
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
index dc2a7b4dc..4abffbaf8 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
@@ -70,11 +70,11 @@ import androidx.lifecycle.Lifecycle;
import java.time.Clock;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.StringJoiner;
import java.util.TreeSet;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -236,8 +236,8 @@ public class WifiPickerTracker extends BaseWifiTracker {
// we aren't initialized yet.
int subId = SubscriptionManager.getDefaultDataSubscriptionId();
if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
- mMergedCarrierEntry = new MergedCarrierEntry(mWorkerHandler, mWifiManager,
- /* forSavedNetworksPage */ false, mContext, subId);
+ mMergedCarrierEntry = new MergedCarrierEntry(mInjector, mWorkerHandler,
+ mWifiManager, /* forSavedNetworksPage */ false, subId);
}
}
return mMergedCarrierEntry;
@@ -265,7 +265,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
allEntries.addAll(mSuggestedWifiEntryCache);
allEntries.addAll(mPasspointWifiEntryCache.values());
allEntries.addAll(mOsuWifiEntryCache.values());
- if (mEnableSharedConnectivityFeature) {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
allEntries.addAll(mKnownNetworkEntryCache);
allEntries.addAll(mHotspotNetworkEntryCache);
}
@@ -283,12 +283,11 @@ public class WifiPickerTracker extends BaseWifiTracker {
mSuggestedWifiEntryCache.clear();
mPasspointWifiEntryCache.clear();
mOsuWifiEntryCache.clear();
- if (mEnableSharedConnectivityFeature) {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
mKnownNetworkEntryCache.clear();
mHotspotNetworkEntryCache.clear();
}
mNetworkRequestEntry = null;
- mMergedCarrierEntry = null;
}
@WorkerThread
@@ -364,7 +363,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
updateNetworkRequestEntryScans(scanResults);
updatePasspointWifiEntryScans(scanResults);
updateOsuWifiEntryScans(scanResults);
- if (mEnableSharedConnectivityFeature && BuildCompat.isAtLeastU()) {
+ if (mInjector.isSharedConnectivityFeatureEnabled() && BuildCompat.isAtLeastU()) {
updateKnownNetworkEntryScans(scanResults);
// Updating the hotspot entries here makes the UI more reliable when switching pages or
// when toggling settings while the internet picker is shown.
@@ -380,8 +379,8 @@ public class WifiPickerTracker extends BaseWifiTracker {
protected void handleNetworkStateChangedAction(@NonNull Intent intent) {
WifiInfo primaryWifiInfo = mWifiManager.getConnectionInfo();
NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
- if (primaryWifiInfo == null || networkInfo == null) {
- return;
+ if (primaryWifiInfo != null) {
+ conditionallyCreateConnectedWifiEntry(primaryWifiInfo);
}
for (WifiEntry entry : getAllWifiEntries()) {
entry.onPrimaryWifiInfoChanged(primaryWifiInfo, networkInfo);
@@ -391,6 +390,17 @@ public class WifiPickerTracker extends BaseWifiTracker {
@WorkerThread
@Override
+ protected void handleRssiChangedAction(@NonNull Intent intent) {
+ // RSSI is available via the new WifiInfo object, which is used to populate the RSSI in the
+ // verbose summary.
+ WifiInfo primaryWifiInfo = mWifiManager.getConnectionInfo();
+ for (WifiEntry entry : getAllWifiEntries()) {
+ entry.onPrimaryWifiInfoChanged(primaryWifiInfo, null);
+ }
+ }
+
+ @WorkerThread
+ @Override
protected void handleLinkPropertiesChanged(
@NonNull Network network, @Nullable LinkProperties linkProperties) {
for (WifiEntry entry : getAllWifiEntries()) {
@@ -454,7 +464,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
@WorkerThread
@Override
protected void handleKnownNetworksUpdated(List<KnownNetwork> networks) {
- if (mEnableSharedConnectivityFeature) {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
mKnownNetworkDataCache.clear();
mKnownNetworkDataCache.addAll(networks);
updateKnownNetworkEntryScans(mScanResultUpdater.getScanResults());
@@ -466,7 +476,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
@WorkerThread
@Override
protected void handleHotspotNetworksUpdated(List<HotspotNetwork> networks) {
- if (mEnableSharedConnectivityFeature) {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
mHotspotNetworkDataCache.clear();
mHotspotNetworkDataCache.addAll(networks);
updateHotspotNetworkEntries();
@@ -499,7 +509,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
@WorkerThread
@Override
protected void handleServiceConnected() {
- if (mEnableSharedConnectivityFeature) {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
mKnownNetworkDataCache.clear();
mKnownNetworkDataCache.addAll(mSharedConnectivityManager.getKnownNetworks());
mHotspotNetworkDataCache.clear();
@@ -510,6 +520,19 @@ public class WifiPickerTracker extends BaseWifiTracker {
}
}
+ @TargetApi(VERSION_CODES.UPSIDE_DOWN_CAKE)
+ @WorkerThread
+ @Override
+ protected void handleServiceDisconnected() {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
+ mKnownNetworkDataCache.clear();
+ mHotspotNetworkDataCache.clear();
+ mKnownNetworkEntryCache.clear();
+ mHotspotNetworkEntryCache.clear();
+ updateWifiEntries();
+ }
+ }
+
/**
* Update the list returned by getWifiEntries() with the current states of the entry caches.
*/
@@ -520,7 +543,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
mActiveWifiEntries.addAll(mStandardWifiEntryCache);
mActiveWifiEntries.addAll(mSuggestedWifiEntryCache);
mActiveWifiEntries.addAll(mPasspointWifiEntryCache.values());
- if (mEnableSharedConnectivityFeature) {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
mActiveWifiEntries.addAll(mHotspotNetworkEntryCache);
}
if (mNetworkRequestEntry != null) {
@@ -566,6 +589,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
hotspotNetworkEntry.getHotspotNetworkEntryKey().getScanResultKey());
}
}
+ Set<ScanResultKey> savedEntryKeys = new ArraySet<>();
for (StandardWifiEntry entry : mStandardWifiEntryCache) {
entry.updateAdminRestrictions();
if (mActiveWifiEntries.contains(entry)) {
@@ -580,14 +604,19 @@ public class WifiPickerTracker extends BaseWifiTracker {
if (passpointUtf8Ssids.contains(entry.getSsid())) {
continue;
}
- }
- if (mEnableSharedConnectivityFeature) {
- // Filter out any StandardWifiEntry that is matched with a KnownNetworkEntry
- if (knownNetworkKeys
- .contains(entry.getStandardWifiEntryKey().getScanResultKey())) {
- continue;
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
+ // Filter out any unsaved entries that are matched with a KnownNetworkEntry
+ if (knownNetworkKeys
+ .contains(entry.getStandardWifiEntryKey().getScanResultKey())) {
+ continue;
+ }
}
- // Filter out any StandardWifiEntry that is matched with a HotspotNetworkEntry
+ } else {
+ // Create a set of saved entry keys
+ savedEntryKeys.add(entry.getStandardWifiEntryKey().getScanResultKey());
+ }
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
+ // Filter out any entries that are matched with a HotspotNetworkEntry
if (hotspotNetworkKeys
.contains(entry.getStandardWifiEntryKey().getScanResultKey())) {
continue;
@@ -605,9 +634,11 @@ public class WifiPickerTracker extends BaseWifiTracker {
&& !entry.isAlreadyProvisioned()).collect(toList()));
mWifiEntries.addAll(getContextualWifiEntries().stream().filter(entry ->
entry.getConnectedState() == CONNECTED_STATE_DISCONNECTED).collect(toList()));
- if (mEnableSharedConnectivityFeature) {
+ if (mInjector.isSharedConnectivityFeatureEnabled()) {
mWifiEntries.addAll(mKnownNetworkEntryCache.stream().filter(entry ->
- entry.getConnectedState() == CONNECTED_STATE_DISCONNECTED).collect(
+ (entry.getConnectedState() == CONNECTED_STATE_DISCONNECTED)
+ && !(savedEntryKeys.contains(
+ entry.getStandardWifiEntryKey().getScanResultKey()))).collect(
toList()));
mWifiEntries.addAll(mHotspotNetworkEntryCache.stream().filter(entry ->
entry.getConnectedState() == CONNECTED_STATE_DISCONNECTED).collect(
@@ -615,9 +646,19 @@ public class WifiPickerTracker extends BaseWifiTracker {
}
Collections.sort(mWifiEntries, WifiEntry.WIFI_PICKER_COMPARATOR);
if (isVerboseLoggingEnabled()) {
- Log.v(TAG, "Connected WifiEntries: "
- + Arrays.toString(mActiveWifiEntries.toArray()));
- Log.v(TAG, "Updated WifiEntries: " + Arrays.toString(mWifiEntries.toArray()));
+ StringJoiner entryLog = new StringJoiner("\n");
+ int numEntries = mActiveWifiEntries.size() + mWifiEntries.size();
+ int index = 1;
+ for (WifiEntry entry : mActiveWifiEntries) {
+ entryLog.add("Entry " + index + "/" + numEntries + ": " + entry);
+ index++;
+ }
+ for (WifiEntry entry : mWifiEntries) {
+ entryLog.add("Entry " + index + "/" + numEntries + ": " + entry);
+ index++;
+ }
+ Log.v(TAG, entryLog.toString());
+ Log.v(TAG, "MergedCarrierEntry: " + mMergedCarrierEntry);
}
}
notifyOnWifiEntriesChanged();
@@ -638,8 +679,8 @@ public class WifiPickerTracker extends BaseWifiTracker {
if (mMergedCarrierEntry != null && subId == mMergedCarrierEntry.getSubscriptionId()) {
return;
}
- mMergedCarrierEntry = new MergedCarrierEntry(mWorkerHandler, mWifiManager,
- /* forSavedNetworksPage */ false, mContext, subId);
+ mMergedCarrierEntry = new MergedCarrierEntry(mInjector, mWorkerHandler, mWifiManager,
+ /* forSavedNetworksPage */ false, subId);
Network currentNetwork = mWifiManager.getCurrentNetwork();
if (currentNetwork != null) {
NetworkCapabilities networkCapabilities =
@@ -704,7 +745,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
for (ScanResultKey scanKey: newScanKeys) {
final StandardWifiEntryKey entryKey =
new StandardWifiEntryKey(scanKey, true /* isTargetingNewNetworks */);
- final StandardWifiEntry newEntry = new StandardWifiEntry(mInjector, mContext,
+ final StandardWifiEntry newEntry = new StandardWifiEntry(mInjector,
mMainHandler, entryKey, mStandardWifiConfigCache.get(entryKey),
scanResultsByKey.get(scanKey), mWifiManager,
false /* forSavedNetworksPage */);
@@ -756,7 +797,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
|| !scanResultsByKey.containsKey(scanKey)) {
continue;
}
- final StandardWifiEntry newEntry = new StandardWifiEntry(mInjector, mContext,
+ final StandardWifiEntry newEntry = new StandardWifiEntry(mInjector,
mMainHandler, entryKey, mSuggestedConfigCache.get(entryKey),
scanResultsByKey.get(scanKey), mWifiManager,
false /* forSavedNetworksPage */);
@@ -793,7 +834,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
mMainHandler, wifiConfig, mWifiManager,
false /* forSavedNetworksPage */));
} else if (mPasspointConfigCache.containsKey(key)) {
- mPasspointWifiEntryCache.put(key, new PasspointWifiEntry(mInjector, mContext,
+ mPasspointWifiEntryCache.put(key, new PasspointWifiEntry(mInjector,
mMainHandler, mPasspointConfigCache.get(key), mWifiManager,
false /* forSavedNetworksPage */));
} else {
@@ -828,7 +869,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
// Create a new entry for each OsuProvider not already matched to an OsuWifiEntry
for (OsuProvider provider : osuProviderToScans.keySet()) {
- OsuWifiEntry newEntry = new OsuWifiEntry(mInjector, mContext, mMainHandler, provider,
+ OsuWifiEntry newEntry = new OsuWifiEntry(mInjector, mMainHandler, provider,
mWifiManager, false /* forSavedNetworksPage */);
newEntry.updateScanResultInfo(osuProviderToScans.get(provider));
mOsuWifiEntryCache.put(osuProviderToOsuWifiEntryKey(provider), newEntry);
@@ -880,6 +921,10 @@ public class WifiPickerTracker extends BaseWifiTracker {
return data1; // When duplicate data is encountered, use first one.
}));
+ // Remove entries not in latest data set from service
+ mKnownNetworkEntryCache.removeIf(entry -> !knownNetworkDataByKey.keySet().contains(
+ entry.getStandardWifiEntryKey().getScanResultKey()));
+
// Create set of ScanResultKeys for known networks from service that are included in scan
final Set<ScanResultKey> newScanKeys = knownNetworkDataByKey.keySet().stream().filter(
scanResultsByKey::containsKey).collect(Collectors.toSet());
@@ -912,7 +957,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
for (ScanResultKey scanKey : newScanKeys) {
final StandardWifiEntryKey entryKey =
new StandardWifiEntryKey(scanKey, true /* isTargetingNewNetworks */);
- final KnownNetworkEntry newEntry = new KnownNetworkEntry(mInjector, mContext,
+ final KnownNetworkEntry newEntry = new KnownNetworkEntry(mInjector,
mMainHandler, entryKey, null /* configs */,
scanResultsByKey.get(scanKey), mWifiManager,
mSharedConnectivityManager, knownNetworkDataByKey.get(scanKey));
@@ -1009,7 +1054,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
updateSuggestedWifiEntryScans(Collections.emptyList());
updatePasspointWifiEntryScans(Collections.emptyList());
updateOsuWifiEntryScans(Collections.emptyList());
- if (mEnableSharedConnectivityFeature && BuildCompat.isAtLeastU()) {
+ if (mInjector.isSharedConnectivityFeatureEnabled() && BuildCompat.isAtLeastU()) {
mKnownNetworkEntryCache.clear();
mHotspotNetworkEntryCache.clear();
}
@@ -1033,7 +1078,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
updateSuggestedWifiEntryScans(scanResults);
updatePasspointWifiEntryScans(scanResults);
updateOsuWifiEntryScans(scanResults);
- if (mEnableSharedConnectivityFeature && BuildCompat.isAtLeastU()) {
+ if (mInjector.isSharedConnectivityFeatureEnabled() && BuildCompat.isAtLeastU()) {
updateKnownNetworkEntryScans(scanResults);
// Updating the hotspot entries here makes the UI more reliable when switching pages or
// when toggling settings while the internet picker is shown.
@@ -1141,14 +1186,18 @@ public class WifiPickerTracker extends BaseWifiTracker {
// thread times out waiting for driver restart and returns an empty list of networks.
updateWifiConfigurations(mWifiManager.getPrivilegedConfiguredNetworks());
}
+ // Create a WifiEntry for the current connection if there are no scan results yet.
+ conditionallyCreateConnectedWifiEntry(Utils.getWifiInfo(capabilities));
for (WifiEntry entry : getAllWifiEntries()) {
entry.onNetworkCapabilitiesChanged(network, capabilities);
}
- // Create a WifiEntry for the current connection if there are no scan results yet.
- conditionallyCreateConnectedStandardWifiEntry(network, capabilities);
- conditionallyCreateConnectedSuggestedWifiEntry(network, capabilities);
- conditionallyCreateConnectedPasspointWifiEntry(network, capabilities);
- conditionallyCreateConnectedNetworkRequestEntry(network, capabilities);
+ }
+
+ private void conditionallyCreateConnectedWifiEntry(@NonNull WifiInfo wifiInfo) {
+ conditionallyCreateConnectedStandardWifiEntry(wifiInfo);
+ conditionallyCreateConnectedSuggestedWifiEntry(wifiInfo);
+ conditionallyCreateConnectedPasspointWifiEntry(wifiInfo);
+ conditionallyCreateConnectedNetworkRequestEntry(wifiInfo);
}
/**
@@ -1156,11 +1205,9 @@ public class WifiPickerTracker extends BaseWifiTracker {
* created if there is no existing entry, or the existing entry doesn't match WifiInfo.
*/
@WorkerThread
- private void conditionallyCreateConnectedNetworkRequestEntry(
- @NonNull Network network, @NonNull NetworkCapabilities capabilities) {
+ private void conditionallyCreateConnectedNetworkRequestEntry(@NonNull WifiInfo wifiInfo) {
final List<WifiConfiguration> matchingConfigs = new ArrayList<>();
- WifiInfo wifiInfo = Utils.getWifiInfo(capabilities);
if (wifiInfo != null) {
for (int i = 0; i < mNetworkRequestConfigCache.size(); i++) {
final List<WifiConfiguration> configs = mNetworkRequestConfigCache.valueAt(i);
@@ -1178,12 +1225,11 @@ public class WifiPickerTracker extends BaseWifiTracker {
final StandardWifiEntryKey entryKey = new StandardWifiEntryKey(matchingConfigs.get(0));
if (mNetworkRequestEntry == null
|| !mNetworkRequestEntry.getStandardWifiEntryKey().equals(entryKey)) {
- mNetworkRequestEntry = new NetworkRequestEntry(mInjector, mContext, mMainHandler,
+ mNetworkRequestEntry = new NetworkRequestEntry(mInjector, mMainHandler,
entryKey, mWifiManager, false /* forSavedNetworksPage */);
mNetworkRequestEntry.updateConfig(matchingConfigs);
updateNetworkRequestEntryScans(mScanResultUpdater.getScanResults());
}
- mNetworkRequestEntry.onNetworkCapabilitiesChanged(network, capabilities);
}
/**
@@ -1191,9 +1237,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
* network yet, create and cache a new StandardWifiEntry for it.
*/
@WorkerThread
- private void conditionallyCreateConnectedStandardWifiEntry(
- @NonNull Network network, @NonNull NetworkCapabilities capabilities) {
- WifiInfo wifiInfo = Utils.getWifiInfo(capabilities);
+ private void conditionallyCreateConnectedStandardWifiEntry(@NonNull WifiInfo wifiInfo) {
if (wifiInfo == null || wifiInfo.isPasspointAp() || wifiInfo.isOsuAp()) {
return;
}
@@ -1215,9 +1259,8 @@ public class WifiPickerTracker extends BaseWifiTracker {
}
}
final StandardWifiEntry connectedEntry =
- new StandardWifiEntry(mInjector, mContext, mMainHandler, entryKey, configs,
+ new StandardWifiEntry(mInjector, mMainHandler, entryKey, configs,
null, mWifiManager, false /* forSavedNetworksPage */);
- connectedEntry.onNetworkCapabilitiesChanged(network, capabilities);
mStandardWifiEntryCache.add(connectedEntry);
return;
}
@@ -1228,9 +1271,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
* yet, create and cache a new StandardWifiEntry for it.
*/
@WorkerThread
- private void conditionallyCreateConnectedSuggestedWifiEntry(
- @NonNull Network network, @NonNull NetworkCapabilities capabilities) {
- WifiInfo wifiInfo = Utils.getWifiInfo(capabilities);
+ private void conditionallyCreateConnectedSuggestedWifiEntry(@NonNull WifiInfo wifiInfo) {
if (wifiInfo == null || wifiInfo.isPasspointAp() || wifiInfo.isOsuAp()) {
return;
}
@@ -1247,9 +1288,8 @@ public class WifiPickerTracker extends BaseWifiTracker {
}
}
final StandardWifiEntry connectedEntry =
- new StandardWifiEntry(mInjector, mContext, mMainHandler, entryKey, configs,
+ new StandardWifiEntry(mInjector, mMainHandler, entryKey, configs,
null, mWifiManager, false /* forSavedNetworksPage */);
- connectedEntry.onNetworkCapabilitiesChanged(network, capabilities);
mSuggestedWifiEntryCache.add(connectedEntry);
return;
}
@@ -1260,9 +1300,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
* yet, create and cache a new StandardWifiEntry for it.
*/
@WorkerThread
- private void conditionallyCreateConnectedPasspointWifiEntry(
- @NonNull Network network, @NonNull NetworkCapabilities capabilities) {
- WifiInfo wifiInfo = Utils.getWifiInfo(capabilities);
+ private void conditionallyCreateConnectedPasspointWifiEntry(@NonNull WifiInfo wifiInfo) {
if (wifiInfo == null || !wifiInfo.isPasspointAp()) {
return;
}
@@ -1280,7 +1318,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
uniqueIdToPasspointWifiEntryKey(cachedWifiConfig.getKey()));
PasspointWifiEntry connectedEntry;
if (passpointConfig != null) {
- connectedEntry = new PasspointWifiEntry(mInjector, mContext, mMainHandler,
+ connectedEntry = new PasspointWifiEntry(mInjector, mMainHandler,
passpointConfig, mWifiManager,
false /* forSavedNetworksPage */);
} else {
@@ -1289,7 +1327,6 @@ public class WifiPickerTracker extends BaseWifiTracker {
cachedWifiConfig, mWifiManager,
false /* forSavedNetworksPage */);
}
- connectedEntry.onNetworkCapabilitiesChanged(network, capabilities);
mPasspointWifiEntryCache.put(connectedEntry.getKey(), connectedEntry);
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiTrackerInjector.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiTrackerInjector.java
index c61f13105..f9f3eed91 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiTrackerInjector.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiTrackerInjector.java
@@ -19,6 +19,7 @@ package com.android.wifitrackerlib;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.os.UserManager;
+import android.provider.DeviceConfig;
import android.util.ArraySet;
import androidx.annotation.NonNull;
@@ -28,7 +29,10 @@ import java.util.Set;
/**
* Wrapper class for commonly referenced objects and static data.
*/
-class WifiTrackerInjector {
+public class WifiTrackerInjector {
+ private static final String DEVICE_CONFIG_NAMESPACE = "wifi";
+
+ @NonNull private final Context mContext;
private final boolean mIsDemoMode;
private final UserManager mUserManager;
private final DevicePolicyManager mDevicePolicyManager;
@@ -36,6 +40,7 @@ class WifiTrackerInjector {
// TODO(b/201571677): Migrate the rest of the common objects to WifiTrackerInjector.
WifiTrackerInjector(@NonNull Context context) {
+ mContext = context;
mIsDemoMode = NonSdkApiWrapper.isDemoMode(context);
mUserManager = context.getSystemService(UserManager.class);
mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
@@ -47,6 +52,10 @@ class WifiTrackerInjector {
}
}
+ @NonNull Context getContext() {
+ return mContext;
+ }
+
boolean isDemoMode() {
return mIsDemoMode;
}
@@ -65,4 +74,9 @@ class WifiTrackerInjector {
@NonNull Set<String> getNoAttributionAnnotationPackages() {
return mNoAttributionAnnotationPackages;
}
+
+ public boolean isSharedConnectivityFeatureEnabled() {
+ return DeviceConfig.getBoolean(DEVICE_CONFIG_NAMESPACE,
+ "shared_connectivity_enabled", false);
+ }
}
diff --git a/libs/WifiTrackerLib/tests/Android.bp b/libs/WifiTrackerLib/tests/Android.bp
index 3ce536c58..c7c30f59d 100644
--- a/libs/WifiTrackerLib/tests/Android.bp
+++ b/libs/WifiTrackerLib/tests/Android.bp
@@ -13,6 +13,7 @@
// limitations under the License.
package {
+ default_team: "trendy_team_fwk_wifi_hal",
default_applicable_licenses: ["Android-Apache-2.0"],
}
@@ -25,7 +26,7 @@ java_defaults {
"frameworks-base-testutils",
"mockito-target-extended-minus-junit4",
"truth",
- "Robolectric_all-target",
+ "Robolectric_all-target_upstream",
],
libs: [
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
index 9bbbd4c10..4bb599480 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
@@ -16,10 +16,14 @@
package com.android.wifitrackerlib;
+import static android.net.wifi.ScanResult.WIFI_STANDARD_11N;
import static android.net.wifi.WifiInfo.SECURITY_TYPE_PSK;
+import static android.net.wifi.WifiInfo.SECURITY_TYPE_SAE;
import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED;
import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_DISCONNECTED;
+import static com.android.wifitrackerlib.WifiEntry.MIN_FREQ_24GHZ;
+import static com.android.wifitrackerlib.WifiEntry.WIFI_LEVEL_MAX;
import static com.google.common.truth.Truth.assertThat;
@@ -33,6 +37,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.res.Resources;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.wifi.WifiInfo;
@@ -55,6 +60,7 @@ public class HotspotNetworkEntryTest {
@Mock private WifiEntry.DisconnectCallback mMockDisconnectCallback;
@Mock private WifiTrackerInjector mMockInjector;
@Mock private Context mMockContext;
+ @Mock private Resources mMockResources;
@Mock private WifiManager mMockWifiManager;
@Mock private SharedConnectivityManager mMockSharedConnectivityManager;
@Mock private WifiInfo mMockWifiInfo;
@@ -75,7 +81,6 @@ public class HotspotNetworkEntryTest {
.setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
.setNetworkName("Google Fi")
.setHotspotSsid("Instant Hotspot abcde")
- .setHotspotBssid("0a:0b:0c:0d:0e:0f")
.addHotspotSecurityType(SECURITY_TYPE_PSK)
.build();
@@ -88,7 +93,12 @@ public class HotspotNetworkEntryTest {
when(mMockNetworkCapabilities.getTransportInfo()).thenReturn(mMockWifiInfo);
when(mMockWifiInfo.isPrimary()).thenReturn(true);
- when(mMockWifiInfo.getRssi()).thenReturn(WifiInfo.INVALID_RSSI);
+ when(mMockWifiInfo.getSSID()).thenReturn("Instant Hotspot abcde");
+ when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_PSK);
+ when(mMockWifiInfo.getRssi()).thenReturn(TestUtils.GOOD_RSSI);
+ when(mMockWifiInfo.getMacAddress()).thenReturn("01:02:03:04:05:06");
+ when(mMockWifiInfo.getWifiStandard()).thenReturn(WIFI_STANDARD_11N);
+ when(mMockWifiInfo.getFrequency()).thenReturn(MIN_FREQ_24GHZ);
when(mMockContext.getString(R.string.wifitrackerlib_hotspot_network_connecting))
.thenReturn("Connecting…");
@@ -104,38 +114,50 @@ public class HotspotNetworkEntryTest {
Object[] args = invocation.getArguments();
return args[1] + " from " + args[2];
});
+ when(mMockContext.getString(R.string.wifitrackerlib_wifi_security_wpa_wpa2))
+ .thenReturn("WPA/WPA2-Personal");
+ when(mMockContext.getString(R.string.wifitrackerlib_wifi_standard_11n))
+ .thenReturn("Wi‑Fi 4");
+ when(mMockContext.getResources()).thenReturn(mMockResources);
+ when(mMockResources.getString(R.string.wifitrackerlib_wifi_band_24_ghz)).thenReturn(
+ "2.4 GHz");
+ when(mMockResources.getString(R.string.wifitrackerlib_multiband_separator)).thenReturn(
+ ", ");
}
@Test
- public void testConnectionInfoMatches_matchesBssid() {
+ public void testConnectionInfoMatches_matchesSsidAndSecurity() {
final HotspotNetworkEntry entry = new HotspotNetworkEntry(
mMockInjector, mMockContext, mTestHandler,
mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
- when(mMockWifiInfo.getBSSID()).thenReturn("00:00:00:00:00:00");
+ when(mMockWifiInfo.getSSID()).thenReturn("Instant Hotspot fghij");
+ when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_SAE);
assertThat(entry.connectionInfoMatches(mMockWifiInfo)).isFalse();
- when(mMockWifiInfo.getBSSID()).thenReturn("0a:0b:0c:0d:0e:0f");
+ when(mMockWifiInfo.getSSID()).thenReturn("Instant Hotspot abcde");
+ when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_PSK);
assertThat(entry.connectionInfoMatches(mMockWifiInfo)).isTrue();
}
@Test
- public void testOnNetworkCapabilitiesChanged_matchingBSSID_becomesConnected() {
+ public void testOnNetworkCapabilitiesChanged_matchingSsidAndSecurity_becomesConnected() {
final HotspotNetworkEntry entry = new HotspotNetworkEntry(
mMockInjector, mMockContext, mTestHandler,
mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
- when(mMockWifiInfo.getRssi()).thenReturn(TestUtils.GOOD_RSSI);
- // Ignore non-matching BSSID
- when(mMockWifiInfo.getBSSID()).thenReturn("00:00:00:00:00:00");
+ // Ignore non-matching SSID and security type
+ when(mMockWifiInfo.getSSID()).thenReturn("Instant Hotspot fghij");
+ when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_SAE);
entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
assertThat(entry.getConnectedState()).isEqualTo(CONNECTED_STATE_DISCONNECTED);
assertThat(entry.canConnect()).isTrue();
assertThat(entry.canDisconnect()).isFalse();
- // Matching BSSID should result in connected
- when(mMockWifiInfo.getBSSID()).thenReturn("0a:0b:0c:0d:0e:0f");
+ // Matching SSID and security type should result in connected
+ when(mMockWifiInfo.getSSID()).thenReturn("Instant Hotspot abcde");
+ when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_PSK);
entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
assertThat(entry.getConnectedState()).isEqualTo(CONNECTED_STATE_CONNECTED);
assertThat(entry.canConnect()).isFalse();
@@ -147,8 +169,6 @@ public class HotspotNetworkEntryTest {
final HotspotNetworkEntry entry = new HotspotNetworkEntry(
mMockInjector, mMockContext, mTestHandler,
mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
- when(mMockWifiInfo.getBSSID()).thenReturn("0a:0b:0c:0d:0e:0f");
- when(mMockWifiInfo.getRssi()).thenReturn(TestUtils.GOOD_RSSI);
entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
// Non-matching network loss should be ignored
@@ -228,6 +248,80 @@ public class HotspotNetworkEntryTest {
}
@Test
+ public void testGetSummary_connectionSuccess_resetsConnectingString() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.setListener(mMockListener);
+ entry.connect(mMockConnectCallback);
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_ENABLING_HOTSPOT);
+ mTestLooper.dispatchAll();
+
+ entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
+ entry.onNetworkLost(mMockNetwork);
+
+ assertThat(entry.getSummary()).isNotEqualTo("Connecting…");
+ }
+
+ @Test
+ public void testGetSsid_usesHotspotNetworkData() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+
+ assertThat(entry.getSsid()).isEqualTo("Instant Hotspot abcde");
+ }
+
+ @Test
+ public void testGetMacAddress_usesWifiInfo() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
+
+ assertThat(entry.getMacAddress()).isEqualTo("01:02:03:04:05:06");
+ }
+
+ @Test
+ public void testGetPrivacy_returnsRandomized() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+
+ assertThat(entry.getPrivacy()).isEqualTo(HotspotNetworkEntry.PRIVACY_RANDOMIZED_MAC);
+ }
+
+ @Test
+ public void testGetSecurityString_usesHotspotNetworkData() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+
+ assertThat(entry.getSecurityString(false)).isEqualTo("WPA/WPA2-Personal");
+ }
+
+ @Test
+ public void testGetStandardString_usesWifiInfo() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
+
+ assertThat(entry.getStandardString()).isEqualTo("Wi‑Fi 4");
+ }
+
+ @Test
+ public void testGetBandString_usesWifiInfo() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
+
+ assertThat(entry.getBandString()).isEqualTo("2.4 GHz");
+ }
+
+ @Test
public void testGetUpstreamConnectionStrength_usesHotspotNetworkData() {
final HotspotNetworkEntry entry = new HotspotNetworkEntry(
mMockInjector, mMockContext, mTestHandler,
@@ -264,6 +358,19 @@ public class HotspotNetworkEntryTest {
}
@Test
+ public void testGetLevel_statusNotConnected_returnsMaxValue() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+
+ when(mMockWifiInfo.getSSID()).thenReturn("Instant Hotspot fghij");
+ when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_SAE);
+ entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
+
+ assertThat(entry.getLevel()).isEqualTo(WIFI_LEVEL_MAX);
+ }
+
+ @Test
public void testConnect_serviceCalled() {
final HotspotNetworkEntry entry = new HotspotNetworkEntry(
mMockInjector, mMockContext, mTestHandler,
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/KnownNetworkEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/KnownNetworkEntryTest.java
index 8e33fb8bd..0ac498b26 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/KnownNetworkEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/KnownNetworkEntryTest.java
@@ -73,6 +73,7 @@ public class KnownNetworkEntryTest {
mTestLooper = new TestLooper();
mTestHandler = new Handler(mTestLooper.getLooper());
+ when(mMockInjector.getContext()).thenReturn(mMockContext);
when(mMockContext.getString(eq(R.string.wifitrackerlib_known_network_summary), anyString()))
.thenAnswer(invocation -> {
Object[] args = invocation.getArguments();
@@ -83,7 +84,7 @@ public class KnownNetworkEntryTest {
@Test
public void testGetSummary_usesKnownNetworkData() {
final KnownNetworkEntry entry = new KnownNetworkEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
mMockWifiManager, mMockSharedConnectivityManager, TEST_KNOWN_NETWORK_DATA);
@@ -93,7 +94,7 @@ public class KnownNetworkEntryTest {
@Test
public void testConnect_serviceCalled() {
final KnownNetworkEntry entry = new KnownNetworkEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
mMockWifiManager, mMockSharedConnectivityManager, TEST_KNOWN_NETWORK_DATA);
@@ -104,7 +105,7 @@ public class KnownNetworkEntryTest {
@Test
public void testConnect_nullManager_failureCallback() {
final KnownNetworkEntry entry = new KnownNetworkEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
mMockWifiManager, /* sharedConnectivityManager= */ null, TEST_KNOWN_NETWORK_DATA);
@@ -118,7 +119,7 @@ public class KnownNetworkEntryTest {
@Test
public void testConnect_onConnectionStatusChanged_failureCallback() {
final KnownNetworkEntry entry = new KnownNetworkEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
mMockWifiManager, mMockSharedConnectivityManager, TEST_KNOWN_NETWORK_DATA);
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/MergedCarrierEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/MergedCarrierEntryTest.java
index d8c257884..7bf21d5db 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/MergedCarrierEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/MergedCarrierEntryTest.java
@@ -38,6 +38,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class MergedCarrierEntryTest {
+ @Mock private WifiTrackerInjector mMockInjector;
@Mock private WifiEntry.ConnectCallback mMockConnectCallback;
@Mock private WifiManager mMockWifiManager;
@Mock private WifiInfo mMockWifiInfo;
@@ -58,6 +59,7 @@ public class MergedCarrierEntryTest {
when(mMockNetworkCapabilities.getTransportInfo()).thenReturn(mMockWifiInfo);
mTestLooper = new TestLooper();
mTestHandler = new Handler(mTestLooper.getLooper());
+ when(mMockInjector.getContext()).thenReturn(mMockContext);
when(mMockContext.getMainLooper()).thenReturn(Looper.getMainLooper());
when(mMockContext.getResources()).thenReturn(mMockResources);
when(mMockContext.getString(R.string.wifitrackerlib_summary_separator)).thenReturn("/");
@@ -68,8 +70,8 @@ public class MergedCarrierEntryTest {
@Test
public void testGetConnectedState_wifiInfoMatches_returnsConnected() {
final int subId = 1;
- final MergedCarrierEntry entry = new MergedCarrierEntry(mTestHandler, mMockWifiManager,
- false, mMockContext, subId);
+ final MergedCarrierEntry entry = new MergedCarrierEntry(mMockInjector, mTestHandler,
+ mMockWifiManager, false, subId);
when(mMockWifiInfo.isCarrierMerged()).thenReturn(true);
when(mMockWifiInfo.getSubscriptionId()).thenReturn(subId);
@@ -82,8 +84,8 @@ public class MergedCarrierEntryTest {
public void testConnect_disablesNonCarrierMergedWifi() {
Looper.prepare();
final int subId = 1;
- final MergedCarrierEntry entry = new MergedCarrierEntry(mTestHandler, mMockWifiManager,
- false, mMockContext, subId);
+ final MergedCarrierEntry entry = new MergedCarrierEntry(mMockInjector, mTestHandler,
+ mMockWifiManager, false, subId);
entry.connect(mMockConnectCallback);
mTestLooper.dispatchAll();
@@ -96,8 +98,8 @@ public class MergedCarrierEntryTest {
@Test
public void testDisconnect_enablesNonCarrierMergedWifiAndTriggersScan() {
final int subId = 1;
- final MergedCarrierEntry entry = new MergedCarrierEntry(mTestHandler, mMockWifiManager,
- false, mMockContext, subId);
+ final MergedCarrierEntry entry = new MergedCarrierEntry(mMockInjector, mTestHandler,
+ mMockWifiManager, false, subId);
entry.disconnect(null);
mTestLooper.dispatchAll();
@@ -108,8 +110,8 @@ public class MergedCarrierEntryTest {
@Test
public void testCanConnect_cellIsDefaultRoute_returnsFalse() {
final int subId = 1;
- final MergedCarrierEntry entry = new MergedCarrierEntry(mTestHandler, mMockWifiManager,
- false, mMockContext, subId);
+ final MergedCarrierEntry entry = new MergedCarrierEntry(mMockInjector, mTestHandler,
+ mMockWifiManager, false, subId);
entry.updateIsCellDefaultRoute(false);
assertThat(entry.canConnect()).isTrue();
@@ -122,8 +124,8 @@ public class MergedCarrierEntryTest {
@Test
public void testGetSsid_connected_returnsSanitizedWifiInfoSsid() {
final int subId = 1;
- final MergedCarrierEntry entry = new MergedCarrierEntry(mTestHandler, mMockWifiManager,
- false, mMockContext, subId);
+ final MergedCarrierEntry entry = new MergedCarrierEntry(mMockInjector, mTestHandler,
+ mMockWifiManager, false, subId);
when(mMockWifiInfo.isCarrierMerged()).thenReturn(true);
when(mMockWifiInfo.getSubscriptionId()).thenReturn(subId);
final String ssid = "ssid";
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/NetworkDetailsTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/NetworkDetailsTrackerTest.java
index ff4cec1c7..bc7667f74 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/NetworkDetailsTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/NetworkDetailsTrackerTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.fail;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
@@ -55,6 +56,7 @@ public class NetworkDetailsTrackerTest {
@Mock private WifiTrackerInjector mInjector;
@Mock private Lifecycle mMockLifecycle;
@Mock private Context mMockContext;
+ @Mock private Resources mResources;
@Mock private WifiManager mMockWifiManager;
@Mock private ConnectivityManager mMockConnectivityManager;
@Mock private Clock mMockClock;
@@ -87,6 +89,7 @@ public class NetworkDetailsTrackerTest {
when(mMockWifiManager.getScanResults()).thenReturn(new ArrayList<>());
when(mMockWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
when(mMockClock.millis()).thenReturn(START_MILLIS);
+ when(mMockContext.getResources()).thenReturn(mResources);
}
/**
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
index ebd86cb02..481e9783d 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
@@ -77,6 +77,7 @@ public class PasspointWifiEntryTest {
when(mMockWifiInfo.getNetworkId()).thenReturn(WifiConfiguration.INVALID_NETWORK_ID);
when(mMockWifiInfo.getRssi()).thenReturn(WifiInfo.INVALID_RSSI);
when(mMockNetworkCapabilities.getTransportInfo()).thenReturn(mMockWifiInfo);
+ when(mMockInjector.getContext()).thenReturn(mMockContext);
when(mMockContext.getResources()).thenReturn(mMockResources);
when(mMockContext.getString(R.string.wifitrackerlib_summary_separator)).thenReturn("/");
@@ -92,7 +93,7 @@ public class PasspointWifiEntryTest {
when(mMockContext.getString(R.string.wifitrackerlib_wifi_passpoint_expired))
.thenReturn(expired);
- PasspointWifiEntry passpointWifiEntry = new PasspointWifiEntry(mMockInjector, mMockContext,
+ PasspointWifiEntry passpointWifiEntry = new PasspointWifiEntry(mMockInjector,
mTestHandler, passpointConfiguration, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -105,7 +106,7 @@ public class PasspointWifiEntryTest {
String expired = "Expired";
when(mMockContext.getString(R.string.wifitrackerlib_wifi_passpoint_expired))
.thenReturn(expired);
- PasspointWifiEntry passpointWifiEntry = new PasspointWifiEntry(mMockInjector, mMockContext,
+ PasspointWifiEntry passpointWifiEntry = new PasspointWifiEntry(mMockInjector,
mTestHandler, passpointConfiguration, mMockWifiManager,
false /* forSavedNetworksPage */);
PasspointWifiEntry spyEntry = spy(passpointWifiEntry);
@@ -125,7 +126,7 @@ public class PasspointWifiEntryTest {
@Test
public void testGetMeteredChoice_afterSetMeteredChoice_getCorrectValue() {
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -149,7 +150,7 @@ public class PasspointWifiEntryTest {
when(mMockNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED))
.thenReturn(true);
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
@@ -173,7 +174,7 @@ public class PasspointWifiEntryTest {
when(mMockNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED))
.thenReturn(true);
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
@@ -188,7 +189,7 @@ public class PasspointWifiEntryTest {
when(mMockWifiInfo.getCurrentSecurityType())
.thenReturn(WifiInfo.SECURITY_TYPE_PASSPOINT_R1_R2);
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -215,7 +216,7 @@ public class PasspointWifiEntryTest {
when(mMockContext.getString(R.string.wifitrackerlib_wifi_security_passpoint))
.thenReturn(passpointSecurity);
- PasspointWifiEntry passpointWifiEntry = new PasspointWifiEntry(mMockInjector, mMockContext,
+ PasspointWifiEntry passpointWifiEntry = new PasspointWifiEntry(mMockInjector,
mTestHandler, passpointConfiguration, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -227,7 +228,7 @@ public class PasspointWifiEntryTest {
when(mMockWifiInfo.isPasspointAp()).thenReturn(true);
when(mMockWifiInfo.getPasspointFqdn()).thenReturn(FQDN);
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -270,7 +271,7 @@ public class PasspointWifiEntryTest {
when(mMockWifiInfo.isPasspointAp()).thenReturn(true);
when(mMockWifiInfo.getPasspointFqdn()).thenReturn(FQDN);
when(mMockWifiInfo.getMacAddress()).thenReturn(wifiInfoMac);
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -281,7 +282,7 @@ public class PasspointWifiEntryTest {
@Test
public void testIsAutoJoinEnabled_nullConfigs_returnsFalse() {
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -292,7 +293,7 @@ public class PasspointWifiEntryTest {
@Test
public void testCanSignIn_captivePortalCapability_returnsTrue() {
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -307,7 +308,7 @@ public class PasspointWifiEntryTest {
@Test
public void testUpdateNetworkCapabilities_userConnect_autoOpenCaptivePortalOnce() {
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -348,7 +349,7 @@ public class PasspointWifiEntryTest {
when(mMockWifiInfo.getPasspointFqdn()).thenReturn(FQDN);
when(mMockNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED))
.thenReturn(true);
- PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockInjector, mTestHandler,
getPasspointConfiguration(), mMockWifiManager,
false /* forSavedNetworksPage */);
entry.onNetworkCapabilitiesChanged(mMockNetwork, mMockNetworkCapabilities);
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/SavedNetworkTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/SavedNetworkTrackerTest.java
index c3880a47c..616ac3a5f 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/SavedNetworkTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/SavedNetworkTrackerTest.java
@@ -38,6 +38,7 @@ import static org.mockito.Mockito.when;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Resources;
import android.net.ConnectivityDiagnosticsManager;
import android.net.ConnectivityManager;
import android.net.LinkProperties;
@@ -83,6 +84,7 @@ public class SavedNetworkTrackerTest {
@Mock private WifiTrackerInjector mInjector;
@Mock private Lifecycle mMockLifecycle;
@Mock private Context mMockContext;
+ @Mock private Resources mResources;
@Mock private WifiManager mMockWifiManager;
@Mock private ConnectivityManager mMockConnectivityManager;
@Mock private ConnectivityDiagnosticsManager mMockConnectivityDiagnosticsManager;
@@ -148,6 +150,8 @@ public class SavedNetworkTrackerTest {
.build());
when(mMockConnectivityManager.getLinkProperties(mMockNetwork))
.thenReturn(mMockLinkProperties);
+ when(mInjector.getContext()).thenReturn(mMockContext);
+ when(mMockContext.getResources()).thenReturn(mResources);
when(mMockContext.getSystemService(ConnectivityDiagnosticsManager.class))
.thenReturn(mMockConnectivityDiagnosticsManager);
when(mMockClock.millis()).thenReturn(START_MILLIS);
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardNetworkDetailsTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardNetworkDetailsTrackerTest.java
index 8bac4f8d3..e00688c08 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardNetworkDetailsTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardNetworkDetailsTrackerTest.java
@@ -38,6 +38,7 @@ import static org.mockito.Mockito.when;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Resources;
import android.net.ConnectivityDiagnosticsManager;
import android.net.ConnectivityManager;
import android.net.wifi.ScanResult;
@@ -70,6 +71,7 @@ public class StandardNetworkDetailsTrackerTest {
@Mock private WifiTrackerInjector mInjector;
@Mock private Lifecycle mMockLifecycle;
@Mock private Context mMockContext;
+ @Mock private Resources mResources;
@Mock private WifiManager mMockWifiManager;
@Mock private WifiScanner mWifiScanner;
@Mock private ConnectivityManager mMockConnectivityManager;
@@ -116,6 +118,7 @@ public class StandardNetworkDetailsTrackerTest {
.thenReturn(TestUtils.OKAY_LEVEL);
when(mMockWifiManager.calculateSignalLevel(TestUtils.BAD_RSSI))
.thenReturn(TestUtils.BAD_LEVEL);
+ when(mMockContext.getResources()).thenReturn(mResources);
when(mMockContext.getSystemService(ConnectivityDiagnosticsManager.class))
.thenReturn(mMockConnectivityDiagnosticsManager);
when(mMockContext.getSystemService(WifiScanner.class)).thenReturn(mWifiScanner);
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
index 609b00c31..ebb24d987 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
@@ -133,6 +133,7 @@ public class StandardWifiEntryTest {
.thenReturn(TestUtils.OKAY_LEVEL);
when(mMockWifiManager.calculateSignalLevel(TestUtils.BAD_RSSI))
.thenReturn(TestUtils.BAD_LEVEL);
+ when(mMockInjector.getContext()).thenReturn(mMockContext);
when(mMockContext.getResources()).thenReturn(mMockResources);
when(mMockContext.getSystemService(ConnectivityManager.class))
@@ -152,7 +153,7 @@ public class StandardWifiEntryTest {
public void testConstructor_mismatchedSsids_throwsException() {
try {
new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
null, Arrays.asList(
buildScanResult("ssid0", "bssid0", 0, TestUtils.GOOD_RSSI),
@@ -170,7 +171,7 @@ public class StandardWifiEntryTest {
@Test
public void testConstructor_scanResults_setsBestLevel() {
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
null, Arrays.asList(
buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI),
@@ -192,13 +193,13 @@ public class StandardWifiEntryTest {
secureScan.capabilities = "EAP/SHA1";
final StandardWifiEntry unsecureEntry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN,
true /* isTargetingNewNetworks */),
null, Arrays.asList(unsecureScan), mMockWifiManager,
false /* forSavedNetworksPage */);
final StandardWifiEntry secureEntry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP,
true /* isTargetingNewNetworks */),
null, Arrays.asList(secureScan), mMockWifiManager,
@@ -214,7 +215,7 @@ public class StandardWifiEntryTest {
@Test
public void testUpdateScanResultInfo_mismatchedSsids_throwsException() {
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid0", SECURITY_TYPE_EAP),
null, Arrays.asList(buildScanResult("ssid0", "bssid0", 0, TestUtils.GOOD_RSSI)),
mMockWifiManager, false /* forSavedNetworksPage */);
@@ -234,7 +235,7 @@ public class StandardWifiEntryTest {
@Test
public void testUpdateScanResultInfo_notifiesListener() {
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
null, Arrays.asList(buildScanResult("ssid", "bssid", 0)),
mMockWifiManager, false /* forSavedNetworksPage */);
@@ -252,7 +253,7 @@ public class StandardWifiEntryTest {
@Test
public void testUpdateScanResultInfo_updatesLevel() {
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
null, Arrays.asList(buildScanResult("ssid", "bssid", 0, TestUtils.BAD_RSSI)),
mMockWifiManager, false /* forSavedNetworksPage */);
@@ -271,7 +272,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -285,7 +286,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -299,7 +300,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP);
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -320,7 +321,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -340,7 +341,7 @@ public class StandardWifiEntryTest {
final ScanResult scan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
scan.capabilities = "EAP/SHA1";
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
null, Arrays.asList(scan), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -363,7 +364,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.networkId = 1;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -382,7 +383,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.networkId = 1;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -406,7 +407,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.networkId = 1;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -430,7 +431,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.networkId = 1;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -456,7 +457,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.networkId = 1;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -487,7 +488,7 @@ public class StandardWifiEntryTest {
public void testConnect_savedNetwork_usesSavedConfig() {
final ScanResult scan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
null, Arrays.asList(scan), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -505,7 +506,7 @@ public class StandardWifiEntryTest {
public void testConnect_savedNetwork_usesSavedConfig_withOutSim() {
final ScanResult scan = buildScanResult("ssid", "bssid", 0, TestUtils.GOOD_RSSI);
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
null, Arrays.asList(scan), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -528,7 +529,7 @@ public class StandardWifiEntryTest {
@Test
public void testConnect_openNetwork_callsConnect() {
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
null, Arrays.asList(buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI)),
mMockWifiManager, false /* forSavedNetworksPage */);
@@ -543,7 +544,7 @@ public class StandardWifiEntryTest {
final ScanResult secureScan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
secureScan.capabilities = "PSK";
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
null, Arrays.asList(secureScan), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -569,7 +570,7 @@ public class StandardWifiEntryTest {
.thenReturn(MacAddress.fromString(randomizedMac));
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(spyConfig), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -589,7 +590,7 @@ public class StandardWifiEntryTest {
config.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
when(mMockWifiManager.getFactoryMacAddresses()).thenReturn(new String[]{factoryMac});
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -613,7 +614,7 @@ public class StandardWifiEntryTest {
config.macRandomizationSetting = WifiConfiguration.RANDOMIZATION_NONE;
when(mMockWifiManager.getFactoryMacAddresses()).thenReturn(new String[]{factoryMac});
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -662,7 +663,7 @@ public class StandardWifiEntryTest {
pskScanResult.capabilities = "PSK";
final StandardWifiEntry pskWifiEntry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey(pskScanResult.SSID, SECURITY_TYPE_PSK),
null, Arrays.asList(pskScanResult), mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -711,7 +712,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.networkId = 1;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -730,7 +731,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.setSecurityParams(wifiConfigurationSecureType);
return new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
new StandardWifiEntryKey(config), Collections.singletonList(config), null,
mMockWifiManager, false /* forSavedNetworksPage */);
}
@@ -742,7 +743,7 @@ public class StandardWifiEntryTest {
config.creatorUid = MANAGED_PROFILE_UID;
config.creatorName = TEST_PACKAGE_NAME;
return new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
new StandardWifiEntryKey(config), Collections.singletonList(config), null,
mMockWifiManager, false /* forSavedNetworksPage */);
}
@@ -765,7 +766,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.networkId = networkId;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -795,7 +796,7 @@ public class StandardWifiEntryTest {
config.SSID = "\"ssid\"";
config.networkId = networkId;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -819,7 +820,7 @@ public class StandardWifiEntryTest {
config.networkId = networkId;
final StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Collections.singletonList(config), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -872,7 +873,7 @@ public class StandardWifiEntryTest {
saeScan.capabilities = "SAE";
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Arrays.asList(pskConfig, saeConfig), Arrays.asList(pskScan, saeScan),
mMockWifiManager, false /* forSavedNetworksPage */);
@@ -908,7 +909,7 @@ public class StandardWifiEntryTest {
when(mMockWifiInfo.getRssi()).thenReturn(TestUtils.GOOD_RSSI);
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Arrays.asList(pskConfig, saeConfig), Arrays.asList(pskScan, saeScan),
mMockWifiManager, false /* forSavedNetworksPage */);
@@ -947,7 +948,7 @@ public class StandardWifiEntryTest {
eapWpa3Scan.capabilities = "[RSN-EAP/SHA256][MFPR][MFPC]";
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Arrays.asList(eapConfig, eapWpa3Config), Arrays.asList(eapScan, eapWpa3Scan),
mMockWifiManager, false /* forSavedNetworksPage */);
@@ -1024,7 +1025,7 @@ public class StandardWifiEntryTest {
when(mMockNetworkCapabilities.hasCapability(
NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL)).thenReturn(true);
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Collections.singletonList(wifiConfig), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -1044,7 +1045,7 @@ public class StandardWifiEntryTest {
when(mMockNetworkCapabilities.hasCapability(
NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL)).thenReturn(true);
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Collections.singletonList(wifiConfig), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -1070,7 +1071,7 @@ public class StandardWifiEntryTest {
@Test
public void testShouldEditBeforeConnect_nullWifiConfig_returnFalse() {
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
mMockWifiManager, false /* forSavedNetworksPage */);
@@ -1084,7 +1085,7 @@ public class StandardWifiEntryTest {
wifiConfig.SSID = "\"ssid\"";
wifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
Collections.singletonList(wifiConfig), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -1094,7 +1095,7 @@ public class StandardWifiEntryTest {
// Test enhanced open networks.
wifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OWE),
Collections.singletonList(wifiConfig), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -1108,7 +1109,7 @@ public class StandardWifiEntryTest {
wifiConfig.SSID = "\"ssid\"";
wifiConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(wifiConfig), null, mMockWifiManager,
false /* forSavedNetworksPage */);
@@ -1180,7 +1181,7 @@ public class StandardWifiEntryTest {
public void testCanConnect_nonEapMethod_returnTrueIfReachable() {
ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN),
null, Arrays.asList(buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI)),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1190,7 +1191,7 @@ public class StandardWifiEntryTest {
scan.capabilities = "OWE";
spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OWE),
null, Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1200,7 +1201,7 @@ public class StandardWifiEntryTest {
scan.capabilities = "WEP";
spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_WEP),
null, Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1210,7 +1211,7 @@ public class StandardWifiEntryTest {
scan.capabilities = "PSK";
spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
null, Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1220,7 +1221,7 @@ public class StandardWifiEntryTest {
scan.capabilities = "SAE";
spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_SAE),
null, Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1240,7 +1241,7 @@ public class StandardWifiEntryTest {
ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
scan.capabilities = "EAP/SHA1";
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1261,7 +1262,7 @@ public class StandardWifiEntryTest {
ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
scan.capabilities = "EAP/SHA1";
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1285,7 +1286,7 @@ public class StandardWifiEntryTest {
ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
scan.capabilities = "EAP/SHA1";
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1312,7 +1313,7 @@ public class StandardWifiEntryTest {
ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
scan.capabilities = "EAP/SHA1";
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1341,7 +1342,7 @@ public class StandardWifiEntryTest {
try {
when(NonSdkApiWrapper.getWifiSsidPolicy(mDevicePolicyManager)).thenReturn(policy);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1368,7 +1369,7 @@ public class StandardWifiEntryTest {
try {
when(NonSdkApiWrapper.getWifiSsidPolicy(mDevicePolicyManager)).thenReturn(policy);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1395,7 +1396,7 @@ public class StandardWifiEntryTest {
try {
when(NonSdkApiWrapper.getWifiSsidPolicy(mDevicePolicyManager)).thenReturn(policy);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1422,7 +1423,7 @@ public class StandardWifiEntryTest {
try {
when(NonSdkApiWrapper.getWifiSsidPolicy(mDevicePolicyManager)).thenReturn(policy);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1444,7 +1445,7 @@ public class StandardWifiEntryTest {
when(mUserManager.hasUserRestriction(
UserManager.DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1465,7 +1466,7 @@ public class StandardWifiEntryTest {
when(mUserManager.hasUserRestriction(
UserManager.DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1486,7 +1487,7 @@ public class StandardWifiEntryTest {
when(mUserManager.hasUserRestriction(
UserManager.DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1508,7 +1509,7 @@ public class StandardWifiEntryTest {
when(mDevicePolicyManager.getMinimumRequiredWifiSecurityLevel()).thenReturn(
DevicePolicyManager.WIFI_SECURITY_PERSONAL);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1528,7 +1529,7 @@ public class StandardWifiEntryTest {
when(mDevicePolicyManager.getMinimumRequiredWifiSecurityLevel()).thenReturn(
DevicePolicyManager.WIFI_SECURITY_ENTERPRISE_EAP);
StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
Collections.singletonList(config), Collections.singletonList(scan),
mMockWifiManager, false /* forSavedNetworksPage */));
@@ -1573,7 +1574,7 @@ public class StandardWifiEntryTest {
ScanResult saeScan = buildScanResult("ssid", "bssid0", 0, TestUtils.BAD_RSSI);
saeScan.capabilities = "SAE";
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK,
true /* isTargetingNewNetwork */),
Collections.singletonList(pskConfig), Arrays.asList(pskScan, saeScan),
@@ -1601,7 +1602,7 @@ public class StandardWifiEntryTest {
ScanResult openScan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
openScan.capabilities = "";
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN,
true /* isTargetingNewNetworks */),
null, Collections.singletonList(openScan),
@@ -1621,7 +1622,7 @@ public class StandardWifiEntryTest {
ScanResult oweScan = buildScanResult("ssid", "bssid0", 0, TestUtils.BAD_RSSI);
oweScan.capabilities = "OWE";
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OWE,
true /* isTargetingNewNetworks */),
null, Collections.singletonList(oweScan),
@@ -1641,7 +1642,7 @@ public class StandardWifiEntryTest {
ScanResult oweTransitionScan = buildScanResult("ssid", "bssid0", 0, TestUtils.BAD_RSSI);
oweTransitionScan.capabilities = "OWE_TRANSITION";
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN,
true /* isTargetingNewNetworks */),
null, Collections.singletonList(oweTransitionScan),
@@ -1671,7 +1672,7 @@ public class StandardWifiEntryTest {
oweConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OWE);
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_OPEN,
true /* isTargetingNewNetwork */),
Arrays.asList(openConfig, oweConfig), null,
@@ -1691,7 +1692,7 @@ public class StandardWifiEntryTest {
saeConfig.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK,
true /* isTargetingNewNetwork */),
Arrays.asList(pskConfig, saeConfig), null,
@@ -1711,7 +1712,7 @@ public class StandardWifiEntryTest {
eapWpa3Config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_EAP_WPA3_ENTERPRISE);
StandardWifiEntry entry = new StandardWifiEntry(
- mMockInjector, mMockContext, mTestHandler,
+ mMockInjector, mTestHandler,
ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_EAP,
true /* isTargetingNewNetwork */),
Arrays.asList(eapConfig, eapWpa3Config), null,
@@ -1774,4 +1775,48 @@ public class StandardWifiEntryTest {
assertThat(pskWifiEntry.canEasyConnect()).isFalse();
}
+
+ @Test
+ public void testHasAdminRestrictions_noUserRestrictionSet_returnsFalse() {
+ assumeTrue(BuildCompat.isAtLeastT());
+ WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
+ ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
+ scan.capabilities = "PSK";
+ when(mUserManager.hasUserRestriction(
+ UserManager.DISALLOW_ADD_WIFI_CONFIG)).thenReturn(false);
+ StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
+ mMockInjector, mTestHandler,
+ ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
+ Collections.singletonList(config), Collections.singletonList(scan),
+ mMockWifiManager, false /* forSavedNetworksPage */));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+ when(spyEntry.isSaved()).thenReturn(false);
+ when(spyEntry.isSuggestion()).thenReturn(false);
+
+ assertThat(spyEntry.hasAdminRestrictions()).isEqualTo(false);
+ }
+
+ @Test
+ public void testHasAdminRestrictions_userRestrictionSet_returnsTrue() {
+ assumeTrue(BuildCompat.isAtLeastT());
+ WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
+ ScanResult scan = buildScanResult("ssid", "bssid0", 0, TestUtils.GOOD_RSSI);
+ scan.capabilities = "PSK";
+ when(mUserManager.hasUserRestriction(
+ UserManager.DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true);
+ StandardWifiEntry spyEntry = spy(new StandardWifiEntry(
+ mMockInjector, mTestHandler,
+ ssidAndSecurityTypeToStandardWifiEntryKey("ssid", SECURITY_TYPE_PSK),
+ Collections.singletonList(config), Collections.singletonList(scan),
+ mMockWifiManager, false /* forSavedNetworksPage */));
+ when(spyEntry.getConnectedState()).thenReturn(CONNECTED_STATE_DISCONNECTED);
+ when(spyEntry.isSaved()).thenReturn(false);
+ when(spyEntry.isSuggestion()).thenReturn(false);
+
+ assertThat(spyEntry.hasAdminRestrictions()).isEqualTo(true);
+ }
}
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/UtilsTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/UtilsTest.java
index 91002dd78..eb7afc8db 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/UtilsTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/UtilsTest.java
@@ -62,6 +62,7 @@ import android.net.wifi.WifiEnterpriseConfig;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiScanner;
+import android.os.Build;
import android.os.Handler;
import android.os.PersistableBundle;
import android.os.test.TestLooper;
@@ -72,6 +73,7 @@ import android.telephony.TelephonyManager;
import android.text.SpannableString;
import android.text.style.ClickableSpan;
+import androidx.annotation.RequiresApi;
import androidx.core.os.BuildCompat;
import com.android.wifitrackerlib.shadow.ShadowSystem;
@@ -88,6 +90,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
+import java.util.StringJoiner;
@Config(shadows = {ShadowSystem.class})
public class UtilsTest {
@@ -130,6 +133,8 @@ public class UtilsTest {
private static final String BAND_24_GHZ = "2.4 GHz";
private static final String BAND_5_GHZ = "5 GHz";
private static final String BAND_6_GHZ = "6 GHz";
+ private static final String STRING_LINK_SPEED_MBPS = " Mbps";
+ private static final String STRING_LINK_SPEED_ON_BAND = " on ";
@Mock private WifiTrackerInjector mMockInjector;
@Mock private Context mMockContext;
@@ -146,7 +151,7 @@ public class UtilsTest {
private Handler mTestHandler;
private StandardWifiEntry getStandardWifiEntry(WifiConfiguration config) {
- return new StandardWifiEntry(mMockInjector, mMockContext, mTestHandler,
+ return new StandardWifiEntry(mMockInjector, mTestHandler,
new StandardWifiEntryKey(config), Collections.singletonList(config), null,
mMockWifiManager, false /* forSavedNetworksPage */);
}
@@ -191,6 +196,8 @@ public class UtilsTest {
.thenReturn(STRING_NETWORK_AVAILABLE_SIGN_IN);
when(mMockContext.getString(R.string.wifitrackerlib_summary_separator))
.thenReturn(STRING_SUMMARY_SEPARATOR);
+ when(mMockContext.getString(R.string.wifitrackerlib_multiband_separator))
+ .thenReturn(BAND_SEPARATOR);
when(mMockContext.getString(R.string.wifi_connected_low_quality))
.thenReturn(STRING_CONNECTED_LOW_QUALITY);
when(mMockContext.getString(R.string.wifitrackerlib_wifi_limited_connection))
@@ -207,6 +214,11 @@ public class UtilsTest {
any())).thenAnswer((answer) -> STRING_CONNECTED_VIA_APP + answer.getArguments()[1]);
when(mMockContext.getString(eq(R.string.wifitrackerlib_available_via_app),
any())).thenAnswer((answer) -> STRING_AVAILABLE_VIA_APP + answer.getArguments()[1]);
+ when(mMockContext.getString(eq(R.string.wifitrackerlib_link_speed_mbps),
+ any())).thenAnswer((answer) -> answer.getArguments()[1] + STRING_LINK_SPEED_MBPS);
+ when(mMockContext.getString(eq(R.string.wifitrackerlib_link_speed_on_band),
+ any())).thenAnswer((answer) -> answer.getArguments()[1] + STRING_LINK_SPEED_ON_BAND
+ + answer.getArguments()[2]);
}
@Test
@@ -682,7 +694,7 @@ public class UtilsTest {
when(wifiInfo.getWifiStandard()).thenReturn(ScanResult.WIFI_STANDARD_11BE);
when(wifiInfo.getAssociatedMloLinks()).thenReturn(mloLinks);
- assertThat(Utils.getBandString(mMockContext, wifiInfo))
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo))
.isEqualTo("2.4 GHz, 5 GHz, 6 GHz");
}
@@ -694,16 +706,16 @@ public class UtilsTest {
when(wifiInfo.getAssociatedMloLinks()).thenReturn(Collections.emptyList());
when(wifiInfo.getFrequency()).thenReturn(0);
- assertThat(Utils.getBandString(mMockContext, wifiInfo)).isEqualTo(BAND_UNKNOWN);
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo)).isEqualTo(BAND_UNKNOWN);
when(wifiInfo.getFrequency()).thenReturn(2400);
- assertThat(Utils.getBandString(mMockContext, wifiInfo)).isEqualTo(BAND_24_GHZ);
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo)).isEqualTo(BAND_24_GHZ);
when(wifiInfo.getFrequency()).thenReturn(5200);
- assertThat(Utils.getBandString(mMockContext, wifiInfo)).isEqualTo(BAND_5_GHZ);
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo)).isEqualTo(BAND_5_GHZ);
when(wifiInfo.getFrequency()).thenReturn(6000);
- assertThat(Utils.getBandString(mMockContext, wifiInfo)).isEqualTo(BAND_6_GHZ);
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo)).isEqualTo(BAND_6_GHZ);
}
@Test
@@ -712,16 +724,16 @@ public class UtilsTest {
WifiInfo wifiInfo = mock(WifiInfo.class);
when(wifiInfo.getFrequency()).thenReturn(0);
- assertThat(Utils.getBandString(mMockContext, wifiInfo)).isEqualTo(BAND_UNKNOWN);
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo)).isEqualTo(BAND_UNKNOWN);
when(wifiInfo.getFrequency()).thenReturn(2400);
- assertThat(Utils.getBandString(mMockContext, wifiInfo)).isEqualTo(BAND_24_GHZ);
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo)).isEqualTo(BAND_24_GHZ);
when(wifiInfo.getFrequency()).thenReturn(5200);
- assertThat(Utils.getBandString(mMockContext, wifiInfo)).isEqualTo(BAND_5_GHZ);
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo)).isEqualTo(BAND_5_GHZ);
when(wifiInfo.getFrequency()).thenReturn(6000);
- assertThat(Utils.getBandString(mMockContext, wifiInfo)).isEqualTo(BAND_6_GHZ);
+ assertThat(Utils.wifiInfoToBandString(mMockContext, wifiInfo)).isEqualTo(BAND_6_GHZ);
}
@Test
@@ -894,4 +906,122 @@ public class UtilsTest {
WifiInfo.SECURITY_TYPE_PASSPOINT_R1_R2)))
.isEqualTo(WifiInfo.SECURITY_TYPE_PASSPOINT_R3);
}
+
+ @Test
+ public void testGetSpeedStringUnknownSpeed() {
+ WifiInfo wifiInfo = mock(WifiInfo.class);
+ when(wifiInfo.getTxLinkSpeedMbps()).thenReturn(WifiInfo.LINK_SPEED_UNKNOWN);
+ when(wifiInfo.getRxLinkSpeedMbps()).thenReturn(WifiInfo.LINK_SPEED_UNKNOWN);
+
+ assertThat(Utils.getSpeedString(mMockContext, wifiInfo, true))
+ .isEqualTo("");
+ assertThat(Utils.getSpeedString(mMockContext, wifiInfo, false))
+ .isEqualTo("");
+ }
+
+ @Test
+ public void testGetSpeedString() {
+ int txSpeedMbps = 15;
+ int rxSpeedMbps = 100;
+ WifiInfo wifiInfo = mock(WifiInfo.class);
+ when(wifiInfo.getTxLinkSpeedMbps()).thenReturn(txSpeedMbps);
+ when(wifiInfo.getRxLinkSpeedMbps()).thenReturn(rxSpeedMbps);
+
+ assertThat(Utils.getSpeedString(mMockContext, wifiInfo, true))
+ .isEqualTo(txSpeedMbps + STRING_LINK_SPEED_MBPS);
+ assertThat(Utils.getSpeedString(mMockContext, wifiInfo, false))
+ .isEqualTo(rxSpeedMbps + STRING_LINK_SPEED_MBPS);
+ }
+
+ @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+ private MloLink createMockMloLink(int band, int linkState, int txSpeedMbps, int rxSpeedMbps) {
+ if (!BuildCompat.isAtLeastU()) {
+ return null;
+ }
+ MloLink link = mock(MloLink.class);
+ when(link.getBand()).thenReturn(band);
+ when(link.getState()).thenReturn(linkState);
+ when(link.getTxLinkSpeedMbps()).thenReturn(txSpeedMbps);
+ when(link.getRxLinkSpeedMbps()).thenReturn(rxSpeedMbps);
+ return link;
+ }
+
+ @Test
+ public void testGetSpeedStringWithSingleMloLink() {
+ assumeTrue(BuildCompat.isAtLeastU());
+ int txSpeedMbps = 15;
+ int rxSpeedMbps = 100;
+ WifiInfo wifiInfo = mock(WifiInfo.class);
+ when(wifiInfo.getTxLinkSpeedMbps()).thenReturn(txSpeedMbps);
+ when(wifiInfo.getRxLinkSpeedMbps()).thenReturn(rxSpeedMbps);
+ List<MloLink> links = List.of(
+ createMockMloLink(WifiScanner.WIFI_BAND_24_GHZ, MloLink.MLO_LINK_STATE_ACTIVE,
+ txSpeedMbps, rxSpeedMbps)
+ );
+ when(wifiInfo.getAssociatedMloLinks()).thenReturn(links);
+
+ assertThat(Utils.getSpeedString(mMockContext, wifiInfo, true))
+ .isEqualTo(txSpeedMbps + STRING_LINK_SPEED_MBPS);
+ assertThat(Utils.getSpeedString(mMockContext, wifiInfo, false))
+ .isEqualTo(rxSpeedMbps + STRING_LINK_SPEED_MBPS);
+ }
+
+ @Test
+ public void testGetSpeedStringWithMultipleMloLinks() {
+ assumeTrue(BuildCompat.isAtLeastU());
+ int txSpeedMbps = 15;
+ int rxSpeedMbps = 100;
+ WifiInfo wifiInfo = mock(WifiInfo.class);
+ when(wifiInfo.getTxLinkSpeedMbps()).thenReturn(txSpeedMbps);
+ when(wifiInfo.getRxLinkSpeedMbps()).thenReturn(rxSpeedMbps);
+ List<MloLink> links = List.of(
+ createMockMloLink(WifiScanner.WIFI_BAND_UNSPECIFIED, MloLink.MLO_LINK_STATE_ACTIVE,
+ txSpeedMbps, rxSpeedMbps),
+ createMockMloLink(WifiScanner.WIFI_BAND_24_GHZ, MloLink.MLO_LINK_STATE_ACTIVE,
+ txSpeedMbps, rxSpeedMbps),
+ createMockMloLink(WifiScanner.WIFI_BAND_24_GHZ, MloLink.MLO_LINK_STATE_IDLE,
+ txSpeedMbps, rxSpeedMbps),
+ createMockMloLink(WifiScanner.WIFI_BAND_5_GHZ, MloLink.MLO_LINK_STATE_ACTIVE,
+ txSpeedMbps, rxSpeedMbps),
+ createMockMloLink(WifiScanner.WIFI_BAND_5_GHZ, MloLink.MLO_LINK_STATE_ACTIVE,
+ txSpeedMbps, rxSpeedMbps),
+ createMockMloLink(WifiScanner.WIFI_BAND_6_GHZ, MloLink.MLO_LINK_STATE_ACTIVE,
+ txSpeedMbps, rxSpeedMbps),
+ createMockMloLink(WifiScanner.WIFI_BAND_6_GHZ, MloLink.MLO_LINK_STATE_ACTIVE,
+ -1, 0)
+ );
+ when(wifiInfo.getAssociatedMloLinks()).thenReturn(links);
+
+ // The idle 2 Ghz link should not be included
+ // The extra 5 Ghz link should be included
+ // The extra 5 Ghz link should be included
+ // The 6 Ghz link with non-positive link speed should not be included
+ String expectedTxSpeed = new StringJoiner(BAND_SEPARATOR)
+ .add(txSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_UNKNOWN)
+ .add(txSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_24_GHZ)
+ .add(txSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_5_GHZ)
+ .add(txSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_5_GHZ)
+ .add(txSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_6_GHZ).toString();
+ assertThat(Utils.getSpeedString(mMockContext, wifiInfo, true))
+ .isEqualTo(expectedTxSpeed);
+
+ String expectedRxSpeed = new StringJoiner(BAND_SEPARATOR)
+ .add(rxSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_UNKNOWN)
+ .add(rxSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_24_GHZ)
+ .add(rxSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_5_GHZ)
+ .add(rxSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_5_GHZ)
+ .add(rxSpeedMbps + STRING_LINK_SPEED_MBPS
+ + STRING_LINK_SPEED_ON_BAND + BAND_6_GHZ).toString();
+ assertThat(Utils.getSpeedString(mMockContext, wifiInfo, false))
+ .isEqualTo(expectedRxSpeed);
+ }
}
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
index 96b3e5459..ee6c4199c 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
@@ -80,7 +80,6 @@ import android.util.Pair;
import androidx.annotation.NonNull;
import androidx.lifecycle.Lifecycle;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@@ -196,13 +195,15 @@ public class WifiPickerTrackerTest {
});
// A real NetworkCapabilities is needed here in order to create a copy (with location info)
// using the NetworkCapabilities constructor in handleOnStart.
- when(mMockConnectivityManager.getNetworkCapabilities(mMockNetwork))
- .thenReturn(new NetworkCapabilities.Builder()
- .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
- .build());
+ NetworkCapabilities realNetCaps = new NetworkCapabilities.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .setTransportInfo(mock(WifiInfo.class))
+ .build();
+ when(mMockConnectivityManager.getNetworkCapabilities(mMockNetwork)).thenReturn(realNetCaps);
when(mMockConnectivityManager.getLinkProperties(mMockNetwork))
.thenReturn(mMockLinkProperties);
when(mMockSharedConnectivityManager.unregisterCallback(any())).thenReturn(true);
+ when(mInjector.getContext()).thenReturn(mMockContext);
when(mMockContext.getResources()).thenReturn(mMockResources);
when(mMockContext.getSystemService(TelephonyManager.class))
.thenReturn(mMockTelephonyManager);
@@ -218,13 +219,7 @@ public class WifiPickerTrackerTest {
new String[]{"", "Scanning", "Connecting", "Authenticating", "Obtaining IP address",
"Connected", "Suspended", "Disconnecting", "Unsuccessful", "Blocked",
"Temporarily avoiding poor connection"});
-
- BaseWifiTracker.mEnableSharedConnectivityFeature = true;
- }
-
- @After
- public void tearDown() {
- BaseWifiTracker.mEnableSharedConnectivityFeature = false;
+ when(mInjector.isSharedConnectivityFeatureEnabled()).thenReturn(true);
}
/**
@@ -618,12 +613,47 @@ public class WifiPickerTrackerTest {
// Network should be returned in getConnectedWifiEntry() even though it's not L3 connected.
verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
-// assertThat(wifiPickerTracker.getWifiEntries()).isEmpty();
+ assertThat(wifiPickerTracker.getWifiEntries()).isEmpty();
assertThat(wifiPickerTracker.getConnectedWifiEntry()).isEqualTo(entry);
assertThat(entry.isPrimaryNetwork()).isTrue();
}
/**
+ * Tests that an L2 connected network request (i.e. from NETWORK_STATE_CHANGED) will correctly
+ * be returned in getConnectedEntry().
+ */
+ @Test
+ public void testGetConnectedEntry_networkRequestL2Connected_returnsConnectedEntry() {
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.networkId = 1;
+ config.fromWifiNetworkSpecifier = true;
+ when(mMockWifiManager.getPrivilegedConfiguredNetworks())
+ .thenReturn(Collections.singletonList(config));
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ verify(mMockContext).registerReceiver(
+ mBroadcastReceiverCaptor.capture(), any(), any(), any());
+ verify(mMockConnectivityManager).registerNetworkCallback(
+ any(), mNetworkCallbackCaptor.capture(), any());
+
+ // Simulate an L2 connected network that's still authenticating.
+ when(mMockWifiInfo.getNetworkId()).thenReturn(1);
+ when(mMockWifiInfo.getRssi()).thenReturn(-50);
+ NetworkInfo mockNetworkInfo = mock(NetworkInfo.class);
+ when(mockNetworkInfo.getDetailedState())
+ .thenReturn(NetworkInfo.DetailedState.AUTHENTICATING);
+ Intent networkStateChanged = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+ networkStateChanged.putExtra(WifiManager.EXTRA_NETWORK_INFO, mockNetworkInfo);
+ mBroadcastReceiverCaptor.getValue().onReceive(mMockContext, networkStateChanged);
+
+ // Network should be returned in getConnectedWifiEntry() even though it's not L3 connected.
+ verify(mMockCallback, atLeastOnce()).onWifiEntriesChanged();
+ assertThat(wifiPickerTracker.getConnectedWifiEntry()).isNotNull();
+ }
+
+ /**
* Tests that connecting to a network will update getConnectedEntry() to return the connected
* WifiEntry if the framework times out and gives us an empty list of configs.
*/
@@ -767,6 +797,41 @@ public class WifiPickerTrackerTest {
}
/**
+ * Tests that a connected WifiEntry will become the default network if the network underlies
+ * the current default network.
+ */
+ @Test
+ public void testGetConnectedEntry_defaultNetworkHasUnderlyingWifi_becomesDefaultNetwork() {
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.networkId = 1;
+ when(mMockWifiManager.getPrivilegedConfiguredNetworks())
+ .thenReturn(Collections.singletonList(config));
+ when(mMockWifiManager.getScanResults()).thenReturn(Arrays.asList(
+ buildScanResult("ssid", "bssid", START_MILLIS)));
+ when(mMockWifiInfo.getNetworkId()).thenReturn(1);
+ when(mMockWifiInfo.getRssi()).thenReturn(-50);
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ verify(mMockConnectivityManager)
+ .registerNetworkCallback(any(), mNetworkCallbackCaptor.capture(), any());
+ verify(mMockConnectivityManager, atLeast(0)).registerSystemDefaultNetworkCallback(
+ mDefaultNetworkCallbackCaptor.capture(), any());
+ verify(mMockConnectivityManager, atLeast(0)).registerDefaultNetworkCallback(
+ mDefaultNetworkCallbackCaptor.capture(), any());
+
+ Network vpnNetwork = mock(Network.class);
+ NetworkCapabilities vpnCaps = new NetworkCapabilities.Builder()
+ .addCapability(NetworkCapabilities.TRANSPORT_VPN)
+ .setUnderlyingNetworks(List.of(mMockNetwork))
+ .build();
+ mDefaultNetworkCallbackCaptor.getValue().onCapabilitiesChanged(vpnNetwork, vpnCaps);
+
+ assertThat(wifiPickerTracker.getConnectedWifiEntry().isDefaultNetwork()).isTrue();
+ }
+
+ /**
* Tests that a connected WifiEntry will return "Low quality" as the summary if Wifi is
* validated but cell is the default route.
*/
@@ -2104,6 +2169,27 @@ public class WifiPickerTrackerTest {
verify(mMockWifiManager).startScan();
}
+ /**
+ * Tests that the BaseWifiTracker.Scanner does not scan if scanning was disabled.
+ */
+ @Test
+ public void testScanner_scanningDisabled_scannerDoesNotStart() {
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.disableScanning();
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ verify(mMockContext).registerReceiver(mBroadcastReceiverCaptor.capture(),
+ any(), any(), any());
+ mBroadcastReceiverCaptor.getValue().onReceive(mMockContext,
+ new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION).putExtra(
+ WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_ENABLED));
+
+ ArgumentCaptor<WifiScanner.ScanListener> mScanListenerCaptor =
+ ArgumentCaptor.forClass(WifiScanner.ScanListener.class);
+ verify(mWifiScanner, never()).startScan(any(), mScanListenerCaptor.capture());
+ verify(mMockWifiManager, never()).startScan();
+ }
+
@Test
public void testScanner_startAfterOnStop_doesNotStart() {
final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
@@ -2160,6 +2246,54 @@ public class WifiPickerTrackerTest {
}
@Test
+ public void testSharedConnectivityManager_onServiceDisconnected_networksCleared() {
+ final KnownNetwork testKnownNetwork = new KnownNetwork.Builder()
+ .setNetworkSource(KnownNetwork.NETWORK_SOURCE_NEARBY_SELF)
+ .setSsid("ssid")
+ .addSecurityType(SECURITY_TYPE_PSK)
+ .addSecurityType(SECURITY_TYPE_SAE)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .build();
+ when(mMockSharedConnectivityManager.getKnownNetworks()).thenReturn(
+ Collections.singletonList(testKnownNetwork));
+ when(mMockWifiManager.getScanResults()).thenReturn(
+ Collections.singletonList(buildScanResult("ssid", "bssid", START_MILLIS,
+ "[PSK/SAE]")));
+ final HotspotNetwork testHotspotNetwork = new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .build();
+ when(mMockSharedConnectivityManager.getHotspotNetworks()).thenReturn(
+ Collections.singletonList(testHotspotNetwork));
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ verify(mMockSharedConnectivityManager).registerCallback(any(),
+ mSharedConnectivityCallbackCaptor.capture());
+ mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+ mTestLooper.dispatchAll();
+
+ mSharedConnectivityCallbackCaptor.getValue().onServiceDisconnected();
+
+ assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+ entry -> entry instanceof KnownNetworkEntry).toList()).isEmpty();
+ assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+ entry -> entry instanceof HotspotNetworkEntry).toList()).isEmpty();
+ }
+
+ @Test
public void testKnownNetworks_noMatchingScanResult_entryNotIncluded() {
final KnownNetwork testKnownNetwork = new KnownNetwork.Builder()
.setNetworkSource(KnownNetwork.NETWORK_SOURCE_NEARBY_SELF)
@@ -2264,6 +2398,40 @@ public class WifiPickerTrackerTest {
}
@Test
+ public void testKnownNetworks_newKnownNetworkMatchesSavedNetwork_knownNetworkNotIncluded() {
+ final KnownNetwork testKnownNetwork = new KnownNetwork.Builder()
+ .setNetworkSource(KnownNetwork.NETWORK_SOURCE_NEARBY_SELF)
+ .setSsid("ssid")
+ .addSecurityType(SECURITY_TYPE_PSK)
+ .addSecurityType(SECURITY_TYPE_SAE)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .build();
+ when(mMockWifiManager.getScanResults()).thenReturn(
+ Collections.singletonList(buildScanResult("ssid", "bssid", START_MILLIS,
+ "[PSK/SAE]")));
+ final WifiConfiguration config = new WifiConfiguration();
+ config.SSID = "\"ssid\"";
+ config.networkId = 1;
+ config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
+ when(mMockWifiManager.getPrivilegedConfiguredNetworks())
+ .thenReturn(Collections.singletonList(config));
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ wifiPickerTracker.handleKnownNetworksUpdated(Collections.singletonList(testKnownNetwork));
+
+ assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+ entry -> entry instanceof KnownNetworkEntry).toList()).isEmpty();
+ assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+ entry -> entry instanceof StandardWifiEntry).toList()).hasSize(1);
+ }
+
+ @Test
public void testKnownNetworks_onKnownNetworkConnectionStatusChanged_matchingEntryCalled() {
final KnownNetwork testKnownNetwork1 = new KnownNetwork.Builder()
.setNetworkSource(KnownNetwork.NETWORK_SOURCE_NEARBY_SELF)
@@ -2322,6 +2490,41 @@ public class WifiPickerTrackerTest {
}
@Test
+ public void testKnownNetworks_entryRemoved() {
+ final KnownNetwork testKnownNetwork = new KnownNetwork.Builder()
+ .setNetworkSource(KnownNetwork.NETWORK_SOURCE_NEARBY_SELF)
+ .setSsid("ssid")
+ .addSecurityType(SECURITY_TYPE_PSK)
+ .addSecurityType(SECURITY_TYPE_SAE)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .build();
+ when(mMockSharedConnectivityManager.getKnownNetworks()).thenReturn(
+ Collections.singletonList(testKnownNetwork));
+ when(mMockWifiManager.getScanResults()).thenReturn(
+ Collections.singletonList(buildScanResult("ssid", "bssid", START_MILLIS,
+ "[PSK/SAE]")));
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ verify(mMockSharedConnectivityManager).registerCallback(any(),
+ mSharedConnectivityCallbackCaptor.capture());
+ mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+ mTestLooper.dispatchAll();
+ assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+ entry -> entry instanceof KnownNetworkEntry).toList()).hasSize(1);
+
+ wifiPickerTracker.handleKnownNetworksUpdated(Collections.emptyList());
+
+ assertThat(wifiPickerTracker.getWifiEntries().stream().filter(
+ entry -> entry instanceof KnownNetworkEntry).toList()).isEmpty();
+ }
+
+ @Test
public void testHotspotNetworks_noActiveHotspot_virtualEntryIncluded() {
final HotspotNetwork testHotspotNetwork = new HotspotNetwork.Builder()
.setDeviceId(1)
@@ -2366,9 +2569,7 @@ public class WifiPickerTrackerTest {
.setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
.setNetworkName("Google Fi")
.setHotspotSsid("Instant Hotspot abcde")
- .setHotspotBssid("0a:0b:0c:0d:0e:0f")
.addHotspotSecurityType(SECURITY_TYPE_PSK)
- .addHotspotSecurityType(SECURITY_TYPE_SAE)
.build();
when(mMockSharedConnectivityManager.getHotspotNetworks()).thenReturn(
Collections.singletonList(testHotspotNetwork));
@@ -2402,9 +2603,7 @@ public class WifiPickerTrackerTest {
.setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
.setNetworkName("Google Fi")
.setHotspotSsid("Instant Hotspot abcde")
- .setHotspotBssid("0a:0b:0c:0d:0e:0f")
.addHotspotSecurityType(SECURITY_TYPE_PSK)
- .addHotspotSecurityType(SECURITY_TYPE_SAE)
.build();
when(mMockSharedConnectivityManager.getHotspotNetworks()).thenReturn(
Collections.singletonList(testHotspotNetwork));
@@ -2447,22 +2646,19 @@ public class WifiPickerTrackerTest {
.setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
.setNetworkName("Google Fi")
.setHotspotSsid("Instant Hotspot abcde")
- .setHotspotBssid("0a:0b:0c:0d:0e:0f")
.addHotspotSecurityType(SECURITY_TYPE_PSK)
- .addHotspotSecurityType(SECURITY_TYPE_SAE)
.build();
when(mMockSharedConnectivityManager.getHotspotNetworks()).thenReturn(
Collections.singletonList(testHotspotNetwork));
final WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"Instant Hotspot abcde\"";
- config.BSSID = "0a:0b:0c:0d:0e:0f";
config.networkId = 1;
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
when(mMockWifiManager.getPrivilegedConfiguredNetworks())
.thenReturn(Collections.singletonList(config));
when(mMockWifiInfo.getNetworkId()).thenReturn(1);
when(mMockWifiInfo.getRssi()).thenReturn(GOOD_RSSI);
- when(mMockWifiInfo.getBSSID()).thenReturn("0a:0b:0c:0d:0e:0f");
+ when(mMockWifiInfo.getSSID()).thenReturn("Instant Hotspot abcde");
when(mMockWifiInfo.getCurrentSecurityType()).thenReturn(SECURITY_TYPE_PSK);
when(mMockWifiManager.getScanResults()).thenReturn(Collections.singletonList(
buildScanResult("Instant Hotspot abcde", "0a:0b:0c:0d:0e:0f", START_MILLIS,
@@ -2535,4 +2731,59 @@ public class WifiPickerTrackerTest {
verify(connectCallback1).onConnectResult(anyInt());
verify(connectCallback2, never()).onConnectResult(anyInt());
}
+
+ @Test
+ public void testHotspotNetworks_multipleAvailableNetworks_sortedByUpstreamConnectionStrength() {
+ final HotspotNetwork testHotspotNetwork1 = new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone 1", "Pixel 5")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(2)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .build();
+ final HotspotNetwork testHotspotNetwork2 = new HotspotNetwork.Builder()
+ .setDeviceId(2)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone 2", "Pixel 6")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(4)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .build();
+ final HotspotNetwork testHotspotNetwork3 = new HotspotNetwork.Builder()
+ .setDeviceId(3)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Phone 3", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_PHONE)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .build();
+ when(mMockSharedConnectivityManager.getHotspotNetworks()).thenReturn(
+ List.of(testHotspotNetwork1, testHotspotNetwork2, testHotspotNetwork3));
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ verify(mMockSharedConnectivityManager).registerCallback(any(),
+ mSharedConnectivityCallbackCaptor.capture());
+
+ mSharedConnectivityCallbackCaptor.getValue().onServiceConnected();
+ mTestLooper.dispatchAll();
+
+ assertThat(wifiPickerTracker.getWifiEntries()).hasSize(3);
+ assertThat(((HotspotNetworkEntry) wifiPickerTracker.getWifiEntries().get(0))
+ .getHotspotNetworkEntryKey().getDeviceId()).isEqualTo(2);
+ assertThat(((HotspotNetworkEntry) wifiPickerTracker.getWifiEntries().get(1))
+ .getHotspotNetworkEntryKey().getDeviceId()).isEqualTo(3);
+ assertThat(((HotspotNetworkEntry) wifiPickerTracker.getWifiEntries().get(2))
+ .getHotspotNetworkEntryKey().getDeviceId()).isEqualTo(1);
+ }
}