NetworkPolicyManagerService: Allow data saver to be on by default.
This value is read from the global settings provider, and can be
configured via an overlay.
Bug: 63112872
Test: NetworkPolicyManagerServiceTest
Change-Id: If55ea08df1dd8440189f9b46a5606118de99c930
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index ffa38d4..cda7f59 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -7744,6 +7744,16 @@
*/
public static final String CDMA_SUBSCRIPTION_MODE = "subscription_mode";
+ /**
+ * The default value for whether background data is enabled or not.
+ *
+ * Used by {@code NetworkPolicyManagerService}.
+ *
+ * @hide
+ */
+ public static final String DEFAULT_RESTRICT_BACKGROUND_DATA =
+ "default_restrict_background_data";
+
/** Inactivity timeout to track mobile data activity.
*
* If set to a positive integer, it indicates the inactivity timeout value in seconds to
diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
index 0001d7a..949fd16 100644
--- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java
+++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java
@@ -158,6 +158,7 @@
Settings.Global.DEBUG_VIEW_ATTRIBUTES,
Settings.Global.DEFAULT_DNS_SERVER,
Settings.Global.DEFAULT_INSTALL_LOCATION,
+ Settings.Global.DEFAULT_RESTRICT_BACKGROUND_DATA,
Settings.Global.DESK_DOCK_SOUND,
Settings.Global.DESK_UNDOCK_SOUND,
Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT,
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index e9dadc5..4007cc9 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -187,4 +187,7 @@
<!-- default setting for Settings.System.END_BUTTON_BEHAVIOR : END_BUTTON_BEHAVIOR_SLEEP -->
<integer name="def_end_button_behavior">0x2</integer>
+
+ <!-- default setting for Settings.Global.DEFAULT_RESTRICT_BACKGROUND_DATA -->
+ <bool name="def_restrict_background_data">false</bool>
</resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 1bd58ad..15e6e45 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -32,8 +32,6 @@
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.database.Cursor;
@@ -61,7 +59,7 @@
import android.os.UserManager;
import android.os.UserManagerInternal;
import android.provider.Settings;
-import android.service.notification.NotificationListenerService;
+import android.provider.Settings.Global;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -82,7 +80,6 @@
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
-import java.nio.charset.StandardCharsets;
import java.nio.ByteBuffer;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@@ -2895,7 +2892,7 @@
}
private final class UpgradeController {
- private static final int SETTINGS_VERSION = 146;
+ private static final int SETTINGS_VERSION = 147;
private final int mUserId;
@@ -3422,6 +3419,23 @@
currentVersion = 146;
}
+ if (currentVersion == 146) {
+ // Version 146: Set the default value for DEFAULT_RESTRICT_BACKGROUND_DATA.
+ if (userId == UserHandle.USER_SYSTEM) {
+ final SettingsState globalSettings = getGlobalSettingsLocked();
+ final Setting currentSetting = globalSettings.getSettingLocked(
+ Global.DEFAULT_RESTRICT_BACKGROUND_DATA);
+ if (currentSetting.isNull()) {
+ globalSettings.insertSettingLocked(
+ Global.DEFAULT_RESTRICT_BACKGROUND_DATA,
+ getContext().getResources().getBoolean(
+ R.bool.def_restrict_background_data) ? "1" : "0",
+ null, true, SettingsState.SYSTEM_PACKAGE_NAME);
+ }
+ }
+ currentVersion = 147;
+ }
+
// vXXX: Add new settings above this point.
if (currentVersion != newVersion) {
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 9b032e2..38f1c07 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -149,6 +149,7 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
+import android.provider.Settings.Global;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
@@ -1896,7 +1897,7 @@
} catch (FileNotFoundException e) {
// missing policy is okay, probably first boot
- upgradeLegacyBackgroundDataUL();
+ upgradeDefaultBackgroundDataUL();
} catch (IOException e) {
Log.wtf(TAG, "problem reading network policy", e);
} catch (XmlPullParserException e) {
@@ -1910,16 +1911,22 @@
* Upgrade legacy background data flags, notifying listeners of one last
* change to always-true.
*/
- private void upgradeLegacyBackgroundDataUL() {
- mRestrictBackground = Settings.Secure.getInt(
- mContext.getContentResolver(), Settings.Secure.BACKGROUND_DATA, 1) != 1;
+ private void upgradeDefaultBackgroundDataUL() {
+ // This method is only called when we're unable to find the network policy flag, which
+ // usually happens on first boot of a new device and not one that has received an OTA.
- // kick off one last broadcast if restricted
- if (mRestrictBackground) {
- final Intent broadcast = new Intent(
- ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
- mContext.sendBroadcastAsUser(broadcast, UserHandle.ALL);
- }
+ // Seed from the default value configured for this device.
+ mRestrictBackground = Settings.Global.getInt(
+ mContext.getContentResolver(), Global.DEFAULT_RESTRICT_BACKGROUND_DATA, 0) == 1;
+
+ // NOTE: We used to read the legacy setting here :
+ //
+ // final int legacyFlagValue = Settings.Secure.getInt(
+ // mContext.getContentResolver(), Settings.Secure.BACKGROUND_DATA, ..);
+ //
+ // This is no longer necessary because we will never upgrade directly from Gingerbread
+ // to O+. Devices upgrading from ICS onwards to O will have a netpolicy.xml file that
+ // contains the correct value that we will continue to use.
}
/**