Merge "Add more connectivity module settings"
This commit is contained in:
@@ -16,6 +16,8 @@
|
|||||||
package android.net;
|
package android.net;
|
||||||
|
|
||||||
import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
|
import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
|
||||||
|
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_DEFAULT_MODE;
|
||||||
|
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE;
|
||||||
import static android.net.NetworkRequest.Type.BACKGROUND_REQUEST;
|
import static android.net.NetworkRequest.Type.BACKGROUND_REQUEST;
|
||||||
import static android.net.NetworkRequest.Type.LISTEN;
|
import static android.net.NetworkRequest.Type.LISTEN;
|
||||||
import static android.net.NetworkRequest.Type.LISTEN_FOR_BEST;
|
import static android.net.NetworkRequest.Type.LISTEN_FOR_BEST;
|
||||||
@@ -23,8 +25,6 @@ import static android.net.NetworkRequest.Type.REQUEST;
|
|||||||
import static android.net.NetworkRequest.Type.TRACK_DEFAULT;
|
import static android.net.NetworkRequest.Type.TRACK_DEFAULT;
|
||||||
import static android.net.NetworkRequest.Type.TRACK_SYSTEM_DEFAULT;
|
import static android.net.NetworkRequest.Type.TRACK_SYSTEM_DEFAULT;
|
||||||
import static android.net.QosCallback.QosCallbackRegistrationException;
|
import static android.net.QosCallback.QosCallbackRegistrationException;
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_DEFAULT_MODE;
|
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
|
|
||||||
|
|
||||||
import android.annotation.CallbackExecutor;
|
import android.annotation.CallbackExecutor;
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
|
|||||||
@@ -16,6 +16,11 @@
|
|||||||
|
|
||||||
package android.net;
|
package android.net;
|
||||||
|
|
||||||
|
import android.annotation.IntDef;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A manager class for connectivity module settings.
|
* A manager class for connectivity module settings.
|
||||||
*
|
*
|
||||||
@@ -25,6 +30,196 @@ public class ConnectivitySettingsManager {
|
|||||||
|
|
||||||
private ConnectivitySettingsManager() {}
|
private ConnectivitySettingsManager() {}
|
||||||
|
|
||||||
|
/** Data activity timeout settings */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inactivity timeout to track mobile data activity.
|
||||||
|
*
|
||||||
|
* If set to a positive integer, it indicates the inactivity timeout value in seconds to
|
||||||
|
* infer the data activity of mobile network. After a period of no activity on mobile
|
||||||
|
* networks with length specified by the timeout, an {@code ACTION_DATA_ACTIVITY_CHANGE}
|
||||||
|
* intent is fired to indicate a transition of network status from "active" to "idle". Any
|
||||||
|
* subsequent activity on mobile networks triggers the firing of {@code
|
||||||
|
* ACTION_DATA_ACTIVITY_CHANGE} intent indicating transition from "idle" to "active".
|
||||||
|
*
|
||||||
|
* Network activity refers to transmitting or receiving data on the network interfaces.
|
||||||
|
*
|
||||||
|
* Tracking is disabled if set to zero or negative value.
|
||||||
|
*/
|
||||||
|
public static final String DATA_ACTIVITY_TIMEOUT_MOBILE = "data_activity_timeout_mobile";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timeout to tracking Wifi data activity. Same as {@code DATA_ACTIVITY_TIMEOUT_MOBILE}
|
||||||
|
* but for Wifi network.
|
||||||
|
*/
|
||||||
|
public static final String DATA_ACTIVITY_TIMEOUT_WIFI = "data_activity_timeout_wifi";
|
||||||
|
|
||||||
|
/** Dns resolver settings */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sample validity in seconds to configure for the system DNS resolver.
|
||||||
|
*/
|
||||||
|
public static final String DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS =
|
||||||
|
"dns_resolver_sample_validity_seconds";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Success threshold in percent for use with the system DNS resolver.
|
||||||
|
*/
|
||||||
|
public static final String DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT =
|
||||||
|
"dns_resolver_success_threshold_percent";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minimum number of samples needed for statistics to be considered meaningful in the
|
||||||
|
* system DNS resolver.
|
||||||
|
*/
|
||||||
|
public static final String DNS_RESOLVER_MIN_SAMPLES = "dns_resolver_min_samples";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum number taken into account for statistics purposes in the system DNS resolver.
|
||||||
|
*/
|
||||||
|
public static final String DNS_RESOLVER_MAX_SAMPLES = "dns_resolver_max_samples";
|
||||||
|
|
||||||
|
/** Network switch notification settings */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum number of notifications shown in 24 hours when switching networks.
|
||||||
|
*/
|
||||||
|
public static final String NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT =
|
||||||
|
"network_switch_notification_daily_limit";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The minimum time in milliseconds between notifications when switching networks.
|
||||||
|
*/
|
||||||
|
public static final String NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS =
|
||||||
|
"network_switch_notification_rate_limit_millis";
|
||||||
|
|
||||||
|
/** Captive portal settings */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The URL used for HTTP captive portal detection upon a new connection.
|
||||||
|
* A 204 response code from the server is used for validation.
|
||||||
|
*/
|
||||||
|
public static final String CAPTIVE_PORTAL_HTTP_URL = "captive_portal_http_url";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* What to do when connecting a network that presents a captive portal.
|
||||||
|
* Must be one of the CAPTIVE_PORTAL_MODE_* constants above.
|
||||||
|
*
|
||||||
|
* The default for this setting is CAPTIVE_PORTAL_MODE_PROMPT.
|
||||||
|
*/
|
||||||
|
public static final String CAPTIVE_PORTAL_MODE = "captive_portal_mode";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't attempt to detect captive portals.
|
||||||
|
*/
|
||||||
|
public static final int CAPTIVE_PORTAL_MODE_IGNORE = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When detecting a captive portal, display a notification that
|
||||||
|
* prompts the user to sign in.
|
||||||
|
*/
|
||||||
|
public static final int CAPTIVE_PORTAL_MODE_PROMPT = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When detecting a captive portal, immediately disconnect from the
|
||||||
|
* network and do not reconnect to that network in the future.
|
||||||
|
*/
|
||||||
|
public static final int CAPTIVE_PORTAL_MODE_AVOID = 2;
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(value = {
|
||||||
|
CAPTIVE_PORTAL_MODE_IGNORE,
|
||||||
|
CAPTIVE_PORTAL_MODE_PROMPT,
|
||||||
|
CAPTIVE_PORTAL_MODE_AVOID,
|
||||||
|
})
|
||||||
|
public @interface CaptivePortalMode {}
|
||||||
|
|
||||||
|
/** Global http proxy settings */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Host name for global http proxy. Set via ConnectivityManager.
|
||||||
|
*/
|
||||||
|
public static final String GLOBAL_HTTP_PROXY_HOST = "global_http_proxy_host";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integer host port for global http proxy. Set via ConnectivityManager.
|
||||||
|
*/
|
||||||
|
public static final String GLOBAL_HTTP_PROXY_PORT = "global_http_proxy_port";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exclusion list for global proxy. This string contains a list of
|
||||||
|
* comma-separated domains where the global proxy does not apply.
|
||||||
|
* Domains should be listed in a comma- separated list. Example of
|
||||||
|
* acceptable formats: ".domain1.com,my.domain2.com" Use
|
||||||
|
* ConnectivityManager to set/get.
|
||||||
|
*/
|
||||||
|
public static final String GLOBAL_HTTP_PROXY_EXCLUSION_LIST =
|
||||||
|
"global_http_proxy_exclusion_list";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The location PAC File for the proxy.
|
||||||
|
*/
|
||||||
|
public static final String GLOBAL_HTTP_PROXY_PAC = "global_proxy_pac_url";
|
||||||
|
|
||||||
|
/** Private dns settings */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The requested Private DNS mode (string), and an accompanying specifier (string).
|
||||||
|
*
|
||||||
|
* Currently, the specifier holds the chosen provider name when the mode requests
|
||||||
|
* a specific provider. It may be used to store the provider name even when the
|
||||||
|
* mode changes so that temporarily disabling and re-enabling the specific
|
||||||
|
* provider mode does not necessitate retyping the provider hostname.
|
||||||
|
*/
|
||||||
|
public static final String PRIVATE_DNS_MODE = "private_dns_mode";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The specific Private DNS provider name.
|
||||||
|
*/
|
||||||
|
public static final String PRIVATE_DNS_SPECIFIER = "private_dns_specifier";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forced override of the default mode (hardcoded as "automatic", nee "opportunistic").
|
||||||
|
* This allows changing the default mode without effectively disabling other modes,
|
||||||
|
* all of which require explicit user action to enable/configure. See also b/79719289.
|
||||||
|
*
|
||||||
|
* Value is a string, suitable for assignment to PRIVATE_DNS_MODE above.
|
||||||
|
*/
|
||||||
|
public static final String PRIVATE_DNS_DEFAULT_MODE = "private_dns_default_mode";
|
||||||
|
|
||||||
|
/** Other settings */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of milliseconds to hold on to a PendingIntent based request. This delay gives
|
||||||
|
* the receivers of the PendingIntent an opportunity to make a new network request before
|
||||||
|
* the Network satisfying the request is potentially removed.
|
||||||
|
*/
|
||||||
|
public static final String CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS =
|
||||||
|
"connectivity_release_pending_intent_delay_ms";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the mobile data connection should remain active even when higher
|
||||||
|
* priority networks like WiFi are active, to help make network switching faster.
|
||||||
|
*
|
||||||
|
* See ConnectivityService for more info.
|
||||||
|
*
|
||||||
|
* (0 = disabled, 1 = enabled)
|
||||||
|
*/
|
||||||
|
public static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the wifi data connection should remain active even when higher
|
||||||
|
* priority networks like Ethernet are active, to keep both networks.
|
||||||
|
* In the case where higher priority networks are connected, wifi will be
|
||||||
|
* unused unless an application explicitly requests to use it.
|
||||||
|
*
|
||||||
|
* See ConnectivityService for more info.
|
||||||
|
*
|
||||||
|
* (0 = disabled, 1 = enabled)
|
||||||
|
*/
|
||||||
|
public static final String WIFI_ALWAYS_REQUESTED = "wifi_always_requested";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether to automatically switch away from wifi networks that lose Internet access.
|
* Whether to automatically switch away from wifi networks that lose Internet access.
|
||||||
* Only meaningful if config_networkAvoidBadWifi is set to 0, otherwise the system always
|
* Only meaningful if config_networkAvoidBadWifi is set to 0, otherwise the system always
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
/**
|
/**
|
||||||
* Default URL to use for {@link #getCaptivePortalServerUrl()}. This should not be changed
|
* Default URL to use for {@link #getCaptivePortalServerUrl()}. This should not be changed
|
||||||
* by OEMs for configuration purposes, as this value is overridden by
|
* by OEMs for configuration purposes, as this value is overridden by
|
||||||
* Settings.Global.CAPTIVE_PORTAL_HTTP_URL.
|
* ConnectivitySettingsManager.CAPTIVE_PORTAL_HTTP_URL.
|
||||||
* R.string.config_networkCaptivePortalServerUrl should be overridden instead for this purpose
|
* R.string.config_networkCaptivePortalServerUrl should be overridden instead for this purpose
|
||||||
* (preferably via runtime resource overlays).
|
* (preferably via runtime resource overlays).
|
||||||
*/
|
*/
|
||||||
@@ -318,7 +318,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
protected int mNascentDelayMs;
|
protected int mNascentDelayMs;
|
||||||
|
|
||||||
// How long to delay to removal of a pending intent based request.
|
// How long to delay to removal of a pending intent based request.
|
||||||
// See Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS
|
// See ConnectivitySettingsManager.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS
|
||||||
private final int mReleasePendingIntentDelayMs;
|
private final int mReleasePendingIntentDelayMs;
|
||||||
|
|
||||||
private MockableSystemProperties mSystemProperties;
|
private MockableSystemProperties mSystemProperties;
|
||||||
@@ -1234,7 +1234,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
new ConnectivityDiagnosticsHandler(mHandlerThread.getLooper());
|
new ConnectivityDiagnosticsHandler(mHandlerThread.getLooper());
|
||||||
|
|
||||||
mReleasePendingIntentDelayMs = Settings.Secure.getInt(context.getContentResolver(),
|
mReleasePendingIntentDelayMs = Settings.Secure.getInt(context.getContentResolver(),
|
||||||
Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS, 5_000);
|
ConnectivitySettingsManager.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS, 5_000);
|
||||||
|
|
||||||
mLingerDelayMs = mSystemProperties.getInt(LINGER_DELAY_PROPERTY, DEFAULT_LINGER_DELAY_MS);
|
mLingerDelayMs = mSystemProperties.getInt(LINGER_DELAY_PROPERTY, DEFAULT_LINGER_DELAY_MS);
|
||||||
// TODO: Consider making the timer customizable.
|
// TODO: Consider making the timer customizable.
|
||||||
@@ -1306,10 +1306,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
mQosCallbackTracker = new QosCallbackTracker(mHandler, mNetworkRequestCounter);
|
mQosCallbackTracker = new QosCallbackTracker(mHandler, mNetworkRequestCounter);
|
||||||
|
|
||||||
final int dailyLimit = Settings.Global.getInt(mContext.getContentResolver(),
|
final int dailyLimit = Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
Settings.Global.NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT,
|
ConnectivitySettingsManager.NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT,
|
||||||
LingerMonitor.DEFAULT_NOTIFICATION_DAILY_LIMIT);
|
LingerMonitor.DEFAULT_NOTIFICATION_DAILY_LIMIT);
|
||||||
final long rateLimit = Settings.Global.getLong(mContext.getContentResolver(),
|
final long rateLimit = Settings.Global.getLong(mContext.getContentResolver(),
|
||||||
Settings.Global.NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS,
|
ConnectivitySettingsManager.NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS,
|
||||||
LingerMonitor.DEFAULT_NOTIFICATION_RATE_LIMIT_MILLIS);
|
LingerMonitor.DEFAULT_NOTIFICATION_RATE_LIMIT_MILLIS);
|
||||||
mLingerMonitor = new LingerMonitor(mContext, mNotifier, dailyLimit, rateLimit);
|
mLingerMonitor = new LingerMonitor(mContext, mNotifier, dailyLimit, rateLimit);
|
||||||
|
|
||||||
@@ -1427,10 +1427,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void handleConfigureAlwaysOnNetworks() {
|
private void handleConfigureAlwaysOnNetworks() {
|
||||||
handleAlwaysOnNetworkRequest(
|
handleAlwaysOnNetworkRequest(mDefaultMobileDataRequest,
|
||||||
mDefaultMobileDataRequest, Settings.Global.MOBILE_DATA_ALWAYS_ON, true);
|
ConnectivitySettingsManager.MOBILE_DATA_ALWAYS_ON, true /* defaultValue */);
|
||||||
handleAlwaysOnNetworkRequest(mDefaultWifiRequest, Settings.Global.WIFI_ALWAYS_REQUESTED,
|
handleAlwaysOnNetworkRequest(mDefaultWifiRequest,
|
||||||
false);
|
ConnectivitySettingsManager.WIFI_ALWAYS_REQUESTED, false /* defaultValue */);
|
||||||
handleAlwaysOnNetworkRequest(mDefaultVehicleRequest,
|
handleAlwaysOnNetworkRequest(mDefaultVehicleRequest,
|
||||||
com.android.internal.R.bool.config_vehicleInternalNetworkAlwaysRequested);
|
com.android.internal.R.bool.config_vehicleInternalNetworkAlwaysRequested);
|
||||||
}
|
}
|
||||||
@@ -1443,12 +1443,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
|
|
||||||
// Watch for whether or not to keep mobile data always on.
|
// Watch for whether or not to keep mobile data always on.
|
||||||
mSettingsObserver.observe(
|
mSettingsObserver.observe(
|
||||||
Settings.Global.getUriFor(Settings.Global.MOBILE_DATA_ALWAYS_ON),
|
Settings.Global.getUriFor(ConnectivitySettingsManager.MOBILE_DATA_ALWAYS_ON),
|
||||||
EVENT_CONFIGURE_ALWAYS_ON_NETWORKS);
|
EVENT_CONFIGURE_ALWAYS_ON_NETWORKS);
|
||||||
|
|
||||||
// Watch for whether or not to keep wifi always on.
|
// Watch for whether or not to keep wifi always on.
|
||||||
mSettingsObserver.observe(
|
mSettingsObserver.observe(
|
||||||
Settings.Global.getUriFor(Settings.Global.WIFI_ALWAYS_REQUESTED),
|
Settings.Global.getUriFor(ConnectivitySettingsManager.WIFI_ALWAYS_REQUESTED),
|
||||||
EVENT_CONFIGURE_ALWAYS_ON_NETWORKS);
|
EVENT_CONFIGURE_ALWAYS_ON_NETWORKS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3110,7 +3110,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
nai.lastCaptivePortalDetected = visible;
|
nai.lastCaptivePortalDetected = visible;
|
||||||
nai.everCaptivePortalDetected |= visible;
|
nai.everCaptivePortalDetected |= visible;
|
||||||
if (nai.lastCaptivePortalDetected &&
|
if (nai.lastCaptivePortalDetected &&
|
||||||
Settings.Global.CAPTIVE_PORTAL_MODE_AVOID == getCaptivePortalMode()) {
|
ConnectivitySettingsManager.CAPTIVE_PORTAL_MODE_AVOID
|
||||||
|
== getCaptivePortalMode()) {
|
||||||
if (DBG) log("Avoiding captive portal network: " + nai.toShortString());
|
if (DBG) log("Avoiding captive portal network: " + nai.toShortString());
|
||||||
nai.onPreventAutomaticReconnect();
|
nai.onPreventAutomaticReconnect();
|
||||||
teardownUnneededNetwork(nai);
|
teardownUnneededNetwork(nai);
|
||||||
@@ -3221,8 +3222,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
|
|
||||||
private int getCaptivePortalMode() {
|
private int getCaptivePortalMode() {
|
||||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
Settings.Global.CAPTIVE_PORTAL_MODE,
|
ConnectivitySettingsManager.CAPTIVE_PORTAL_MODE,
|
||||||
Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
ConnectivitySettingsManager.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean maybeHandleNetworkAgentInfoMessage(Message msg) {
|
private boolean maybeHandleNetworkAgentInfoMessage(Message msg) {
|
||||||
@@ -8159,7 +8160,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
settingUrl = Settings.Global.getString(mContext.getContentResolver(),
|
settingUrl = Settings.Global.getString(mContext.getContentResolver(),
|
||||||
Settings.Global.CAPTIVE_PORTAL_HTTP_URL);
|
ConnectivitySettingsManager.CAPTIVE_PORTAL_HTTP_URL);
|
||||||
if (!TextUtils.isEmpty(settingUrl)) {
|
if (!TextUtils.isEmpty(settingUrl)) {
|
||||||
return settingUrl;
|
return settingUrl;
|
||||||
}
|
}
|
||||||
@@ -8241,7 +8242,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
// restore private DNS settings to default mode (opportunistic)
|
// restore private DNS settings to default mode (opportunistic)
|
||||||
if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_PRIVATE_DNS)) {
|
if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_PRIVATE_DNS)) {
|
||||||
Settings.Global.putString(mContext.getContentResolver(),
|
Settings.Global.putString(mContext.getContentResolver(),
|
||||||
Settings.Global.PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OPPORTUNISTIC);
|
ConnectivitySettingsManager.PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OPPORTUNISTIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.Global.putString(mContext.getContentResolver(),
|
Settings.Global.putString(mContext.getContentResolver(),
|
||||||
@@ -8997,13 +8998,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
if (networkAgent.networkCapabilities.hasTransport(
|
if (networkAgent.networkCapabilities.hasTransport(
|
||||||
NetworkCapabilities.TRANSPORT_CELLULAR)) {
|
NetworkCapabilities.TRANSPORT_CELLULAR)) {
|
||||||
timeout = Settings.Global.getInt(mContext.getContentResolver(),
|
timeout = Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE,
|
ConnectivitySettingsManager.DATA_ACTIVITY_TIMEOUT_MOBILE,
|
||||||
10);
|
10);
|
||||||
type = NetworkCapabilities.TRANSPORT_CELLULAR;
|
type = NetworkCapabilities.TRANSPORT_CELLULAR;
|
||||||
} else if (networkAgent.networkCapabilities.hasTransport(
|
} else if (networkAgent.networkCapabilities.hasTransport(
|
||||||
NetworkCapabilities.TRANSPORT_WIFI)) {
|
NetworkCapabilities.TRANSPORT_WIFI)) {
|
||||||
timeout = Settings.Global.getInt(mContext.getContentResolver(),
|
timeout = Settings.Global.getInt(mContext.getContentResolver(),
|
||||||
Settings.Global.DATA_ACTIVITY_TIMEOUT_WIFI,
|
ConnectivitySettingsManager.DATA_ACTIVITY_TIMEOUT_WIFI,
|
||||||
15);
|
15);
|
||||||
type = NetworkCapabilities.TRANSPORT_WIFI;
|
type = NetworkCapabilities.TRANSPORT_WIFI;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -18,15 +18,15 @@ package com.android.server.connectivity;
|
|||||||
|
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
||||||
|
import static android.net.ConnectivitySettingsManager.DNS_RESOLVER_MAX_SAMPLES;
|
||||||
|
import static android.net.ConnectivitySettingsManager.DNS_RESOLVER_MIN_SAMPLES;
|
||||||
|
import static android.net.ConnectivitySettingsManager.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS;
|
||||||
|
import static android.net.ConnectivitySettingsManager.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT;
|
||||||
|
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_DEFAULT_MODE;
|
||||||
|
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE;
|
||||||
|
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER;
|
||||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE;
|
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE;
|
||||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS;
|
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS;
|
||||||
import static android.provider.Settings.Global.DNS_RESOLVER_MAX_SAMPLES;
|
|
||||||
import static android.provider.Settings.Global.DNS_RESOLVER_MIN_SAMPLES;
|
|
||||||
import static android.provider.Settings.Global.DNS_RESOLVER_SAMPLE_VALIDITY_SECONDS;
|
|
||||||
import static android.provider.Settings.Global.DNS_RESOLVER_SUCCESS_THRESHOLD_PERCENT;
|
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_DEFAULT_MODE;
|
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
|
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
|
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
|
|||||||
@@ -16,10 +16,10 @@
|
|||||||
|
|
||||||
package com.android.server.connectivity;
|
package com.android.server.connectivity;
|
||||||
|
|
||||||
import static android.provider.Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST;
|
import static android.net.ConnectivitySettingsManager.GLOBAL_HTTP_PROXY_EXCLUSION_LIST;
|
||||||
import static android.provider.Settings.Global.GLOBAL_HTTP_PROXY_HOST;
|
import static android.net.ConnectivitySettingsManager.GLOBAL_HTTP_PROXY_HOST;
|
||||||
import static android.provider.Settings.Global.GLOBAL_HTTP_PROXY_PAC;
|
import static android.net.ConnectivitySettingsManager.GLOBAL_HTTP_PROXY_PAC;
|
||||||
import static android.provider.Settings.Global.GLOBAL_HTTP_PROXY_PORT;
|
import static android.net.ConnectivitySettingsManager.GLOBAL_HTTP_PROXY_PORT;
|
||||||
import static android.provider.Settings.Global.HTTP_PROXY;
|
import static android.provider.Settings.Global.HTTP_PROXY;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
|||||||
@@ -21,10 +21,10 @@ import android.content.res.Resources
|
|||||||
import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_HANDOVER
|
import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_HANDOVER
|
||||||
import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_PERFORMANCE
|
import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_PERFORMANCE
|
||||||
import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_RELIABILITY
|
import android.net.ConnectivityManager.MULTIPATH_PREFERENCE_RELIABILITY
|
||||||
|
import android.net.ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI
|
||||||
|
import android.net.ConnectivitySettingsManager.NETWORK_METERED_MULTIPATH_PREFERENCE
|
||||||
import android.net.util.MultinetworkPolicyTracker.ActiveDataSubscriptionIdListener
|
import android.net.util.MultinetworkPolicyTracker.ActiveDataSubscriptionIdListener
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.provider.Settings.Global.NETWORK_AVOID_BAD_WIFI
|
|
||||||
import android.provider.Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE
|
|
||||||
import android.telephony.SubscriptionInfo
|
import android.telephony.SubscriptionInfo
|
||||||
import android.telephony.SubscriptionManager
|
import android.telephony.SubscriptionManager
|
||||||
import android.telephony.TelephonyManager
|
import android.telephony.TelephonyManager
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ import android.net.ConnectivityManager.NetworkCallback;
|
|||||||
import android.net.ConnectivityManager.PacketKeepalive;
|
import android.net.ConnectivityManager.PacketKeepalive;
|
||||||
import android.net.ConnectivityManager.PacketKeepaliveCallback;
|
import android.net.ConnectivityManager.PacketKeepaliveCallback;
|
||||||
import android.net.ConnectivityManager.TooManyRequestsException;
|
import android.net.ConnectivityManager.TooManyRequestsException;
|
||||||
|
import android.net.ConnectivitySettingsManager;
|
||||||
import android.net.ConnectivityThread;
|
import android.net.ConnectivityThread;
|
||||||
import android.net.DataStallReportParcelable;
|
import android.net.DataStallReportParcelable;
|
||||||
import android.net.EthernetManager;
|
import android.net.EthernetManager;
|
||||||
@@ -1553,7 +1554,7 @@ public class ConnectivityServiceTest {
|
|||||||
mQosCallbackTracker = mock(QosCallbackTracker.class);
|
mQosCallbackTracker = mock(QosCallbackTracker.class);
|
||||||
|
|
||||||
// Ensure that the default setting for Captive Portals is used for most tests
|
// Ensure that the default setting for Captive Portals is used for most tests
|
||||||
setCaptivePortalMode(Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
|
setCaptivePortalMode(ConnectivitySettingsManager.CAPTIVE_PORTAL_MODE_PROMPT);
|
||||||
setAlwaysOnNetworks(false);
|
setAlwaysOnNetworks(false);
|
||||||
setPrivateDnsSettings(PRIVATE_DNS_MODE_OFF, "ignored.example.com");
|
setPrivateDnsSettings(PRIVATE_DNS_MODE_OFF, "ignored.example.com");
|
||||||
}
|
}
|
||||||
@@ -3406,7 +3407,7 @@ public class ConnectivityServiceTest {
|
|||||||
.addCapability(NET_CAPABILITY_VALIDATED).build();
|
.addCapability(NET_CAPABILITY_VALIDATED).build();
|
||||||
mCm.registerNetworkCallback(validatedRequest, validatedCallback);
|
mCm.registerNetworkCallback(validatedRequest, validatedCallback);
|
||||||
|
|
||||||
setCaptivePortalMode(Settings.Global.CAPTIVE_PORTAL_MODE_AVOID);
|
setCaptivePortalMode(ConnectivitySettingsManager.CAPTIVE_PORTAL_MODE_AVOID);
|
||||||
// Bring up a network with a captive portal.
|
// Bring up a network with a captive portal.
|
||||||
// Expect it to fail to connect and not result in any callbacks.
|
// Expect it to fail to connect and not result in any callbacks.
|
||||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||||
@@ -4056,20 +4057,21 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
private void setCaptivePortalMode(int mode) {
|
private void setCaptivePortalMode(int mode) {
|
||||||
ContentResolver cr = mServiceContext.getContentResolver();
|
ContentResolver cr = mServiceContext.getContentResolver();
|
||||||
Settings.Global.putInt(cr, Settings.Global.CAPTIVE_PORTAL_MODE, mode);
|
Settings.Global.putInt(cr, ConnectivitySettingsManager.CAPTIVE_PORTAL_MODE, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setAlwaysOnNetworks(boolean enable) {
|
private void setAlwaysOnNetworks(boolean enable) {
|
||||||
ContentResolver cr = mServiceContext.getContentResolver();
|
ContentResolver cr = mServiceContext.getContentResolver();
|
||||||
Settings.Global.putInt(cr, Settings.Global.MOBILE_DATA_ALWAYS_ON, enable ? 1 : 0);
|
Settings.Global.putInt(cr, ConnectivitySettingsManager.MOBILE_DATA_ALWAYS_ON,
|
||||||
|
enable ? 1 : 0);
|
||||||
mService.updateAlwaysOnNetworks();
|
mService.updateAlwaysOnNetworks();
|
||||||
waitForIdle();
|
waitForIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setPrivateDnsSettings(String mode, String specifier) {
|
private void setPrivateDnsSettings(String mode, String specifier) {
|
||||||
final ContentResolver cr = mServiceContext.getContentResolver();
|
final ContentResolver cr = mServiceContext.getContentResolver();
|
||||||
Settings.Global.putString(cr, Settings.Global.PRIVATE_DNS_MODE, mode);
|
Settings.Global.putString(cr, ConnectivitySettingsManager.PRIVATE_DNS_MODE, mode);
|
||||||
Settings.Global.putString(cr, Settings.Global.PRIVATE_DNS_SPECIFIER, specifier);
|
Settings.Global.putString(cr, ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER, specifier);
|
||||||
mService.updatePrivateDnsSettings();
|
mService.updatePrivateDnsSettings();
|
||||||
waitForIdle();
|
waitForIdle();
|
||||||
}
|
}
|
||||||
@@ -4307,7 +4309,7 @@ public class ConnectivityServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testAvoidBadWifiSetting() throws Exception {
|
public void testAvoidBadWifiSetting() throws Exception {
|
||||||
final ContentResolver cr = mServiceContext.getContentResolver();
|
final ContentResolver cr = mServiceContext.getContentResolver();
|
||||||
final String settingName = Settings.Global.NETWORK_AVOID_BAD_WIFI;
|
final String settingName = ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI;
|
||||||
|
|
||||||
mPolicyTracker.mConfigRestrictsAvoidBadWifi = false;
|
mPolicyTracker.mConfigRestrictsAvoidBadWifi = false;
|
||||||
String[] values = new String[] {null, "0", "1"};
|
String[] values = new String[] {null, "0", "1"};
|
||||||
@@ -4364,7 +4366,7 @@ public class ConnectivityServiceTest {
|
|||||||
TestNetworkCallback validatedWifiCallback = new TestNetworkCallback();
|
TestNetworkCallback validatedWifiCallback = new TestNetworkCallback();
|
||||||
mCm.registerNetworkCallback(validatedWifiRequest, validatedWifiCallback);
|
mCm.registerNetworkCallback(validatedWifiRequest, validatedWifiCallback);
|
||||||
|
|
||||||
Settings.Global.putInt(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, 0);
|
Settings.Global.putInt(cr, ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI, 0);
|
||||||
mPolicyTracker.reevaluate();
|
mPolicyTracker.reevaluate();
|
||||||
|
|
||||||
// Bring up validated cell.
|
// Bring up validated cell.
|
||||||
@@ -4432,7 +4434,7 @@ public class ConnectivityServiceTest {
|
|||||||
validatedWifiCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
validatedWifiCallback.expectCallback(CallbackEntry.LOST, mWiFiNetworkAgent);
|
||||||
|
|
||||||
// Simulate the user selecting "switch" and checking the don't ask again checkbox.
|
// Simulate the user selecting "switch" and checking the don't ask again checkbox.
|
||||||
Settings.Global.putInt(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, 1);
|
Settings.Global.putInt(cr, ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI, 1);
|
||||||
mPolicyTracker.reevaluate();
|
mPolicyTracker.reevaluate();
|
||||||
|
|
||||||
// We now switch to cell.
|
// We now switch to cell.
|
||||||
@@ -4445,11 +4447,11 @@ public class ConnectivityServiceTest {
|
|||||||
|
|
||||||
// Simulate the user turning the cellular fallback setting off and then on.
|
// Simulate the user turning the cellular fallback setting off and then on.
|
||||||
// We switch to wifi and then to cell.
|
// We switch to wifi and then to cell.
|
||||||
Settings.Global.putString(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, null);
|
Settings.Global.putString(cr, ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI, null);
|
||||||
mPolicyTracker.reevaluate();
|
mPolicyTracker.reevaluate();
|
||||||
defaultCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
defaultCallback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||||
assertEquals(mCm.getActiveNetwork(), wifiNetwork);
|
assertEquals(mCm.getActiveNetwork(), wifiNetwork);
|
||||||
Settings.Global.putInt(cr, Settings.Global.NETWORK_AVOID_BAD_WIFI, 1);
|
Settings.Global.putInt(cr, ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI, 1);
|
||||||
mPolicyTracker.reevaluate();
|
mPolicyTracker.reevaluate();
|
||||||
defaultCallback.expectAvailableCallbacksValidated(mCellNetworkAgent);
|
defaultCallback.expectAvailableCallbacksValidated(mCellNetworkAgent);
|
||||||
assertEquals(mCm.getActiveNetwork(), cellNetwork);
|
assertEquals(mCm.getActiveNetwork(), cellNetwork);
|
||||||
@@ -4468,7 +4470,7 @@ public class ConnectivityServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testMeteredMultipathPreferenceSetting() throws Exception {
|
public void testMeteredMultipathPreferenceSetting() throws Exception {
|
||||||
final ContentResolver cr = mServiceContext.getContentResolver();
|
final ContentResolver cr = mServiceContext.getContentResolver();
|
||||||
final String settingName = Settings.Global.NETWORK_METERED_MULTIPATH_PREFERENCE;
|
final String settingName = ConnectivitySettingsManager.NETWORK_METERED_MULTIPATH_PREFERENCE;
|
||||||
|
|
||||||
for (int config : Arrays.asList(0, 3, 2)) {
|
for (int config : Arrays.asList(0, 3, 2)) {
|
||||||
for (String setting: Arrays.asList(null, "0", "2", "1")) {
|
for (String setting: Arrays.asList(null, "0", "2", "1")) {
|
||||||
|
|||||||
@@ -18,15 +18,15 @@ package com.android.server.connectivity;
|
|||||||
|
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
||||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
||||||
|
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_DEFAULT_MODE;
|
||||||
|
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_MODE;
|
||||||
|
import static android.net.ConnectivitySettingsManager.PRIVATE_DNS_SPECIFIER;
|
||||||
import static android.net.NetworkCapabilities.MAX_TRANSPORT;
|
import static android.net.NetworkCapabilities.MAX_TRANSPORT;
|
||||||
import static android.net.NetworkCapabilities.MIN_TRANSPORT;
|
import static android.net.NetworkCapabilities.MIN_TRANSPORT;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
||||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE;
|
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_FAILURE;
|
||||||
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS;
|
import static android.net.resolv.aidl.IDnsResolverUnsolicitedEventListener.VALIDATION_RESULT_SUCCESS;
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_DEFAULT_MODE;
|
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
|
|
||||||
import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
|
|
||||||
|
|
||||||
import static com.android.testutils.MiscAsserts.assertContainsExactly;
|
import static com.android.testutils.MiscAsserts.assertContainsExactly;
|
||||||
import static com.android.testutils.MiscAsserts.assertContainsStringsExactly;
|
import static com.android.testutils.MiscAsserts.assertContainsStringsExactly;
|
||||||
|
|||||||
Reference in New Issue
Block a user