Loading packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java +45 −5 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; Loading @@ -36,7 +37,10 @@ import com.android.settingslib.R; 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 WifiNetworkScoreCache mWifiNetworkScoreCache; private final WifiManager mWifiManager; Loading @@ -55,8 +59,9 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { .clearCapabilities() .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(); private final ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager .NetworkCallback() { private final NetworkCallback mNetworkCallback = new NetworkCallback() { // Note: onCapabilitiesChanged is guaranteed to be called "immediately" after onAvailable // and onLinkPropertiesChanged. @Override public void onCapabilitiesChanged( Network network, NetworkCapabilities networkCapabilities) { Loading @@ -64,11 +69,35 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { 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 WifiInfo mWifiInfo; public boolean enabled; public boolean isCaptivePortal; public boolean isDefaultNetwork; public int state; public boolean connected; public String ssid; Loading @@ -94,11 +123,13 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { mWifiNetworkScoreCache.registerListener(mCacheListener); mConnectivityManager.registerNetworkCallback( mNetworkRequest, mNetworkCallback, mHandler); mConnectivityManager.registerDefaultNetworkCallback(mDefaultNetworkCallback, mHandler); } else { mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, mWifiNetworkScoreCache); mWifiNetworkScoreCache.unregisterListener(); mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); mConnectivityManager.unregisterNetworkCallback(mDefaultNetworkCallback); } } Loading Loading @@ -154,8 +185,17 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { } private void updateStatusLabel() { final NetworkCapabilities networkCapabilities = mConnectivityManager.getNetworkCapabilities(mWifiManager.getCurrentNetwork()); NetworkCapabilities networkCapabilities; 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; if (networkCapabilities != null) { if (networkCapabilities.hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL)) { Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java +7 −6 Original line number Diff line number Diff line Loading @@ -37,10 +37,10 @@ import java.util.Objects; public class WifiSignalController extends SignalController<WifiSignalController.WifiState, SignalController.IconGroup> { private final boolean mHasMobileData; private final boolean mHasMobileDataFeature; private final WifiStatusTracker mWifiTracker; public WifiSignalController(Context context, boolean hasMobileData, public WifiSignalController(Context context, boolean hasMobileDataFeature, CallbackHandler callbackHandler, NetworkControllerImpl networkController, WifiManager wifiManager) { super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI, Loading @@ -52,7 +52,7 @@ public class WifiSignalController extends mWifiTracker = new WifiStatusTracker(mContext, wifiManager, networkScoreManager, connectivityManager, this::handleStatusUpdated); mWifiTracker.setListening(true); mHasMobileData = hasMobileData; mHasMobileDataFeature = hasMobileDataFeature; if (wifiManager != null) { wifiManager.registerTrafficStateCallback(context.getMainExecutor(), new WifiTrafficStateCallback()); Loading Loading @@ -85,9 +85,10 @@ public class WifiSignalController extends // only show wifi in the cluster if connected or if wifi-only boolean visibleWhenEnabled = mContext.getResources().getBoolean( R.bool.config_showWifiIndicatorWhenEnabled); boolean wifiVisible = mCurrentState.enabled && ((mCurrentState.connected && mCurrentState.inetCondition == 1) || !mHasMobileData || visibleWhenEnabled); boolean wifiVisible = mCurrentState.enabled && ( (mCurrentState.connected && mCurrentState.inetCondition == 1) || !mHasMobileDataFeature || mWifiTracker.isDefaultNetwork || visibleWhenEnabled); String wifiDesc = mCurrentState.connected ? mCurrentState.ssid : null; boolean ssidPresent = wifiVisible && mCurrentState.ssid != null; String contentDescription = getTextIfExists(getContentDescription()).toString(); Loading Loading
packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java +45 −5 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; Loading @@ -36,7 +37,10 @@ import com.android.settingslib.R; 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 WifiNetworkScoreCache mWifiNetworkScoreCache; private final WifiManager mWifiManager; Loading @@ -55,8 +59,9 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { .clearCapabilities() .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(); private final ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager .NetworkCallback() { private final NetworkCallback mNetworkCallback = new NetworkCallback() { // Note: onCapabilitiesChanged is guaranteed to be called "immediately" after onAvailable // and onLinkPropertiesChanged. @Override public void onCapabilitiesChanged( Network network, NetworkCapabilities networkCapabilities) { Loading @@ -64,11 +69,35 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { 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 WifiInfo mWifiInfo; public boolean enabled; public boolean isCaptivePortal; public boolean isDefaultNetwork; public int state; public boolean connected; public String ssid; Loading @@ -94,11 +123,13 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { mWifiNetworkScoreCache.registerListener(mCacheListener); mConnectivityManager.registerNetworkCallback( mNetworkRequest, mNetworkCallback, mHandler); mConnectivityManager.registerDefaultNetworkCallback(mDefaultNetworkCallback, mHandler); } else { mNetworkScoreManager.unregisterNetworkScoreCache(NetworkKey.TYPE_WIFI, mWifiNetworkScoreCache); mWifiNetworkScoreCache.unregisterListener(); mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); mConnectivityManager.unregisterNetworkCallback(mDefaultNetworkCallback); } } Loading Loading @@ -154,8 +185,17 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { } private void updateStatusLabel() { final NetworkCapabilities networkCapabilities = mConnectivityManager.getNetworkCapabilities(mWifiManager.getCurrentNetwork()); NetworkCapabilities networkCapabilities; 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; if (networkCapabilities != null) { if (networkCapabilities.hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL)) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java +7 −6 Original line number Diff line number Diff line Loading @@ -37,10 +37,10 @@ import java.util.Objects; public class WifiSignalController extends SignalController<WifiSignalController.WifiState, SignalController.IconGroup> { private final boolean mHasMobileData; private final boolean mHasMobileDataFeature; private final WifiStatusTracker mWifiTracker; public WifiSignalController(Context context, boolean hasMobileData, public WifiSignalController(Context context, boolean hasMobileDataFeature, CallbackHandler callbackHandler, NetworkControllerImpl networkController, WifiManager wifiManager) { super("WifiSignalController", context, NetworkCapabilities.TRANSPORT_WIFI, Loading @@ -52,7 +52,7 @@ public class WifiSignalController extends mWifiTracker = new WifiStatusTracker(mContext, wifiManager, networkScoreManager, connectivityManager, this::handleStatusUpdated); mWifiTracker.setListening(true); mHasMobileData = hasMobileData; mHasMobileDataFeature = hasMobileDataFeature; if (wifiManager != null) { wifiManager.registerTrafficStateCallback(context.getMainExecutor(), new WifiTrafficStateCallback()); Loading Loading @@ -85,9 +85,10 @@ public class WifiSignalController extends // only show wifi in the cluster if connected or if wifi-only boolean visibleWhenEnabled = mContext.getResources().getBoolean( R.bool.config_showWifiIndicatorWhenEnabled); boolean wifiVisible = mCurrentState.enabled && ((mCurrentState.connected && mCurrentState.inetCondition == 1) || !mHasMobileData || visibleWhenEnabled); boolean wifiVisible = mCurrentState.enabled && ( (mCurrentState.connected && mCurrentState.inetCondition == 1) || !mHasMobileDataFeature || mWifiTracker.isDefaultNetwork || visibleWhenEnabled); String wifiDesc = mCurrentState.connected ? mCurrentState.ssid : null; boolean ssidPresent = wifiVisible && mCurrentState.ssid != null; String contentDescription = getTextIfExists(getContentDescription()).toString(); Loading