Merge "[WIFI][SYSUI] Display Wi-Fi icon in status bar if it is the default network" into rvc-dev am: 79754e7519

Change-Id: I59ad1d6e781431456a356fa7ff20402a20a0ce98
This commit is contained in:
Etan Cohen
2020-03-26 22:24:31 +00:00
committed by Automerger Merge Worker
2 changed files with 52 additions and 11 deletions

View File

@@ -17,6 +17,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import android.content.Context; 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.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkInfo; import android.net.NetworkInfo;
@@ -36,7 +37,10 @@ import com.android.settingslib.R;
import java.util.List; import java.util.List;
public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { /**
* Track status of Wi-Fi for the Sys UI.
*/
public class WifiStatusTracker {
private final Context mContext; private final Context mContext;
private final WifiNetworkScoreCache mWifiNetworkScoreCache; private final WifiNetworkScoreCache mWifiNetworkScoreCache;
private final WifiManager mWifiManager; private final WifiManager mWifiManager;
@@ -55,8 +59,9 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback {
.clearCapabilities() .clearCapabilities()
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(); .addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build();
private final ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager private final NetworkCallback mNetworkCallback = new NetworkCallback() {
.NetworkCallback() { // Note: onCapabilitiesChanged is guaranteed to be called "immediately" after onAvailable
// and onLinkPropertiesChanged.
@Override @Override
public void onCapabilitiesChanged( public void onCapabilitiesChanged(
Network network, NetworkCapabilities networkCapabilities) { Network network, NetworkCapabilities networkCapabilities) {
@@ -64,11 +69,35 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback {
mCallback.run(); mCallback.run();
} }
}; };
private final NetworkCallback mDefaultNetworkCallback = new NetworkCallback() {
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) {
// network is now the default network, and its capabilities are nc.
// 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
// the default.
mDefaultNetwork = network;
mDefaultNetworkCapabilities = nc;
updateStatusLabel();
mCallback.run();
}
@Override
public void onLost(Network network) {
// The system no longer has a default network.
mDefaultNetwork = null;
mDefaultNetworkCapabilities = null;
updateStatusLabel();
mCallback.run();
}
};
private Network mDefaultNetwork = null;
private NetworkCapabilities mDefaultNetworkCapabilities = null;
private final Runnable mCallback; private final Runnable mCallback;
private WifiInfo mWifiInfo; private WifiInfo mWifiInfo;
public boolean enabled; public boolean enabled;
public boolean isCaptivePortal; public boolean isCaptivePortal;
public boolean isDefaultNetwork;
public int state; public int state;
public boolean connected; public boolean connected;
public String ssid; public String ssid;
@@ -94,11 +123,13 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback {
mWifiNetworkScoreCache.registerListener(mCacheListener); mWifiNetworkScoreCache.registerListener(mCacheListener);
mConnectivityManager.registerNetworkCallback( mConnectivityManager.registerNetworkCallback(
mNetworkRequest, mNetworkCallback, mHandler); mNetworkRequest, mNetworkCallback, mHandler);
mConnectivityManager.registerDefaultNetworkCallback(mDefaultNetworkCallback, mHandler);
} else { } else {
mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI,
mWifiNetworkScoreCache); mWifiNetworkScoreCache);
mWifiNetworkScoreCache.unregisterListener(); mWifiNetworkScoreCache.unregisterListener();
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
mConnectivityManager.unregisterNetworkCallback(mDefaultNetworkCallback);
} }
} }
@@ -154,8 +185,17 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback {
} }
private void updateStatusLabel() { private void updateStatusLabel() {
final NetworkCapabilities networkCapabilities NetworkCapabilities networkCapabilities;
= mConnectivityManager.getNetworkCapabilities(mWifiManager.getCurrentNetwork()); final Network currentWifiNetwork = mWifiManager.getCurrentNetwork();
if (currentWifiNetwork != null && currentWifiNetwork.equals(mDefaultNetwork)) {
// Wifi is connected and the default network.
isDefaultNetwork = true;
networkCapabilities = mDefaultNetworkCapabilities;
} else {
isDefaultNetwork = false;
networkCapabilities = mConnectivityManager.getNetworkCapabilities(
mWifiManager.getCurrentNetwork());
}
isCaptivePortal = false; isCaptivePortal = false;
if (networkCapabilities != null) { if (networkCapabilities != null) {
if (networkCapabilities.hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL)) { if (networkCapabilities.hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL)) {

View File

@@ -37,10 +37,10 @@ import java.util.Objects;
public class WifiSignalController extends public class WifiSignalController extends
SignalController<WifiSignalController.WifiState, SignalController.IconGroup> { SignalController<WifiSignalController.WifiState, SignalController.IconGroup> {
private final boolean mHasMobileData; private final boolean mHasMobileDataFeature;
private final WifiStatusTracker mWifiTracker; private final WifiStatusTracker mWifiTracker;
public WifiSignalController(Context context, boolean hasMobileData, public WifiSignalController(Context context, boolean hasMobileDataFeature,
CallbackHandler callbackHandler, NetworkControllerImpl networkController, CallbackHandler callbackHandler, NetworkControllerImpl networkController,
WifiManager wifiManager) { WifiManager wifiManager) {
super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI, super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI,
@@ -52,7 +52,7 @@ public class WifiSignalController extends
mWifiTracker = new WifiStatusTracker(mContext, wifiManager, networkScoreManager, mWifiTracker = new WifiStatusTracker(mContext, wifiManager, networkScoreManager,
connectivityManager, this::handleStatusUpdated); connectivityManager, this::handleStatusUpdated);
mWifiTracker.setListening(true); mWifiTracker.setListening(true);
mHasMobileData = hasMobileData; mHasMobileDataFeature = hasMobileDataFeature;
if (wifiManager != null) { if (wifiManager != null) {
wifiManager.registerTrafficStateCallback(context.getMainExecutor(), wifiManager.registerTrafficStateCallback(context.getMainExecutor(),
new WifiTrafficStateCallback()); new WifiTrafficStateCallback());
@@ -85,9 +85,10 @@ public class WifiSignalController extends
// only show wifi in the cluster if connected or if wifi-only // only show wifi in the cluster if connected or if wifi-only
boolean visibleWhenEnabled = mContext.getResources().getBoolean( boolean visibleWhenEnabled = mContext.getResources().getBoolean(
R.bool.config_showWifiIndicatorWhenEnabled); R.bool.config_showWifiIndicatorWhenEnabled);
boolean wifiVisible = mCurrentState.enabled boolean wifiVisible = mCurrentState.enabled && (
&& ((mCurrentState.connected && mCurrentState.inetCondition == 1) (mCurrentState.connected && mCurrentState.inetCondition == 1)
|| !mHasMobileData || visibleWhenEnabled); || !mHasMobileDataFeature || mWifiTracker.isDefaultNetwork
|| visibleWhenEnabled);
String wifiDesc = mCurrentState.connected ? mCurrentState.ssid : null; String wifiDesc = mCurrentState.connected ? mCurrentState.ssid : null;
boolean ssidPresent = wifiVisible && mCurrentState.ssid != null; boolean ssidPresent = wifiVisible && mCurrentState.ssid != null;
String contentDescription = getTextIfExists(getContentDescription()).toString(); String contentDescription = getTextIfExists(getContentDescription()).toString();