/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
isCaptivePortal()
if (pacUrl != null) {
result = sendDnsAndHttpProbes(null, pacUrl, ValidationProbeEvent.PROBE_PAC);
} else if (mUseHttps) {
result = sendParallelHttpProbes(proxyInfo, httpsUrl, httpUrl);
} else {
result = sendDnsAndHttpProbes(proxyInfo, httpUrl, ValidationProbeEvent.PROBE_HTTP);
}
sendNetworkConditionsBroadcast
sendDnsAndHttpProbes
sendDnsProbe(host);
sendHttpProbe(url, probeType, null);
sendHttpProbe
urlConnection = (HttpURLConnection) mNetwork.openConnection(url)
httpResponseCode = urlConnection.getResponseCode()
private class ValidatedState extends State {
@Override
public void enter() {
maybeLogEvaluationResult(
networkEventType(validationStage(), EvaluationResult.VALIDATED));
mConnectivityServiceHandler.sendMessage(obtainMessage(EVENT_NETWORK_TESTED,
NETWORK_TEST_RESULT_VALID, mNetId, null));
mValidations++;
}
private void notifyNetworkTestResultInvalid(Object obj) {
mConnectivityServiceHandler.sendMessage(obtainMessage(
EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetId, obj));
}
/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
private boolean maybeHandleNetworkMonitorMessage(Message msg) {
nai.asyncChannel.sendMessage(
NetworkAgent.CMD_REPORT_NETWORK_STATUS,
(valid ? NetworkAgent.VALID_NETWORK : NetworkAgent.INVALID_NETWORK),
0, redirectUrlBundle);
/frameworks/base/core/java/android/net/NetworkAgent.java
case CMD_REPORT_NETWORK_STATUS: {
String redirectUrl = ((Bundle)msg.obj).getString(REDIRECT_URL_KEY);
if (VDBG) {
log("CMD_REPORT_NETWORK_STATUS(" +
(msg.arg1 == VALID_NETWORK ? "VALID, " : "INVALID, ") + redirectUrl);
}
networkStatus(msg.arg1, redirectUrl);
/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java
protected void networkStatus(int status, String redirectUrl) {
if (this != mNetworkAgent) return;
if (status == mLastNetworkStatus) return;
mLastNetworkStatus = status;
if (status == NetworkAgent.INVALID_NETWORK) {
if (mVerboseLoggingEnabled) {
log("WifiNetworkAgent -> Wifi networkStatus invalid, score="
+ Integer.toString(mWifiInfo.score));
}
unwantedNetwork(NETWORK_STATUS_UNWANTED_VALIDATION_FAILED);
} else if (status == NetworkAgent.VALID_NETWORK) {
if (mVerboseLoggingEnabled) {
log("WifiNetworkAgent -> Wifi networkStatus valid, score= "
+ Integer.toString(mWifiInfo.score));
}
mWifiMetrics.logStaEvent(StaEvent.TYPE_NETWORK_AGENT_VALID_NETWORK);
doNetworkStatus(status);
}
}
case CMD_NETWORK_STATUS:
if (message.arg1 == NetworkAgent.VALID_NETWORK) {
config = getCurrentWifiConfiguration();
if (config != null) {
// re-enable autojoin
mWifiConfigManager.updateNetworkSelectionStatus(
config.networkId,
WifiConfiguration.NetworkSelectionStatus
.NETWORK_SELECTION_ENABLE);
mWifiConfigManager.setNetworkValidatedInternetAccess(
config.networkId, true);
}
}
/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConfigManager.java
public boolean setNetworkValidatedInternetAccess(int networkId, boolean validated) {
WifiConfiguration config = getInternalConfiguredNetwork(networkId);
if (config == null) {
return false;
}
config.validatedInternetAccess = validated;
config.numNoInternetAccessReports = 0;
saveToStore(false);
return true;
}
/frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
final BroadcastReceiver mReceiver = new BroadcastReceiver()
( WifiManager.NETWORK_STATE_CHANGED_ACTION/WifiManager.RSSI_CHANGED_ACTION
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION/WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION/WifiManager.LINK_CONFIGURATION_CHANGED_ACTION)
fetchScansAndConfigsAndUpdateAccessPoints()
updateAccessPoints
conditionallyNotifyListeners()
mListener.onAccessPointsChanged()
/packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java
onAccessPointsChanged()
updateAccessPointsDelayed()
delay300ms
updateAccessPointPreferences()
for { preference.refresh() }