Merge "Only remove the relevant network" into sc-dev

This commit is contained in:
Ying Xu
2021-02-02 04:22:57 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 3 deletions

View File

@@ -19,6 +19,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback; import android.net.ConnectivityManager.NetworkCallback;
import android.net.LinkProperties;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkInfo; import android.net.NetworkInfo;
@@ -38,7 +39,9 @@ import android.util.FeatureFlagUtils;
import com.android.settingslib.R; import com.android.settingslib.R;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* Track status of Wi-Fi for the Sys UI. * Track status of Wi-Fi for the Sys UI.
@@ -50,6 +53,7 @@ public class WifiStatusTracker {
private final NetworkScoreManager mNetworkScoreManager; private final NetworkScoreManager mNetworkScoreManager;
private final ConnectivityManager mConnectivityManager; private final ConnectivityManager mConnectivityManager;
private final Handler mHandler = new Handler(Looper.getMainLooper()); private final Handler mHandler = new Handler(Looper.getMainLooper());
private final Set<Integer> mNetworks = new HashSet<>();
private final WifiNetworkScoreCache.CacheListener mCacheListener = private final WifiNetworkScoreCache.CacheListener mCacheListener =
new WifiNetworkScoreCache.CacheListener(mHandler) { new WifiNetworkScoreCache.CacheListener(mHandler) {
@Override @Override
@@ -64,6 +68,20 @@ public class WifiStatusTracker {
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build(); .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build();
private final NetworkCallback mNetworkCallback = new NetworkCallback() { private final NetworkCallback mNetworkCallback = new NetworkCallback() {
@Override
public void onAvailable(
Network network, NetworkCapabilities networkCapabilities,
LinkProperties linkProperties, boolean blocked) {
boolean isVcnOverWifi =
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
&& (Utils.tryGetWifiInfoForVcn(networkCapabilities) != null);
boolean isWifi =
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
if (isVcnOverWifi || isWifi) {
mNetworks.add(network.getNetId());
}
}
// Note: onCapabilitiesChanged is guaranteed to be called "immediately" after onAvailable // Note: onCapabilitiesChanged is guaranteed to be called "immediately" after onAvailable
// and onLinkPropertiesChanged. // and onLinkPropertiesChanged.
@Override @Override
@@ -84,10 +102,13 @@ public class WifiStatusTracker {
@Override @Override
public void onLost(Network network) { public void onLost(Network network) {
if (mNetworks.contains(network.getNetId())) {
mNetworks.remove(network.getNetId());
updateWifiInfo(null); updateWifiInfo(null);
updateStatusLabel(); updateStatusLabel();
mCallback.run(); mCallback.run();
} }
}
}; };
private final NetworkCallback mDefaultNetworkCallback = new NetworkCallback() { private final NetworkCallback mDefaultNetworkCallback = new NetworkCallback() {
@Override @Override

View File

@@ -37,6 +37,7 @@ import static org.mockito.Mockito.when;
import android.app.Instrumentation; import android.app.Instrumentation;
import android.content.Intent; import android.content.Intent;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.LinkProperties;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkRequest; import android.net.NetworkRequest;
@@ -343,6 +344,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
setConnectivityCommon(networkType, validated, isConnected); setConnectivityCommon(networkType, validated, isConnected);
if (networkType == NetworkCapabilities.TRANSPORT_WIFI) { if (networkType == NetworkCapabilities.TRANSPORT_WIFI) {
if (isConnected) { if (isConnected) {
mNetworkCallback.onAvailable(mock(Network.class),
new NetworkCapabilities(mNetCapabilities), new LinkProperties(), false);
mNetworkCallback.onCapabilitiesChanged( mNetworkCallback.onCapabilitiesChanged(
mock(Network.class), new NetworkCapabilities(mNetCapabilities)); mock(Network.class), new NetworkCapabilities(mNetCapabilities));
} else { } else {
@@ -357,6 +360,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
setConnectivityCommon(networkType, validated, isConnected); setConnectivityCommon(networkType, validated, isConnected);
if (networkType == NetworkCapabilities.TRANSPORT_CELLULAR) { if (networkType == NetworkCapabilities.TRANSPORT_CELLULAR) {
if (isConnected) { if (isConnected) {
mNetworkCallback.onAvailable(mock(Network.class),
new NetworkCapabilities(mNetCapabilities), new LinkProperties(), false);
mNetworkCallback.onCapabilitiesChanged( mNetworkCallback.onCapabilitiesChanged(
mock(Network.class), new NetworkCapabilities(mNetCapabilities)); mock(Network.class), new NetworkCapabilities(mNetCapabilities));
} else { } else {