Loading api/system-current.txt +19 −2 Original line number Diff line number Diff line Loading @@ -26021,15 +26021,16 @@ package android.net.metrics { } public final class CaptivePortalStateChangeEvent extends android.net.metrics.IpConnectivityEvent implements android.os.Parcelable { ctor public CaptivePortalStateChangeEvent(int); ctor public CaptivePortalStateChangeEvent(int, int); ctor public CaptivePortalStateChangeEvent(android.os.Parcel); method public int describeContents(); method public static void logEvent(int); method public static void logEvent(int, int); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.net.metrics.CaptivePortalStateChangeEvent> CREATOR; field public static final int NETWORK_MONITOR_CONNECTED = 0; // 0x0 field public static final int NETWORK_MONITOR_DISCONNECTED = 1; // 0x1 field public static final int NETWORK_MONITOR_VALIDATED = 2; // 0x2 field public final int netId; field public final int state; } Loading Loading @@ -26116,8 +26117,11 @@ package android.net.metrics { field public static final int IPCE_IPRM_PROBE_STARTED = 0; // 0x0 field public static final int IPCE_IPRM_PROVISIONING_LOST = 3; // 0x3 field public static final int IPCE_NETMON_BASE = 2048; // 0x800 field public static final int IPCE_NETMON_CAPPORT_FOUND = 2052; // 0x804 field public static final int IPCE_NETMON_CHECK_RESULT = 2049; // 0x801 field public static final int IPCE_NETMON_PORTAL_PROBE = 2051; // 0x803 field public static final int IPCE_NETMON_STATE_CHANGE = 2048; // 0x800 field public static final int IPCE_NETMON_VALIDATED = 2050; // 0x802 } public final class IpManagerEvent extends android.net.metrics.IpConnectivityEvent implements android.os.Parcelable { Loading @@ -26143,6 +26147,19 @@ package android.net.metrics { field public final java.lang.String ifName; } public final class NetworkMonitorEvent extends android.net.metrics.IpConnectivityEvent implements android.os.Parcelable { ctor public NetworkMonitorEvent(android.os.Parcel); method public int describeContents(); method public static void logCaptivePortalFound(int, long); method public static void logPortalProbeEvent(int, long, int); method public static void logValidated(int, long); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.net.metrics.NetworkMonitorEvent> CREATOR; field public final long durationMs; field public final int netId; field public final int returnCode; } } package android.net.nsd { core/java/android/net/metrics/CaptivePortalStateChangeEvent.java +7 −3 Original line number Diff line number Diff line Loading @@ -29,17 +29,21 @@ public final class CaptivePortalStateChangeEvent extends IpConnectivityEvent imp public static final int NETWORK_MONITOR_DISCONNECTED = 1; public static final int NETWORK_MONITOR_VALIDATED = 2; public final int netId; public final int state; public CaptivePortalStateChangeEvent(int state) { public CaptivePortalStateChangeEvent(int netId, int state) { this.netId = netId; this.state = state; } public CaptivePortalStateChangeEvent(Parcel in) { netId = in.readInt(); state = in.readInt(); } public void writeToParcel(Parcel out, int flags) { out.writeInt(netId); out.writeInt(state); } Loading @@ -58,7 +62,7 @@ public final class CaptivePortalStateChangeEvent extends IpConnectivityEvent imp } }; public static void logEvent(int state) { logEvent(IPCE_NETMON_STATE_CHANGE, new CaptivePortalStateChangeEvent(state)); public static void logEvent(int netId, int state) { logEvent(IPCE_NETMON_STATE_CHANGE, new CaptivePortalStateChangeEvent(netId, state)); } }; core/java/android/net/metrics/IpConnectivityEvent.java +3 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,9 @@ public abstract class IpConnectivityEvent { public static final int IPCE_NETMON_STATE_CHANGE = IPCE_NETMON_BASE + 0; public static final int IPCE_NETMON_CHECK_RESULT = IPCE_NETMON_BASE + 1; public static final int IPCE_NETMON_VALIDATED = IPCE_NETMON_BASE + 2; public static final int IPCE_NETMON_PORTAL_PROBE = IPCE_NETMON_BASE + 3; public static final int IPCE_NETMON_CAPPORT_FOUND = IPCE_NETMON_BASE + 4; public static final int IPCE_CONSRV_DEFAULT_NET_CHANGE = IPCE_CONSRV_BASE + 0; Loading core/java/android/net/metrics/NetworkMonitorEvent.java 0 → 100644 +80 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.metrics; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; /** * {@hide} */ @SystemApi public final class NetworkMonitorEvent extends IpConnectivityEvent implements Parcelable { public final int netId; public final long durationMs; public final int returnCode; private NetworkMonitorEvent(int netId, long durationMs, int returnCode) { this.netId = netId; this.durationMs = durationMs; this.returnCode = returnCode; } public NetworkMonitorEvent(Parcel in) { netId = in.readInt(); durationMs = in.readLong(); returnCode = in.readInt(); } public void writeToParcel(Parcel out, int flags) { out.writeInt(netId); out.writeLong(durationMs); out.writeInt(returnCode); } public int describeContents() { return 0; } public static final Parcelable.Creator<NetworkMonitorEvent> CREATOR = new Parcelable.Creator<NetworkMonitorEvent>() { public NetworkMonitorEvent createFromParcel(Parcel in) { return new NetworkMonitorEvent(in); } public NetworkMonitorEvent[] newArray(int size) { return new NetworkMonitorEvent[size]; } }; private static void logEvent(int eventType, int netId, long durationMs, int returnCode) { logEvent(eventType, new NetworkMonitorEvent(netId, durationMs, returnCode)); } public static void logValidated(int netId, long durationMs) { logEvent(IPCE_NETMON_VALIDATED, netId, durationMs, 0); } public static void logPortalProbeEvent(int netId, long durationMs, int returnCode) { logEvent(IPCE_NETMON_PORTAL_PROBE, netId, durationMs, returnCode); } public static void logCaptivePortalFound(int netId, long durationMs) { logEvent(IPCE_NETMON_CAPPORT_FOUND, netId, durationMs, 0); } }; services/core/java/com/android/server/connectivity/NetworkMonitor.java +34 −13 Original line number Diff line number Diff line Loading @@ -36,8 +36,10 @@ import android.net.TrafficStats; import android.net.Uri; import android.net.metrics.CaptivePortalCheckResultEvent; import android.net.metrics.CaptivePortalStateChangeEvent; import android.net.metrics.NetworkMonitorEvent; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.util.Stopwatch; import android.os.Handler; import android.os.Message; import android.os.Process; Loading Loading @@ -79,7 +81,7 @@ import java.util.Random; */ public class NetworkMonitor extends StateMachine { private static final boolean DBG = false; private static final String TAG = "NetworkMonitor"; private static final String TAG = NetworkMonitor.class.getSimpleName(); private static final String DEFAULT_SERVER = "connectivitycheck.gstatic.com"; private static final int SOCKET_TIMEOUT_MS = 10000; public static final String ACTION_NETWORK_CONDITIONS_MEASURED = Loading Loading @@ -221,6 +223,7 @@ public class NetworkMonitor extends StateMachine { private final Context mContext; private final Handler mConnectivityServiceHandler; private final NetworkAgentInfo mNetworkAgentInfo; private final int mNetId; private final TelephonyManager mTelephonyManager; private final WifiManager mWifiManager; private final AlarmManager mAlarmManager; Loading @@ -246,6 +249,8 @@ public class NetworkMonitor extends StateMachine { private final LocalLog validationLogs = new LocalLog(20); // 20 lines private final Stopwatch mEvaluationTimer = new Stopwatch(); public NetworkMonitor(Context context, Handler handler, NetworkAgentInfo networkAgentInfo, NetworkRequest defaultRequest) { // Add suffix indicating which NetworkMonitor we're talking about. Loading @@ -254,6 +259,7 @@ public class NetworkMonitor extends StateMachine { mContext = context; mConnectivityServiceHandler = handler; mNetworkAgentInfo = networkAgentInfo; mNetId = mNetworkAgentInfo.network.netId; mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Loading Loading @@ -300,12 +306,12 @@ public class NetworkMonitor extends StateMachine { transitionTo(mLingeringState); return HANDLED; case CMD_NETWORK_CONNECTED: CaptivePortalStateChangeEvent.logEvent( CaptivePortalStateChangeEvent.logEvent(mNetId, CaptivePortalStateChangeEvent.NETWORK_MONITOR_CONNECTED); transitionTo(mEvaluatingState); return HANDLED; case CMD_NETWORK_DISCONNECTED: CaptivePortalStateChangeEvent.logEvent( CaptivePortalStateChangeEvent.logEvent(mNetId, CaptivePortalStateChangeEvent.NETWORK_MONITOR_DISCONNECTED); if (mLaunchCaptivePortalAppBroadcastReceiver != null) { mContext.unregisterReceiver(mLaunchCaptivePortalAppBroadcastReceiver); Loading Loading @@ -336,7 +342,7 @@ public class NetworkMonitor extends StateMachine { mUserDoesNotWant = true; mConnectivityServiceHandler.sendMessage(obtainMessage( EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetworkAgentInfo.network.netId, null)); mNetId, null)); // TODO: Should teardown network. mUidResponsibleForReeval = 0; transitionTo(mEvaluatingState); Loading @@ -356,7 +362,11 @@ public class NetworkMonitor extends StateMachine { private class ValidatedState extends State { @Override public void enter() { CaptivePortalStateChangeEvent.logEvent( if (mEvaluationTimer.isRunning()) { NetworkMonitorEvent.logValidated(mNetId, mEvaluationTimer.stop()); mEvaluationTimer.reset(); } CaptivePortalStateChangeEvent.logEvent(mNetId, CaptivePortalStateChangeEvent.NETWORK_MONITOR_VALIDATED); mConnectivityServiceHandler.sendMessage(obtainMessage(EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_VALID, mNetworkAgentInfo.network.netId, null)); Loading Loading @@ -436,6 +446,12 @@ public class NetworkMonitor extends StateMachine { @Override public void enter() { // If we have already started to track time spent in EvaluatingState // don't reset the timer due simply to, say, commands or events that // cause us to exit and re-enter EvaluatingState. if (!mEvaluationTimer.isStarted()) { mEvaluationTimer.start(); } sendMessage(CMD_REEVALUATE, ++mReevaluateToken, 0); if (mUidResponsibleForReeval != INVALID_UID) { TrafficStats.setThreadStatsUid(mUidResponsibleForReeval); Loading Loading @@ -481,22 +497,20 @@ public class NetworkMonitor extends StateMachine { // will be unresponsive. isCaptivePortal() could be executed on another Thread // if this is found to cause problems. CaptivePortalProbeResult probeResult = isCaptivePortal(); CaptivePortalCheckResultEvent.logEvent(mNetworkAgentInfo.network.netId, probeResult.mHttpResponseCode); CaptivePortalCheckResultEvent.logEvent(mNetId, probeResult.mHttpResponseCode); if (probeResult.mHttpResponseCode == 204) { transitionTo(mValidatedState); } else if (probeResult.mHttpResponseCode >= 200 && probeResult.mHttpResponseCode <= 399) { mConnectivityServiceHandler.sendMessage(obtainMessage(EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetworkAgentInfo.network.netId, probeResult.mRedirectUrl)); NETWORK_TEST_RESULT_INVALID, mNetId, probeResult.mRedirectUrl)); transitionTo(mCaptivePortalState); } else { final Message msg = obtainMessage(CMD_REEVALUATE, ++mReevaluateToken, 0); sendMessageDelayed(msg, mReevaluateDelayMs); mConnectivityServiceHandler.sendMessage(obtainMessage( EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetworkAgentInfo.network.netId, probeResult.mRedirectUrl)); EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetId, probeResult.mRedirectUrl)); if (mAttempts >= BLAME_FOR_EVALUATION_ATTEMPTS) { // Don't continue to blame UID forever. TrafficStats.clearThreadStatsUid(); Loading @@ -511,7 +525,7 @@ public class NetworkMonitor extends StateMachine { // Before IGNORE_REEVALUATE_ATTEMPTS attempts are made, // ignore any re-evaluation requests. After, restart the // evaluation process via EvaluatingState#enter. return mAttempts < IGNORE_REEVALUATE_ATTEMPTS ? HANDLED : NOT_HANDLED; return (mAttempts < IGNORE_REEVALUATE_ATTEMPTS) ? HANDLED : NOT_HANDLED; default: return NOT_HANDLED; } Loading Loading @@ -553,6 +567,10 @@ public class NetworkMonitor extends StateMachine { @Override public void enter() { if (mEvaluationTimer.isRunning()) { NetworkMonitorEvent.logCaptivePortalFound(mNetId, mEvaluationTimer.stop()); mEvaluationTimer.reset(); } // Don't annoy user with sign-in notifications. if (mDontDisplaySigninNotification) return; // Create a CustomIntentReceiver that sends us a Loading Loading @@ -593,7 +611,8 @@ public class NetworkMonitor extends StateMachine { @Override public void enter() { final String cmdName = ACTION_LINGER_EXPIRED + "." + mNetworkAgentInfo.network.netId; mEvaluationTimer.reset(); final String cmdName = ACTION_LINGER_EXPIRED + "." + mNetId; mWakeupMessage = makeWakeupMessage(mContext, getHandler(), cmdName, CMD_LINGER_EXPIRED); long wakeupTime = SystemClock.elapsedRealtime() + mLingerDelayMs; mWakeupMessage.schedule(wakeupTime); Loading Loading @@ -663,6 +682,7 @@ public class NetworkMonitor extends StateMachine { HttpURLConnection urlConnection = null; int httpResponseCode = 599; String redirectUrl = null; final Stopwatch probeTimer = new Stopwatch().start(); try { URL url = new URL(getCaptivePortalServerUrl(mContext)); // On networks with a PAC instead of fetching a URL that should result in a 204 Loading Loading @@ -759,6 +779,7 @@ public class NetworkMonitor extends StateMachine { urlConnection.disconnect(); } } NetworkMonitorEvent.logPortalProbeEvent(mNetId, probeTimer.stop(), httpResponseCode); return new CaptivePortalProbeResult(httpResponseCode, redirectUrl); } Loading Loading
api/system-current.txt +19 −2 Original line number Diff line number Diff line Loading @@ -26021,15 +26021,16 @@ package android.net.metrics { } public final class CaptivePortalStateChangeEvent extends android.net.metrics.IpConnectivityEvent implements android.os.Parcelable { ctor public CaptivePortalStateChangeEvent(int); ctor public CaptivePortalStateChangeEvent(int, int); ctor public CaptivePortalStateChangeEvent(android.os.Parcel); method public int describeContents(); method public static void logEvent(int); method public static void logEvent(int, int); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.net.metrics.CaptivePortalStateChangeEvent> CREATOR; field public static final int NETWORK_MONITOR_CONNECTED = 0; // 0x0 field public static final int NETWORK_MONITOR_DISCONNECTED = 1; // 0x1 field public static final int NETWORK_MONITOR_VALIDATED = 2; // 0x2 field public final int netId; field public final int state; } Loading Loading @@ -26116,8 +26117,11 @@ package android.net.metrics { field public static final int IPCE_IPRM_PROBE_STARTED = 0; // 0x0 field public static final int IPCE_IPRM_PROVISIONING_LOST = 3; // 0x3 field public static final int IPCE_NETMON_BASE = 2048; // 0x800 field public static final int IPCE_NETMON_CAPPORT_FOUND = 2052; // 0x804 field public static final int IPCE_NETMON_CHECK_RESULT = 2049; // 0x801 field public static final int IPCE_NETMON_PORTAL_PROBE = 2051; // 0x803 field public static final int IPCE_NETMON_STATE_CHANGE = 2048; // 0x800 field public static final int IPCE_NETMON_VALIDATED = 2050; // 0x802 } public final class IpManagerEvent extends android.net.metrics.IpConnectivityEvent implements android.os.Parcelable { Loading @@ -26143,6 +26147,19 @@ package android.net.metrics { field public final java.lang.String ifName; } public final class NetworkMonitorEvent extends android.net.metrics.IpConnectivityEvent implements android.os.Parcelable { ctor public NetworkMonitorEvent(android.os.Parcel); method public int describeContents(); method public static void logCaptivePortalFound(int, long); method public static void logPortalProbeEvent(int, long, int); method public static void logValidated(int, long); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.net.metrics.NetworkMonitorEvent> CREATOR; field public final long durationMs; field public final int netId; field public final int returnCode; } } package android.net.nsd {
core/java/android/net/metrics/CaptivePortalStateChangeEvent.java +7 −3 Original line number Diff line number Diff line Loading @@ -29,17 +29,21 @@ public final class CaptivePortalStateChangeEvent extends IpConnectivityEvent imp public static final int NETWORK_MONITOR_DISCONNECTED = 1; public static final int NETWORK_MONITOR_VALIDATED = 2; public final int netId; public final int state; public CaptivePortalStateChangeEvent(int state) { public CaptivePortalStateChangeEvent(int netId, int state) { this.netId = netId; this.state = state; } public CaptivePortalStateChangeEvent(Parcel in) { netId = in.readInt(); state = in.readInt(); } public void writeToParcel(Parcel out, int flags) { out.writeInt(netId); out.writeInt(state); } Loading @@ -58,7 +62,7 @@ public final class CaptivePortalStateChangeEvent extends IpConnectivityEvent imp } }; public static void logEvent(int state) { logEvent(IPCE_NETMON_STATE_CHANGE, new CaptivePortalStateChangeEvent(state)); public static void logEvent(int netId, int state) { logEvent(IPCE_NETMON_STATE_CHANGE, new CaptivePortalStateChangeEvent(netId, state)); } };
core/java/android/net/metrics/IpConnectivityEvent.java +3 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,9 @@ public abstract class IpConnectivityEvent { public static final int IPCE_NETMON_STATE_CHANGE = IPCE_NETMON_BASE + 0; public static final int IPCE_NETMON_CHECK_RESULT = IPCE_NETMON_BASE + 1; public static final int IPCE_NETMON_VALIDATED = IPCE_NETMON_BASE + 2; public static final int IPCE_NETMON_PORTAL_PROBE = IPCE_NETMON_BASE + 3; public static final int IPCE_NETMON_CAPPORT_FOUND = IPCE_NETMON_BASE + 4; public static final int IPCE_CONSRV_DEFAULT_NET_CHANGE = IPCE_CONSRV_BASE + 0; Loading
core/java/android/net/metrics/NetworkMonitorEvent.java 0 → 100644 +80 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.metrics; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; /** * {@hide} */ @SystemApi public final class NetworkMonitorEvent extends IpConnectivityEvent implements Parcelable { public final int netId; public final long durationMs; public final int returnCode; private NetworkMonitorEvent(int netId, long durationMs, int returnCode) { this.netId = netId; this.durationMs = durationMs; this.returnCode = returnCode; } public NetworkMonitorEvent(Parcel in) { netId = in.readInt(); durationMs = in.readLong(); returnCode = in.readInt(); } public void writeToParcel(Parcel out, int flags) { out.writeInt(netId); out.writeLong(durationMs); out.writeInt(returnCode); } public int describeContents() { return 0; } public static final Parcelable.Creator<NetworkMonitorEvent> CREATOR = new Parcelable.Creator<NetworkMonitorEvent>() { public NetworkMonitorEvent createFromParcel(Parcel in) { return new NetworkMonitorEvent(in); } public NetworkMonitorEvent[] newArray(int size) { return new NetworkMonitorEvent[size]; } }; private static void logEvent(int eventType, int netId, long durationMs, int returnCode) { logEvent(eventType, new NetworkMonitorEvent(netId, durationMs, returnCode)); } public static void logValidated(int netId, long durationMs) { logEvent(IPCE_NETMON_VALIDATED, netId, durationMs, 0); } public static void logPortalProbeEvent(int netId, long durationMs, int returnCode) { logEvent(IPCE_NETMON_PORTAL_PROBE, netId, durationMs, returnCode); } public static void logCaptivePortalFound(int netId, long durationMs) { logEvent(IPCE_NETMON_CAPPORT_FOUND, netId, durationMs, 0); } };
services/core/java/com/android/server/connectivity/NetworkMonitor.java +34 −13 Original line number Diff line number Diff line Loading @@ -36,8 +36,10 @@ import android.net.TrafficStats; import android.net.Uri; import android.net.metrics.CaptivePortalCheckResultEvent; import android.net.metrics.CaptivePortalStateChangeEvent; import android.net.metrics.NetworkMonitorEvent; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.util.Stopwatch; import android.os.Handler; import android.os.Message; import android.os.Process; Loading Loading @@ -79,7 +81,7 @@ import java.util.Random; */ public class NetworkMonitor extends StateMachine { private static final boolean DBG = false; private static final String TAG = "NetworkMonitor"; private static final String TAG = NetworkMonitor.class.getSimpleName(); private static final String DEFAULT_SERVER = "connectivitycheck.gstatic.com"; private static final int SOCKET_TIMEOUT_MS = 10000; public static final String ACTION_NETWORK_CONDITIONS_MEASURED = Loading Loading @@ -221,6 +223,7 @@ public class NetworkMonitor extends StateMachine { private final Context mContext; private final Handler mConnectivityServiceHandler; private final NetworkAgentInfo mNetworkAgentInfo; private final int mNetId; private final TelephonyManager mTelephonyManager; private final WifiManager mWifiManager; private final AlarmManager mAlarmManager; Loading @@ -246,6 +249,8 @@ public class NetworkMonitor extends StateMachine { private final LocalLog validationLogs = new LocalLog(20); // 20 lines private final Stopwatch mEvaluationTimer = new Stopwatch(); public NetworkMonitor(Context context, Handler handler, NetworkAgentInfo networkAgentInfo, NetworkRequest defaultRequest) { // Add suffix indicating which NetworkMonitor we're talking about. Loading @@ -254,6 +259,7 @@ public class NetworkMonitor extends StateMachine { mContext = context; mConnectivityServiceHandler = handler; mNetworkAgentInfo = networkAgentInfo; mNetId = mNetworkAgentInfo.network.netId; mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Loading Loading @@ -300,12 +306,12 @@ public class NetworkMonitor extends StateMachine { transitionTo(mLingeringState); return HANDLED; case CMD_NETWORK_CONNECTED: CaptivePortalStateChangeEvent.logEvent( CaptivePortalStateChangeEvent.logEvent(mNetId, CaptivePortalStateChangeEvent.NETWORK_MONITOR_CONNECTED); transitionTo(mEvaluatingState); return HANDLED; case CMD_NETWORK_DISCONNECTED: CaptivePortalStateChangeEvent.logEvent( CaptivePortalStateChangeEvent.logEvent(mNetId, CaptivePortalStateChangeEvent.NETWORK_MONITOR_DISCONNECTED); if (mLaunchCaptivePortalAppBroadcastReceiver != null) { mContext.unregisterReceiver(mLaunchCaptivePortalAppBroadcastReceiver); Loading Loading @@ -336,7 +342,7 @@ public class NetworkMonitor extends StateMachine { mUserDoesNotWant = true; mConnectivityServiceHandler.sendMessage(obtainMessage( EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetworkAgentInfo.network.netId, null)); mNetId, null)); // TODO: Should teardown network. mUidResponsibleForReeval = 0; transitionTo(mEvaluatingState); Loading @@ -356,7 +362,11 @@ public class NetworkMonitor extends StateMachine { private class ValidatedState extends State { @Override public void enter() { CaptivePortalStateChangeEvent.logEvent( if (mEvaluationTimer.isRunning()) { NetworkMonitorEvent.logValidated(mNetId, mEvaluationTimer.stop()); mEvaluationTimer.reset(); } CaptivePortalStateChangeEvent.logEvent(mNetId, CaptivePortalStateChangeEvent.NETWORK_MONITOR_VALIDATED); mConnectivityServiceHandler.sendMessage(obtainMessage(EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_VALID, mNetworkAgentInfo.network.netId, null)); Loading Loading @@ -436,6 +446,12 @@ public class NetworkMonitor extends StateMachine { @Override public void enter() { // If we have already started to track time spent in EvaluatingState // don't reset the timer due simply to, say, commands or events that // cause us to exit and re-enter EvaluatingState. if (!mEvaluationTimer.isStarted()) { mEvaluationTimer.start(); } sendMessage(CMD_REEVALUATE, ++mReevaluateToken, 0); if (mUidResponsibleForReeval != INVALID_UID) { TrafficStats.setThreadStatsUid(mUidResponsibleForReeval); Loading Loading @@ -481,22 +497,20 @@ public class NetworkMonitor extends StateMachine { // will be unresponsive. isCaptivePortal() could be executed on another Thread // if this is found to cause problems. CaptivePortalProbeResult probeResult = isCaptivePortal(); CaptivePortalCheckResultEvent.logEvent(mNetworkAgentInfo.network.netId, probeResult.mHttpResponseCode); CaptivePortalCheckResultEvent.logEvent(mNetId, probeResult.mHttpResponseCode); if (probeResult.mHttpResponseCode == 204) { transitionTo(mValidatedState); } else if (probeResult.mHttpResponseCode >= 200 && probeResult.mHttpResponseCode <= 399) { mConnectivityServiceHandler.sendMessage(obtainMessage(EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetworkAgentInfo.network.netId, probeResult.mRedirectUrl)); NETWORK_TEST_RESULT_INVALID, mNetId, probeResult.mRedirectUrl)); transitionTo(mCaptivePortalState); } else { final Message msg = obtainMessage(CMD_REEVALUATE, ++mReevaluateToken, 0); sendMessageDelayed(msg, mReevaluateDelayMs); mConnectivityServiceHandler.sendMessage(obtainMessage( EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetworkAgentInfo.network.netId, probeResult.mRedirectUrl)); EVENT_NETWORK_TESTED, NETWORK_TEST_RESULT_INVALID, mNetId, probeResult.mRedirectUrl)); if (mAttempts >= BLAME_FOR_EVALUATION_ATTEMPTS) { // Don't continue to blame UID forever. TrafficStats.clearThreadStatsUid(); Loading @@ -511,7 +525,7 @@ public class NetworkMonitor extends StateMachine { // Before IGNORE_REEVALUATE_ATTEMPTS attempts are made, // ignore any re-evaluation requests. After, restart the // evaluation process via EvaluatingState#enter. return mAttempts < IGNORE_REEVALUATE_ATTEMPTS ? HANDLED : NOT_HANDLED; return (mAttempts < IGNORE_REEVALUATE_ATTEMPTS) ? HANDLED : NOT_HANDLED; default: return NOT_HANDLED; } Loading Loading @@ -553,6 +567,10 @@ public class NetworkMonitor extends StateMachine { @Override public void enter() { if (mEvaluationTimer.isRunning()) { NetworkMonitorEvent.logCaptivePortalFound(mNetId, mEvaluationTimer.stop()); mEvaluationTimer.reset(); } // Don't annoy user with sign-in notifications. if (mDontDisplaySigninNotification) return; // Create a CustomIntentReceiver that sends us a Loading Loading @@ -593,7 +611,8 @@ public class NetworkMonitor extends StateMachine { @Override public void enter() { final String cmdName = ACTION_LINGER_EXPIRED + "." + mNetworkAgentInfo.network.netId; mEvaluationTimer.reset(); final String cmdName = ACTION_LINGER_EXPIRED + "." + mNetId; mWakeupMessage = makeWakeupMessage(mContext, getHandler(), cmdName, CMD_LINGER_EXPIRED); long wakeupTime = SystemClock.elapsedRealtime() + mLingerDelayMs; mWakeupMessage.schedule(wakeupTime); Loading Loading @@ -663,6 +682,7 @@ public class NetworkMonitor extends StateMachine { HttpURLConnection urlConnection = null; int httpResponseCode = 599; String redirectUrl = null; final Stopwatch probeTimer = new Stopwatch().start(); try { URL url = new URL(getCaptivePortalServerUrl(mContext)); // On networks with a PAC instead of fetching a URL that should result in a 204 Loading Loading @@ -759,6 +779,7 @@ public class NetworkMonitor extends StateMachine { urlConnection.disconnect(); } } NetworkMonitorEvent.logPortalProbeEvent(mNetId, probeTimer.stop(), httpResponseCode); return new CaptivePortalProbeResult(httpResponseCode, redirectUrl); } Loading