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:
@@ -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)) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user