Loading core/java/android/net/NetworkAgent.java +16 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,13 @@ public abstract class NetworkAgent extends Handler { public static final int VALID_NETWORK = 1; public static final int INVALID_NETWORK = 2; /** * Sent by the NetworkAgent to ConnectivityService to indicate this network was * explicitly selected. This should be sent before the NetworkInfo is marked * CONNECTED so it can be given special treatment at that time. */ public static final int EVENT_SET_EXPLICITLY_SELECTED = BASE + 10; public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni, NetworkCapabilities nc, LinkProperties lp, int score) { this(looper, context, logTag, ni, nc, lp, score, null); Loading Loading @@ -280,6 +287,15 @@ public abstract class NetworkAgent extends Handler { queueOrSendMessage(EVENT_UNBLOCK_ADDRESS_FAMILY, family); } /** * Called by the bearer to indicate this network was manually selected by the user. * This should be called before the NetworkInfo is marked CONNECTED so that this * Network can be given special treatment at that time. */ public void explicitlySelected() { queueOrSendMessage(EVENT_SET_EXPLICITLY_SELECTED, 0); } /** * Called when ConnectivityService has indicated they no longer want this network. * The parent factory should (previously) have received indication of the change Loading core/java/android/net/NetworkMisc.java +22 −0 Original line number Diff line number Diff line Loading @@ -25,12 +25,32 @@ import android.os.Parcelable; * @hide */ public class NetworkMisc implements Parcelable { /** * If the {@link Network} is a VPN, whether apps are allowed to bypass the VPN. This is set by * a {@link VpnService} and used by {@link ConnectivityService} when creating a VPN. */ public boolean allowBypass; /** * Set if the network was manually/explicitly connected to by the user either from settings * or a 3rd party app. For example, turning on cell data is not explicit but tapping on a wifi * ap in the wifi settings to trigger a connection is explicit. A 3rd party app asking to * connect to a particular access point is also explicit, though this may change in the future * as we want apps to use the multinetwork apis. */ public boolean explicitlySelected; public NetworkMisc() { } public NetworkMisc(NetworkMisc nm) { if (nm != null) { allowBypass = nm.allowBypass; explicitlySelected = nm.explicitlySelected; } } @Override public int describeContents() { return 0; Loading @@ -39,6 +59,7 @@ public class NetworkMisc implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(allowBypass ? 1 : 0); out.writeInt(explicitlySelected ? 1 : 0); } public static final Creator<NetworkMisc> CREATOR = new Creator<NetworkMisc>() { Loading @@ -46,6 +67,7 @@ public class NetworkMisc implements Parcelable { public NetworkMisc createFromParcel(Parcel in) { NetworkMisc networkMisc = new NetworkMisc(); networkMisc.allowBypass = in.readInt() != 0; networkMisc.explicitlySelected = in.readInt() != 0; return networkMisc; } Loading services/core/java/com/android/server/ConnectivityService.java +14 −3 Original line number Diff line number Diff line Loading @@ -1925,6 +1925,15 @@ public class ConnectivityService extends IConnectivityManager.Stub { } break; } case NetworkAgent.EVENT_SET_EXPLICITLY_SELECTED: { NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); if (nai == null) { loge("EVENT_SET_EXPLICITLY_SELECTED from unknown NetworkAgent"); break; } nai.networkMisc.explicitlySelected = true; break; } case NetworkMonitor.EVENT_NETWORK_TESTED: { NetworkAgentInfo nai = (NetworkAgentInfo)msg.obj; if (isLiveNetworkAgent(nai, "EVENT_NETWORK_VALIDATED")) { Loading Loading @@ -4250,7 +4259,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(), new NetworkInfo(networkInfo), new LinkProperties(linkProperties), new NetworkCapabilities(networkCapabilities), currentScore, mContext, mTrackerHandler, networkMisc); new NetworkMisc(networkMisc)); synchronized (this) { nai.networkMonitor.systemReady = mSystemReady; } Loading Loading @@ -4552,8 +4561,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { for (NetworkRequestInfo nri : mNetworkRequests.values()) { NetworkAgentInfo currentNetwork = mNetworkForRequestId.get(nri.request.requestId); if (newNetwork == currentNetwork) { if (DBG) log("Network " + newNetwork.name() + " was already satisfying" + if (DBG) { log("Network " + newNetwork.name() + " was already satisfying" + " request " + nri.request.requestId + ". No change."); } keep = true; continue; } Loading services/core/java/com/android/server/connectivity/NetworkAgentInfo.java +7 −2 Original line number Diff line number Diff line Loading @@ -53,6 +53,9 @@ public class NetworkAgentInfo { // Penalty applied to scores of Networks that have not been validated. private static final int UNVALIDATED_SCORE_PENALTY = 40; // Score for explicitly connected network. private static final int EXPLICITLY_SELECTED_NETWORK_SCORE = 100; // The list of NetworkRequests being satisfied by this Network. public final SparseArray<NetworkRequest> networkRequests = new SparseArray<NetworkRequest>(); public final ArrayList<NetworkRequest> networkLingered = new ArrayList<NetworkRequest>(); Loading Loading @@ -95,9 +98,10 @@ public class NetworkAgentInfo { int score = currentScore; if (!validated) score -= UNVALIDATED_SCORE_PENALTY; if (score < 0) score = 0; if (networkMisc.explicitlySelected) score = EXPLICITLY_SELECTED_NETWORK_SCORE; return score; } Loading @@ -110,7 +114,8 @@ public class NetworkAgentInfo { network + "} lp{" + linkProperties + "} nc{" + networkCapabilities + "} Score{" + getCurrentScore() + "} " + "validated{" + validated + "} created{" + created + "} }"; "validated{" + validated + "} created{" + created + "} " + "explicitlySelected{" + networkMisc.explicitlySelected + "} }"; } public String name() { Loading Loading
core/java/android/net/NetworkAgent.java +16 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,13 @@ public abstract class NetworkAgent extends Handler { public static final int VALID_NETWORK = 1; public static final int INVALID_NETWORK = 2; /** * Sent by the NetworkAgent to ConnectivityService to indicate this network was * explicitly selected. This should be sent before the NetworkInfo is marked * CONNECTED so it can be given special treatment at that time. */ public static final int EVENT_SET_EXPLICITLY_SELECTED = BASE + 10; public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni, NetworkCapabilities nc, LinkProperties lp, int score) { this(looper, context, logTag, ni, nc, lp, score, null); Loading Loading @@ -280,6 +287,15 @@ public abstract class NetworkAgent extends Handler { queueOrSendMessage(EVENT_UNBLOCK_ADDRESS_FAMILY, family); } /** * Called by the bearer to indicate this network was manually selected by the user. * This should be called before the NetworkInfo is marked CONNECTED so that this * Network can be given special treatment at that time. */ public void explicitlySelected() { queueOrSendMessage(EVENT_SET_EXPLICITLY_SELECTED, 0); } /** * Called when ConnectivityService has indicated they no longer want this network. * The parent factory should (previously) have received indication of the change Loading
core/java/android/net/NetworkMisc.java +22 −0 Original line number Diff line number Diff line Loading @@ -25,12 +25,32 @@ import android.os.Parcelable; * @hide */ public class NetworkMisc implements Parcelable { /** * If the {@link Network} is a VPN, whether apps are allowed to bypass the VPN. This is set by * a {@link VpnService} and used by {@link ConnectivityService} when creating a VPN. */ public boolean allowBypass; /** * Set if the network was manually/explicitly connected to by the user either from settings * or a 3rd party app. For example, turning on cell data is not explicit but tapping on a wifi * ap in the wifi settings to trigger a connection is explicit. A 3rd party app asking to * connect to a particular access point is also explicit, though this may change in the future * as we want apps to use the multinetwork apis. */ public boolean explicitlySelected; public NetworkMisc() { } public NetworkMisc(NetworkMisc nm) { if (nm != null) { allowBypass = nm.allowBypass; explicitlySelected = nm.explicitlySelected; } } @Override public int describeContents() { return 0; Loading @@ -39,6 +59,7 @@ public class NetworkMisc implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(allowBypass ? 1 : 0); out.writeInt(explicitlySelected ? 1 : 0); } public static final Creator<NetworkMisc> CREATOR = new Creator<NetworkMisc>() { Loading @@ -46,6 +67,7 @@ public class NetworkMisc implements Parcelable { public NetworkMisc createFromParcel(Parcel in) { NetworkMisc networkMisc = new NetworkMisc(); networkMisc.allowBypass = in.readInt() != 0; networkMisc.explicitlySelected = in.readInt() != 0; return networkMisc; } Loading
services/core/java/com/android/server/ConnectivityService.java +14 −3 Original line number Diff line number Diff line Loading @@ -1925,6 +1925,15 @@ public class ConnectivityService extends IConnectivityManager.Stub { } break; } case NetworkAgent.EVENT_SET_EXPLICITLY_SELECTED: { NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); if (nai == null) { loge("EVENT_SET_EXPLICITLY_SELECTED from unknown NetworkAgent"); break; } nai.networkMisc.explicitlySelected = true; break; } case NetworkMonitor.EVENT_NETWORK_TESTED: { NetworkAgentInfo nai = (NetworkAgentInfo)msg.obj; if (isLiveNetworkAgent(nai, "EVENT_NETWORK_VALIDATED")) { Loading Loading @@ -4250,7 +4259,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(), new NetworkInfo(networkInfo), new LinkProperties(linkProperties), new NetworkCapabilities(networkCapabilities), currentScore, mContext, mTrackerHandler, networkMisc); new NetworkMisc(networkMisc)); synchronized (this) { nai.networkMonitor.systemReady = mSystemReady; } Loading Loading @@ -4552,8 +4561,10 @@ public class ConnectivityService extends IConnectivityManager.Stub { for (NetworkRequestInfo nri : mNetworkRequests.values()) { NetworkAgentInfo currentNetwork = mNetworkForRequestId.get(nri.request.requestId); if (newNetwork == currentNetwork) { if (DBG) log("Network " + newNetwork.name() + " was already satisfying" + if (DBG) { log("Network " + newNetwork.name() + " was already satisfying" + " request " + nri.request.requestId + ". No change."); } keep = true; continue; } Loading
services/core/java/com/android/server/connectivity/NetworkAgentInfo.java +7 −2 Original line number Diff line number Diff line Loading @@ -53,6 +53,9 @@ public class NetworkAgentInfo { // Penalty applied to scores of Networks that have not been validated. private static final int UNVALIDATED_SCORE_PENALTY = 40; // Score for explicitly connected network. private static final int EXPLICITLY_SELECTED_NETWORK_SCORE = 100; // The list of NetworkRequests being satisfied by this Network. public final SparseArray<NetworkRequest> networkRequests = new SparseArray<NetworkRequest>(); public final ArrayList<NetworkRequest> networkLingered = new ArrayList<NetworkRequest>(); Loading Loading @@ -95,9 +98,10 @@ public class NetworkAgentInfo { int score = currentScore; if (!validated) score -= UNVALIDATED_SCORE_PENALTY; if (score < 0) score = 0; if (networkMisc.explicitlySelected) score = EXPLICITLY_SELECTED_NETWORK_SCORE; return score; } Loading @@ -110,7 +114,8 @@ public class NetworkAgentInfo { network + "} lp{" + linkProperties + "} nc{" + networkCapabilities + "} Score{" + getCurrentScore() + "} " + "validated{" + validated + "} created{" + created + "} }"; "validated{" + validated + "} created{" + created + "} " + "explicitlySelected{" + networkMisc.explicitlySelected + "} }"; } public String name() { Loading