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:
@@ -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