Merge "Fetch the WiFiInfo from NetworkCapabilities"

This commit is contained in:
Treehugger Robot
2021-04-02 15:01:41 +00:00
committed by Gerrit Code Review
5 changed files with 93 additions and 83 deletions

View File

@@ -66,31 +66,40 @@ public class WifiStatusTracker {
@Override @Override
public void onCapabilitiesChanged( public void onCapabilitiesChanged(
Network network, NetworkCapabilities networkCapabilities) { Network network, NetworkCapabilities networkCapabilities) {
WifiInfo wifiInfo = (WifiInfo) networkCapabilities.getTransportInfo();
updateWifiInfo(wifiInfo);
updateStatusLabel();
mCallback.run();
}
@Override
public void onLost(Network network) {
updateWifiInfo(null);
updateStatusLabel(); updateStatusLabel();
mCallback.run(); mCallback.run();
} }
}; };
private final NetworkCallback mDefaultNetworkCallback = new NetworkCallback() { private final NetworkCallback mDefaultNetworkCallback = new NetworkCallback() {
@Override @Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) { public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) {
// network is now the default network, and its capabilities are nc. // network is now the default network, and its capabilities are nc.
// This method will always be called immediately after the network becomes the // This method will always be called immediately after the network becomes the
// default, in addition to any time the capabilities change while the network is // default, in addition to any time the capabilities change while the network is
// the default. // the default.
mDefaultNetwork = network; mDefaultNetwork = network;
mDefaultNetworkCapabilities = nc; mDefaultNetworkCapabilities = nc;
updateStatusLabel(); updateStatusLabel();
mCallback.run(); mCallback.run();
} }
@Override @Override
public void onLost(Network network) { public void onLost(Network network) {
// The system no longer has a default network. // The system no longer has a default network.
mDefaultNetwork = null; mDefaultNetwork = null;
mDefaultNetworkCapabilities = null; mDefaultNetworkCapabilities = null;
updateStatusLabel(); updateStatusLabel();
mCallback.run(); mCallback.run();
} }
}; };
private Network mDefaultNetwork = null; private Network mDefaultNetwork = null;
private NetworkCapabilities mDefaultNetworkCapabilities = null; private NetworkCapabilities mDefaultNetworkCapabilities = null;
private final Runnable mCallback; private final Runnable mCallback;
@@ -170,32 +179,22 @@ public class WifiStatusTracker {
String action = intent.getAction(); String action = intent.getAction();
if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
updateWifiState(); updateWifiState();
} else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { }
updateWifiState(); }
final NetworkInfo networkInfo =
intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); private void updateWifiInfo(WifiInfo wifiInfo) {
connected = networkInfo != null && networkInfo.isConnected(); updateWifiState();
mWifiInfo = null; connected = wifiInfo != null;
ssid = null; mWifiInfo = wifiInfo;
if (connected) { ssid = null;
mWifiInfo = mWifiManager.getConnectionInfo(); if (mWifiInfo != null) {
if (mWifiInfo != null) { if (mWifiInfo.isPasspointAp() || mWifiInfo.isOsuAp()) {
if (mWifiInfo.isPasspointAp() || mWifiInfo.isOsuAp()) { ssid = mWifiInfo.getPasspointProviderFriendlyName();
ssid = mWifiInfo.getPasspointProviderFriendlyName(); } else {
} else { ssid = getValidSsid(mWifiInfo);
ssid = getValidSsid(mWifiInfo);
}
updateRssi(mWifiInfo.getRssi());
maybeRequestNetworkScore();
}
} }
updateStatusLabel(); updateRssi(mWifiInfo.getRssi());
mCallback.run(); maybeRequestNetworkScore();
} else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
// Default to -200 as its below WifiManager.MIN_RSSI.
updateRssi(intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200));
updateStatusLabel();
mCallback.run();
} }
} }

View File

@@ -344,8 +344,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
// broadcasts // broadcasts
IntentFilter filter = new IntentFilter(); IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(Intent.ACTION_SIM_STATE_CHANGED); filter.addAction(Intent.ACTION_SIM_STATE_CHANGED);
filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); filter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);

View File

@@ -101,11 +101,7 @@ public class WifiSignalController extends
wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel); wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel);
} }
/** private void copyWifiStates() {
* Fetches wifi initial state replacing the initial sticky broadcast.
*/
public void fetchInitialState() {
mWifiTracker.fetchInitialState();
mCurrentState.enabled = mWifiTracker.enabled; mCurrentState.enabled = mWifiTracker.enabled;
mCurrentState.isDefault = mWifiTracker.isDefaultNetwork; mCurrentState.isDefault = mWifiTracker.isDefaultNetwork;
mCurrentState.connected = mWifiTracker.connected; mCurrentState.connected = mWifiTracker.connected;
@@ -113,6 +109,14 @@ public class WifiSignalController extends
mCurrentState.rssi = mWifiTracker.rssi; mCurrentState.rssi = mWifiTracker.rssi;
mCurrentState.level = mWifiTracker.level; mCurrentState.level = mWifiTracker.level;
mCurrentState.statusLabel = mWifiTracker.statusLabel; mCurrentState.statusLabel = mWifiTracker.statusLabel;
}
/**
* Fetches wifi initial state replacing the initial sticky broadcast.
*/
public void fetchInitialState() {
mWifiTracker.fetchInitialState();
copyWifiStates();
notifyListenersIfNecessary(); notifyListenersIfNecessary();
} }
@@ -121,19 +125,12 @@ public class WifiSignalController extends
*/ */
public void handleBroadcast(Intent intent) { public void handleBroadcast(Intent intent) {
mWifiTracker.handleBroadcast(intent); mWifiTracker.handleBroadcast(intent);
mCurrentState.enabled = mWifiTracker.enabled; copyWifiStates();
mCurrentState.isDefault = mWifiTracker.isDefaultNetwork;
mCurrentState.connected = mWifiTracker.connected;
mCurrentState.ssid = mWifiTracker.ssid;
mCurrentState.rssi = mWifiTracker.rssi;
mCurrentState.level = mWifiTracker.level;
mCurrentState.statusLabel = mWifiTracker.statusLabel;
notifyListenersIfNecessary(); notifyListenersIfNecessary();
} }
private void handleStatusUpdated() { private void handleStatusUpdated() {
mCurrentState.statusLabel = mWifiTracker.statusLabel; copyWifiStates();
mCurrentState.isDefault = mWifiTracker.isDefaultNetwork;
notifyListenersIfNecessary(); notifyListenersIfNecessary();
} }

View File

@@ -40,7 +40,9 @@ import android.content.Intent;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.net.NetworkScoreManager; import android.net.NetworkScoreManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Handler; import android.os.Handler;
import android.provider.Settings; import android.provider.Settings;
@@ -51,7 +53,6 @@ import android.telephony.ServiceState;
import android.telephony.SignalStrength; import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyDisplayInfo; import android.telephony.TelephonyDisplayInfo;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.testing.TestableLooper; import android.testing.TestableLooper;
@@ -115,6 +116,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
protected int mSubId; protected int mSubId;
private NetworkCapabilities mNetCapabilities; private NetworkCapabilities mNetCapabilities;
private ConnectivityManager.NetworkCallback mDefaultNetworkCallback;
private ConnectivityManager.NetworkCallback mNetworkCallback; private ConnectivityManager.NetworkCallback mNetworkCallback;
@Rule @Rule
@@ -214,6 +216,10 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class); ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
verify(mMockCm, atLeastOnce()) verify(mMockCm, atLeastOnce())
.registerDefaultNetworkCallback(callbackArg.capture(), isA(Handler.class)); .registerDefaultNetworkCallback(callbackArg.capture(), isA(Handler.class));
mDefaultNetworkCallback = callbackArg.getValue();
assertNotNull(mDefaultNetworkCallback);
verify(mMockCm, atLeastOnce()).registerNetworkCallback(
isA(NetworkRequest.class), callbackArg.capture(), isA(Handler.class));
mNetworkCallback = callbackArg.getValue(); mNetworkCallback = callbackArg.getValue();
assertNotNull(mNetworkCallback); assertNotNull(mNetworkCallback);
} }
@@ -270,10 +276,19 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
} }
public void setConnectivityViaCallback( public void setConnectivityViaCallback(
int networkType, boolean validated, boolean isConnected){ int networkType, boolean validated, boolean isConnected, WifiInfo wifiInfo) {
mNetCapabilities.setTransportInfo(wifiInfo);
setConnectivityCommon(networkType, validated, isConnected); setConnectivityCommon(networkType, validated, isConnected);
mNetworkCallback.onCapabilitiesChanged( mDefaultNetworkCallback.onCapabilitiesChanged(
mock(Network.class), new NetworkCapabilities(mNetCapabilities)); mock(Network.class), new NetworkCapabilities(mNetCapabilities));
if (networkType == NetworkCapabilities.TRANSPORT_WIFI) {
if (isConnected) {
mNetworkCallback.onCapabilitiesChanged(
mock(Network.class), new NetworkCapabilities(mNetCapabilities));
} else {
mNetworkCallback.onLost(mock(Network.class));
}
}
} }
private void setConnectivityCommon( private void setConnectivityCommon(

View File

@@ -32,6 +32,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
// These match the constants in WifiManager and need to be kept up to date. // These match the constants in WifiManager and need to be kept up to date.
private static final int MIN_RSSI = -100; private static final int MIN_RSSI = -100;
private static final int MAX_RSSI = -55; private static final int MAX_RSSI = -55;
private WifiInfo mWifiInfo = mock(WifiInfo.class);
@Test @Test
public void testWifiIcon() { public void testWifiIcon() {
@@ -41,15 +42,16 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
setWifiState(true, testSsid); setWifiState(true, testSsid);
setWifiLevel(0); setWifiLevel(0);
setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, true, mWifiInfo);
// Connected, but still not validated - does not show // Connected, but still not validated - does not show
verifyLastWifiIcon(false, WifiIcons.WIFI_SIGNAL_STRENGTH[0][0]); verifyLastWifiIcon(false, WifiIcons.WIFI_SIGNAL_STRENGTH[0][0]);
for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) { for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) {
setWifiLevel(testLevel); setWifiLevel(testLevel);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true, mWifiInfo);
verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, false, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, true, mWifiInfo);
// Icon does not show if not validated // Icon does not show if not validated
verifyLastWifiIcon(false, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]); verifyLastWifiIcon(false, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]);
} }
@@ -69,10 +71,10 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) { for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) {
setWifiLevel(testLevel); setWifiLevel(testLevel);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true, mWifiInfo);
verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel],
testSsid); testSsid);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, false, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, true, mWifiInfo);
verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[0][testLevel], verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[0][testLevel],
testSsid); testSsid);
} }
@@ -86,7 +88,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
setWifiEnabled(true); setWifiEnabled(true);
setWifiState(true, testSsid); setWifiState(true, testSsid);
setWifiLevel(testLevel); setWifiLevel(testLevel);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true, mWifiInfo);
verifyLastQsWifiIcon(true, true, verifyLastQsWifiIcon(true, true,
WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], testSsid); WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], testSsid);
@@ -111,14 +113,14 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
setWifiEnabled(true); setWifiEnabled(true);
setWifiState(true, testSsid); setWifiState(true, testSsid);
setWifiLevel(testLevel); setWifiLevel(testLevel);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true, mWifiInfo);
verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]);
setupDefaultSignal(); setupDefaultSignal();
setGsmRoaming(true); setGsmRoaming(true);
// Still be on wifi though. // Still be on wifi though.
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true, mWifiInfo);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_CELLULAR, false, false, mWifiInfo);
verifyLastMobileDataIndicators(true, verifyLastMobileDataIndicators(true,
DEFAULT_LEVEL, DEFAULT_LEVEL,
0, true); 0, true);
@@ -132,10 +134,10 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
setWifiEnabled(true); setWifiEnabled(true);
setWifiState(true, testSsid); setWifiState(true, testSsid);
setWifiLevel(testLevel); setWifiLevel(testLevel);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true, mWifiInfo);
verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]);
setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, true, mWifiInfo);
verifyLastWifiIcon(false, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]); verifyLastWifiIcon(false, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]);
} }
@@ -147,11 +149,11 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
setWifiEnabled(true); setWifiEnabled(true);
setWifiState(true, testSsid); setWifiState(true, testSsid);
setWifiLevel(testLevel); setWifiLevel(testLevel);
setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_WIFI, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true, mWifiInfo);
verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]);
setWifiState(false, testSsid); setWifiState(false, testSsid);
setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, false); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, false, false, mWifiInfo);
verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK);
} }
@@ -162,14 +164,14 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
setWifiEnabled(true); setWifiEnabled(true);
verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK);
setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_VPN, false, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_VPN, false, true, mWifiInfo);
setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_VPN, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_VPN, true, true, mWifiInfo);
verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK);
// Mock calling setUnderlyingNetworks. // Mock calling setUnderlyingNetworks.
setWifiState(true, testSsid); setWifiState(true, testSsid);
setWifiLevel(testLevel); setWifiLevel(testLevel);
setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true); setConnectivityViaCallback(NetworkCapabilities.TRANSPORT_WIFI, true, true, mWifiInfo);
verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]);
} }
@@ -209,6 +211,7 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
int rssi = (int)(MIN_RSSI + level * amountPerLevel); int rssi = (int)(MIN_RSSI + level * amountPerLevel);
// Put RSSI in the middle of the range. // Put RSSI in the middle of the range.
rssi += amountPerLevel / 2; rssi += amountPerLevel / 2;
when(mWifiInfo.getRssi()).thenReturn(rssi);
Intent i = new Intent(WifiManager.RSSI_CHANGED_ACTION); Intent i = new Intent(WifiManager.RSSI_CHANGED_ACTION);
i.putExtra(WifiManager.EXTRA_NEW_RSSI, rssi); i.putExtra(WifiManager.EXTRA_NEW_RSSI, rssi);
mNetworkController.onReceive(mContext, i); mNetworkController.onReceive(mContext, i);
@@ -224,10 +227,8 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
Intent i = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); Intent i = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
NetworkInfo networkInfo = mock(NetworkInfo.class); NetworkInfo networkInfo = mock(NetworkInfo.class);
when(networkInfo.isConnected()).thenReturn(connected); when(networkInfo.isConnected()).thenReturn(connected);
when(mWifiInfo.getSSID()).thenReturn(ssid);
WifiInfo wifiInfo = mock(WifiInfo.class); when(mMockWm.getConnectionInfo()).thenReturn(mWifiInfo);
when(wifiInfo.getSSID()).thenReturn(ssid);
when(mMockWm.getConnectionInfo()).thenReturn(wifiInfo);
i.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); i.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo);
mNetworkController.onReceive(mContext, i); mNetworkController.onReceive(mContext, i);