Support ignoring penalty for bad wifi networks
This patch adds a way to configure devices so that a validated network that becomes unvalidated is not penalized in the network scoring and selection logic. The intent is to prevent devices configured to do so from switching to a lower scoring network such as cellular networks when a higher scoring network such as wifi networks loses internet connectivity. Bug: 31075769 Change-Id: Ie7e0f2607d214a178367fedfbef6c44768fa00a4
This commit is contained in:
@@ -7441,6 +7441,12 @@ public final class Settings {
|
|||||||
public static final String NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS =
|
public static final String NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS =
|
||||||
"network_switch_notification_rate_limit_millis";
|
"network_switch_notification_rate_limit_millis";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether to automatically switch away from wifi networks that lose Internet access.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String NETWORK_AVOID_BAD_WIFI = "network_avoid_bad_wifi";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether Wifi display is enabled/disabled
|
* Whether Wifi display is enabled/disabled
|
||||||
* 0=disabled. 1=enabled.
|
* 0=disabled. 1=enabled.
|
||||||
|
|||||||
@@ -275,6 +275,11 @@
|
|||||||
<string-array translatable="false" name="config_networkNotifySwitches">
|
<string-array translatable="false" name="config_networkNotifySwitches">
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<!-- Whether the device should automatically switch away from Wi-Fi networks that lose
|
||||||
|
Internet access. Actual device behaviour is controlled by
|
||||||
|
Settings.Global.NETWORK_AVOID_BAD_WIFI. This is the default value of that setting. -->
|
||||||
|
<integer translatable="false" name="config_networkAvoidBadWifi">1</integer>
|
||||||
|
|
||||||
<!-- List of regexpressions describing the interface (if any) that represent tetherable
|
<!-- List of regexpressions describing the interface (if any) that represent tetherable
|
||||||
USB interfaces. If the device doesn't want to support tethering over USB this should
|
USB interfaces. If the device doesn't want to support tethering over USB this should
|
||||||
be empty. An example would be "usb.*" -->
|
be empty. An example would be "usb.*" -->
|
||||||
|
|||||||
@@ -1746,6 +1746,7 @@
|
|||||||
<java-symbol type="integer" name="config_networkTransitionTimeout" />
|
<java-symbol type="integer" name="config_networkTransitionTimeout" />
|
||||||
<java-symbol type="integer" name="config_networkNotifySwitchType" />
|
<java-symbol type="integer" name="config_networkNotifySwitchType" />
|
||||||
<java-symbol type="array" name="config_networkNotifySwitches" />
|
<java-symbol type="array" name="config_networkNotifySwitches" />
|
||||||
|
<java-symbol type="integer" name="config_networkAvoidBadWifi" />
|
||||||
<java-symbol type="integer" name="config_notificationsBatteryFullARGB" />
|
<java-symbol type="integer" name="config_notificationsBatteryFullARGB" />
|
||||||
<java-symbol type="integer" name="config_notificationsBatteryLedOff" />
|
<java-symbol type="integer" name="config_notificationsBatteryLedOff" />
|
||||||
<java-symbol type="integer" name="config_notificationsBatteryLedOn" />
|
<java-symbol type="integer" name="config_notificationsBatteryLedOn" />
|
||||||
|
|||||||
@@ -2704,6 +2704,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
PROMPT_UNVALIDATED_DELAY_MS);
|
PROMPT_UNVALIDATED_DELAY_MS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
public boolean avoidBadWifi() {
|
||||||
|
int defaultAvoidBadWifi =
|
||||||
|
mContext.getResources().getInteger(R.integer.config_networkAvoidBadWifi);
|
||||||
|
int avoid = Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.Global.NETWORK_AVOID_BAD_WIFI, defaultAvoidBadWifi);
|
||||||
|
return avoid == 1;
|
||||||
|
}
|
||||||
|
|
||||||
private void handlePromptUnvalidated(Network network) {
|
private void handlePromptUnvalidated(Network network) {
|
||||||
if (VDBG) log("handlePromptUnvalidated " + network);
|
if (VDBG) log("handlePromptUnvalidated " + network);
|
||||||
NetworkAgentInfo nai = getNetworkAgentInfoForNetwork(network);
|
NetworkAgentInfo nai = getNetworkAgentInfoForNetwork(network);
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ import java.util.TreeSet;
|
|||||||
// a NetworkRequest, ConnectivityService will cancel the future disconnection of the NetworkAgent's
|
// a NetworkRequest, ConnectivityService will cancel the future disconnection of the NetworkAgent's
|
||||||
// AsyncChannel, and the network is no longer considered "lingering".
|
// AsyncChannel, and the network is no longer considered "lingering".
|
||||||
public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
|
public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
|
||||||
|
|
||||||
public NetworkInfo networkInfo;
|
public NetworkInfo networkInfo;
|
||||||
// This Network object should always be used if possible, so as to encourage reuse of the
|
// This Network object should always be used if possible, so as to encourage reuse of the
|
||||||
// enclosed socket factory and connection pool. Avoid creating other Network objects.
|
// enclosed socket factory and connection pool. Avoid creating other Network objects.
|
||||||
@@ -354,13 +355,20 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int score = currentScore;
|
int score = currentScore;
|
||||||
if (!lastValidated && !pretendValidated) {
|
if (!lastValidated && !pretendValidated && !ignoreWifiUnvalidationPenalty()) {
|
||||||
score -= UNVALIDATED_SCORE_PENALTY;
|
score -= UNVALIDATED_SCORE_PENALTY;
|
||||||
}
|
}
|
||||||
if (score < 0) score = 0;
|
if (score < 0) score = 0;
|
||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return true on devices configured to ignore score penalty for wifi networks
|
||||||
|
// that become unvalidated (b/31075769).
|
||||||
|
private boolean ignoreWifiUnvalidationPenalty() {
|
||||||
|
boolean isWifi = networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
|
||||||
|
return isWifi && !mConnService.avoidBadWifi() && everValidated;
|
||||||
|
}
|
||||||
|
|
||||||
// Get the current score for this Network. This may be modified from what the
|
// Get the current score for this Network. This may be modified from what the
|
||||||
// NetworkAgent sent, as it has modifiers applied to it.
|
// NetworkAgent sent, as it has modifiers applied to it.
|
||||||
public int getCurrentScore() {
|
public int getCurrentScore() {
|
||||||
|
|||||||
Reference in New Issue
Block a user