diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-11-10 20:00:10 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-11-10 20:00:10 +0000 |
commit | 0419652b4f4ff1631a3392e61023e549e922154a (patch) | |
tree | 30ab859ec5483b2d52141915829bd670525e273f | |
parent | a82e5481806b32d25d924b61b25ba90b8a967390 (diff) | |
parent | 990a2142b8ba9bf57e2c6b9cdc16961d645fdd64 (diff) | |
download | wifi-android-platform-12.0.0_r30.tar.gz |
Snap for 7901677 from 990a2142b8ba9bf57e2c6b9cdc16961d645fdd64 to sc-platform-releaseandroid-platform-12.0.0_r9android-platform-12.0.0_r8android-platform-12.0.0_r7android-platform-12.0.0_r6android-platform-12.0.0_r5android-platform-12.0.0_r4android-platform-12.0.0_r31android-platform-12.0.0_r30android-platform-12.0.0_r3android-platform-12.0.0_r29android-platform-12.0.0_r28android-platform-12.0.0_r27android-platform-12.0.0_r26android-platform-12.0.0_r25android-platform-12.0.0_r24android-platform-12.0.0_r23android-platform-12.0.0_r22android-platform-12.0.0_r21android-platform-12.0.0_r20android-platform-12.0.0_r2android-platform-12.0.0_r19android-platform-12.0.0_r18android-platform-12.0.0_r17android-platform-12.0.0_r16android-platform-12.0.0_r15android-platform-12.0.0_r14android-platform-12.0.0_r13android-platform-12.0.0_r12android-platform-12.0.0_r11android-platform-12.0.0_r10android12-platform-release
Change-Id: I5378ea3453b681ebd7f18dcddce84d7782af3b25
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(); + } } |