summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-11-10 20:00:10 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-11-10 20:00:10 +0000
commit0419652b4f4ff1631a3392e61023e549e922154a (patch)
tree30ab859ec5483b2d52141915829bd670525e273f
parenta82e5481806b32d25d924b61b25ba90b8a967390 (diff)
parent990a2142b8ba9bf57e2c6b9cdc16961d645fdd64 (diff)
downloadwifi-android-platform-12.0.0_r30.tar.gz
Change-Id: I5378ea3453b681ebd7f18dcddce84d7782af3b25
-rw-r--r--libs/WifiTrackerLib/res/values-da/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-fr/strings.xml2
-rw-r--r--libs/WifiTrackerLib/res/values-gu/strings.xml2
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java13
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java19
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java3
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java16
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java82
8 files changed, 125 insertions, 14 deletions
diff --git a/libs/WifiTrackerLib/res/values-da/strings.xml b/libs/WifiTrackerLib/res/values-da/strings.xml
index 415b9b46a..fd089a113 100644
--- a/libs/WifiTrackerLib/res/values-da/strings.xml
+++ b/libs/WifiTrackerLib/res/values-da/strings.xml
@@ -52,7 +52,7 @@
<string name="wifitrackerlib_osu_completing_sign_up" msgid="4359503050543182480">"Fuldfører registrering…"</string>
<string name="wifitrackerlib_osu_sign_up_failed" msgid="3964140125523395898">"Registreringen kunne ikke fuldføres. Tryk for at prøve igen."</string>
<string name="wifitrackerlib_osu_sign_up_complete" msgid="3279606633343124580">"Registreringen er fuldført. Opretter forbindelse…"</string>
- <string name="wifitrackerlib_imsi_protection_warning" msgid="7202210931586169466">"Dette netværk kræver et SIM-id, der kan bruges til at spore enhedens placering. "<annotation id="url">"Få flere oplysninger"</annotation></string>
+ <string name="wifitrackerlib_imsi_protection_warning" msgid="7202210931586169466">"Dette netværk kræver et SIM-id, der kan bruges til at spore enhedens lokation. "<annotation id="url">"Få flere oplysninger"</annotation></string>
<string name="wifitrackerlib_speed_label_very_slow" msgid="6606409259798814244">"Meget langsom"</string>
<string name="wifitrackerlib_speed_label_slow" msgid="7327906382011957760">"Langsom"</string>
<string name="wifitrackerlib_speed_label_okay" msgid="6656684124654881956">"OK"</string>
diff --git a/libs/WifiTrackerLib/res/values-fr/strings.xml b/libs/WifiTrackerLib/res/values-fr/strings.xml
index 4d89d6134..eab74316b 100644
--- a/libs/WifiTrackerLib/res/values-fr/strings.xml
+++ b/libs/WifiTrackerLib/res/values-fr/strings.xml
@@ -34,7 +34,7 @@
<string name="wifitrackerlib_wifi_disconnected" msgid="3320414360982942679">"Déconnecté"</string>
<string name="wifitrackerlib_wifi_remembered" msgid="2406091442008343041">"Enregistré"</string>
<string name="wifitrackerlib_wifi_metered_label" msgid="8818508951778620385">"Facturé à l\'usage"</string>
- <string name="wifitrackerlib_wifi_unmetered_label" msgid="1902150402929678469">"Non facturé à l\'usage"</string>
+ <string name="wifitrackerlib_wifi_unmetered_label" msgid="1902150402929678469">"Sans compteur"</string>
<string name="wifitrackerlib_connected_via_app" msgid="7823921840931347560">"Connecté via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_available_via_app" msgid="8556844256194837469">"Disponible via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifitrackerlib_connected_via_network_scorer" msgid="6306655070903763086">"Connecté automatiquement via <xliff:g id="NAME">%1$s</xliff:g>"</string>
diff --git a/libs/WifiTrackerLib/res/values-gu/strings.xml b/libs/WifiTrackerLib/res/values-gu/strings.xml
index 231b96ec9..47984acbc 100644
--- a/libs/WifiTrackerLib/res/values-gu/strings.xml
+++ b/libs/WifiTrackerLib/res/values-gu/strings.xml
@@ -26,7 +26,7 @@
<string name="wifitrackerlib_wifi_disabled_network_failure" msgid="3046956554224277166">"IP ગોઠવણીમાં નિષ્ફળતા"</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_poor_channel_conditions" msgid="26484680900376236">"હંગામી રૂપે નેટવર્કની નબળી પરિસ્થિતિ"</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>
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
index b0415411b..2b9bc78f7 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
@@ -35,6 +35,7 @@ import android.net.NetworkRequest;
import android.net.NetworkScoreManager;
import android.net.ScoredNetwork;
import android.net.TransportInfo;
+import android.net.vcn.VcnTransportInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkScoreCache;
@@ -225,9 +226,15 @@ public class BaseWifiTracker implements LifecycleObserver {
}
final boolean oldWifiDefault = mIsWifiDefaultRoute;
final boolean oldCellDefault = mIsCellDefaultRoute;
- // raw Wifi or VPN-over-Wifi is default => Wifi is default.
- mIsWifiDefaultRoute = networkCapabilities.hasTransport(TRANSPORT_WIFI);
- mIsCellDefaultRoute = networkCapabilities.hasTransport(TRANSPORT_CELLULAR);
+ TransportInfo transportInfo = networkCapabilities.getTransportInfo();
+ final boolean isVcnOverWifi = transportInfo != null
+ && transportInfo instanceof VcnTransportInfo
+ && ((VcnTransportInfo) transportInfo).getWifiInfo() != null;
+ // raw Wifi or VPN-over-Wifi or VCN-over-Wifi is default => Wifi is default.
+ mIsWifiDefaultRoute = networkCapabilities.hasTransport(TRANSPORT_WIFI)
+ || isVcnOverWifi;
+ mIsCellDefaultRoute = !mIsWifiDefaultRoute
+ && networkCapabilities.hasTransport(TRANSPORT_CELLULAR);
if (mIsWifiDefaultRoute != oldWifiDefault
|| mIsCellDefaultRoute != oldCellDefault) {
if (isVerboseLoggingEnabled()) {
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java
index 5dea44c9a..1930cf919 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/MergedCarrierEntry.java
@@ -102,12 +102,27 @@ public class MergedCarrierEntry extends WifiEntry {
return getConnectedState() == CONNECTED_STATE_DISCONNECTED && !mIsCellDefaultRoute;
}
+ /**
+ * Connect to this merged carrier network and show the "Wi-Fi won't autoconnect for now" toast.
+ * @param callback callback for the connect result
+ */
@Override
public synchronized void connect(@Nullable ConnectCallback callback) {
+ connect(callback, true);
+ }
+
+ /**
+ * Connect to this merged carrier network.
+ * @param callback callback for the connect result
+ * @param showToast show the "Wi-Fi won't autoconnect for now" toast if {@code true}
+ */
+ public synchronized void connect(@Nullable ConnectCallback callback, boolean showToast) {
mConnectCallback = callback;
mWifiManager.startRestrictingAutoJoinToSubscriptionId(mSubscriptionId);
- Toast.makeText(mContext,
- R.string.wifitrackerlib_wifi_wont_autoconnect_for_now, Toast.LENGTH_SHORT).show();
+ if (showToast) {
+ Toast.makeText(mContext, R.string.wifitrackerlib_wifi_wont_autoconnect_for_now,
+ Toast.LENGTH_SHORT).show();
+ }
if (mConnectCallback != null) {
mCallbackHandler.post(() -> {
final ConnectCallback connectCallback = mConnectCallback;
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
index 6ec5d8ba3..15edf8a18 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
@@ -476,6 +476,7 @@ public class WifiEntry implements Comparable<WifiEntry> {
public String gateway;
public String subnetMask;
public int wifiStandard = ScanResult.WIFI_STANDARD_UNKNOWN;
+ public NetworkCapabilities networkCapabilities;
/**
* Creates an empty ConnectedInfo
@@ -495,6 +496,7 @@ public class WifiEntry implements Comparable<WifiEntry> {
gateway = other.gateway;
subnetMask = other.subnetMask;
wifiStandard = other.wifiStandard;
+ networkCapabilities = other.networkCapabilities;
}
}
@@ -952,6 +954,7 @@ public class WifiEntry implements Comparable<WifiEntry> {
if (mConnectedInfo == null) {
return;
}
+ mConnectedInfo.networkCapabilities = mNetworkCapabilities;
mIsValidated = mNetworkCapabilities != null
&& mNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
notifyOnUpdated();
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
index d76a80a0a..e97aa28b6 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
@@ -500,25 +500,28 @@ public class WifiPickerTracker extends BaseWifiTracker {
private void updateSuggestedWifiEntryScans(@NonNull List<ScanResult> scanResults) {
checkNotNull(scanResults, "Scan Result list should not be null!");
+ // Get every ScanResultKey that is user shareable
+ final Set<StandardWifiEntryKey> userSharedEntryKeys =
+ mWifiManager.getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(scanResults)
+ .stream()
+ .map(StandardWifiEntryKey::new)
+ .collect(Collectors.toSet());
+
// Group scans by ScanResultKey key
final Map<ScanResultKey, List<ScanResult>> scanResultsByKey = scanResults.stream()
.filter(scan -> !TextUtils.isEmpty(scan.SSID))
.collect(Collectors.groupingBy(ScanResultKey::new));
- // Iterate through current entries and update each entry's scan results
+ // Iterate through current entries and update each entry's scan results and shareability.
final Set<StandardWifiEntryKey> seenEntryKeys = new ArraySet<>();
mSuggestedWifiEntryCache.forEach(entry -> {
final StandardWifiEntryKey entryKey = entry.getStandardWifiEntryKey();
seenEntryKeys.add(entryKey);
// Update scan results if available, or set to null.
entry.updateScanResultInfo(scanResultsByKey.get(entryKey.getScanResultKey()));
+ entry.setUserShareable(userSharedEntryKeys.contains(entryKey));
});
// Create new StandardWifiEntry objects for each leftover config with scan results.
- final Set<StandardWifiEntryKey> userSharedEntryKeys =
- mWifiManager.getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(scanResults)
- .stream()
- .map(StandardWifiEntryKey::new)
- .collect(Collectors.toSet());
for (StandardWifiEntryKey entryKey : mSuggestedConfigCache.keySet()) {
final ScanResultKey scanKey = entryKey.getScanResultKey();
if (seenEntryKeys.contains(entryKey)
@@ -821,6 +824,7 @@ public class WifiPickerTracker extends BaseWifiTracker {
mNetworkRequestEntry = new NetworkRequestEntry(mContext, mMainHandler, entryKey,
mWifiManager, mWifiNetworkScoreCache, false /* forSavedNetworksPage */);
mNetworkRequestEntry.updateConfig(matchingConfigs);
+ updateNetworkRequestEntryScans(mScanResultUpdater.getScanResults());
}
mNetworkRequestEntry.updateConnectionInfo(wifiInfo, networkInfo);
}
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
index 858075e1c..dd487e9f6 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
@@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -38,6 +39,7 @@ import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkScoreManager;
+import android.net.vcn.VcnTransportInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
@@ -850,6 +852,50 @@ public class WifiPickerTrackerTest {
.count()).isEqualTo(1);
}
+ /**
+ * Tests that a suggestion entry created before scan results are available will be updated to
+ * user shareable after scans become available.
+ */
+ @Test
+ public void testGetWifiEntries_preConnectedSuggestion_becomesUserShareable() {
+ WifiConfiguration suggestionConfig = new WifiConfiguration();
+ suggestionConfig.SSID = "\"ssid\"";
+ suggestionConfig.networkId = 1;
+ suggestionConfig.creatorName = "creator";
+ suggestionConfig.carrierId = 1;
+ suggestionConfig.subscriptionId = 1;
+ suggestionConfig.fromWifiNetworkSuggestion = true;
+ // Initial entries
+ when(mMockWifiManager.getPrivilegedConfiguredNetworks()).thenReturn(
+ Arrays.asList(suggestionConfig));
+ when(mMockWifiInfo.getNetworkId()).thenReturn(suggestionConfig.networkId);
+ when(mMockWifiInfo.getRssi()).thenReturn(-50);
+ when(mMockNetworkInfo.getDetailedState()).thenReturn(NetworkInfo.DetailedState.CONNECTED);
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.onStart();
+ verify(mMockContext).registerReceiver(mBroadcastReceiverCaptor.capture(),
+ any(), any(), any());
+ mTestLooper.dispatchAll();
+ WifiEntry suggestionEntry = wifiPickerTracker.getConnectedWifiEntry();
+ assertThat(suggestionEntry).isNotNull();
+
+ // Update with user-shareable scan results for the suggestion
+ when(mMockWifiManager.getScanResults()).thenReturn(Collections.singletonList(
+ buildScanResult("ssid", "bssid", START_MILLIS)));
+ when(mMockWifiManager.getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(any()))
+ .thenReturn(Arrays.asList(suggestionConfig));
+ mBroadcastReceiverCaptor.getValue().onReceive(mMockContext,
+ new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
+ // Disconnect from network to verify its usershareability in the picker list
+ mBroadcastReceiverCaptor.getValue().onReceive(mMockContext,
+ new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION));
+ mTestLooper.dispatchAll();
+
+ // Suggestion entry should be in picker list now
+ suggestionEntry = wifiPickerTracker.getWifiEntries().get(0);
+ assertThat(suggestionEntry.isSuggestion()).isTrue();
+ }
+
@Test
public void testGetConnectedEntry_alreadyConnectedToPasspoint_returnsPasspointEntry() {
final String fqdn = "fqdn";
@@ -1244,4 +1290,40 @@ public class WifiPickerTrackerTest {
// Now Wifi is default, so isDefaultNetwork returns true
assertThat(mergedCarrierEntry.isDefaultNetwork()).isTrue();
}
+
+ /**
+ * Tests that the MergedCarrierEntry is the default network when it is connected and
+ * VCN-over-Wifi is the default network.
+ */
+ @Test
+ public void testGetMergedCarrierEntry_vcnWifiIsDefault_entryIsDefaultNetwork() {
+ final int subId = 1;
+ when(mMockWifiInfo.isCarrierMerged()).thenReturn(true);
+ when(mMockWifiInfo.getSubscriptionId()).thenReturn(subId);
+ when(mMockNetworkInfo.getDetailedState()).thenReturn(NetworkInfo.DetailedState.CONNECTED);
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ wifiPickerTracker.onStart();
+ mTestLooper.dispatchAll();
+ verify(mMockContext).registerReceiver(mBroadcastReceiverCaptor.capture(),
+ any(), any(), any());
+ final Intent intent = new Intent(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
+ intent.putExtra("subscription", subId);
+ mBroadcastReceiverCaptor.getValue().onReceive(mMockContext, intent);
+ verify(mMockConnectivityManager)
+ .registerDefaultNetworkCallback(mDefaultNetworkCallbackCaptor.capture(), any());
+ MergedCarrierEntry mergedCarrierEntry = wifiPickerTracker.getMergedCarrierEntry();
+ assertThat(mergedCarrierEntry.getConnectedState())
+ .isEqualTo(WifiEntry.CONNECTED_STATE_CONNECTED);
+ // Wifi isn't default yet, so isDefaultNetwork returns false
+ assertThat(mergedCarrierEntry.isDefaultNetwork()).isFalse();
+
+ mDefaultNetworkCallbackCaptor.getValue().onCapabilitiesChanged(mMockNetwork,
+ new NetworkCapabilities.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+ .setTransportInfo(new VcnTransportInfo(new WifiInfo.Builder().build()))
+ .build());
+
+ // Now VCN-over-Wifi is default, so isDefaultNetwork returns true
+ assertThat(mergedCarrierEntry.isDefaultNetwork()).isTrue();
+ }
}