diff --git a/api/current.txt b/api/current.txt index e2b1556e49c27..6687539e8e6ca 100644 --- a/api/current.txt +++ b/api/current.txt @@ -28415,6 +28415,7 @@ package android.os { field public static final java.lang.String DISALLOW_CONFIG_WIFI = "no_config_wifi"; field public static final java.lang.String DISALLOW_CREATE_WINDOWS = "no_create_windows"; field public static final java.lang.String DISALLOW_CROSS_PROFILE_COPY_PASTE = "no_cross_profile_copy_paste"; + field public static final java.lang.String DISALLOW_DATA_ROAMING = "no_data_roaming"; field public static final java.lang.String DISALLOW_DEBUGGING_FEATURES = "no_debugging_features"; field public static final java.lang.String DISALLOW_FACTORY_RESET = "no_factory_reset"; field public static final java.lang.String DISALLOW_FUN = "no_fun"; diff --git a/api/system-current.txt b/api/system-current.txt index d50a6c908c2a1..c296388533440 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -30418,6 +30418,7 @@ package android.os { field public static final java.lang.String DISALLOW_CONFIG_WIFI = "no_config_wifi"; field public static final java.lang.String DISALLOW_CREATE_WINDOWS = "no_create_windows"; field public static final java.lang.String DISALLOW_CROSS_PROFILE_COPY_PASTE = "no_cross_profile_copy_paste"; + field public static final java.lang.String DISALLOW_DATA_ROAMING = "no_data_roaming"; field public static final java.lang.String DISALLOW_DEBUGGING_FEATURES = "no_debugging_features"; field public static final java.lang.String DISALLOW_FACTORY_RESET = "no_factory_reset"; field public static final java.lang.String DISALLOW_FUN = "no_fun"; diff --git a/api/test-current.txt b/api/test-current.txt index 80f250a8c1ebc..ebb7337037573 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -28424,6 +28424,7 @@ package android.os { field public static final java.lang.String DISALLOW_CONFIG_WIFI = "no_config_wifi"; field public static final java.lang.String DISALLOW_CREATE_WINDOWS = "no_create_windows"; field public static final java.lang.String DISALLOW_CROSS_PROFILE_COPY_PASTE = "no_cross_profile_copy_paste"; + field public static final java.lang.String DISALLOW_DATA_ROAMING = "no_data_roaming"; field public static final java.lang.String DISALLOW_DEBUGGING_FEATURES = "no_debugging_features"; field public static final java.lang.String DISALLOW_FACTORY_RESET = "no_factory_reset"; field public static final java.lang.String DISALLOW_FUN = "no_fun"; diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 887dd17ebae99..d1b3f590b024e 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -517,6 +517,16 @@ public class UserManager { */ public static final String DISALLOW_CAMERA = "no_camera"; + /** + * Specifies if a user is not allowed to use cellular data when roaming. This can only be set by + * device owners. The default value is false. + * + * @see DevicePolicyManager#addUserRestriction(ComponentName, String) + * @see DevicePolicyManager#clearUserRestriction(ComponentName, String) + * @see #getUserRestrictions() + */ + public static final String DISALLOW_DATA_ROAMING = "no_data_roaming"; + /** * Allows apps in the parent profile to handle web links from the managed profile. * diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index bcb459a174a01..1896bbbe0a21a 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -1010,6 +1010,11 @@ public class SettingsProvider extends ContentProvider { break; default: + if (setting.startsWith(Settings.Global.DATA_ROAMING)) { + if ("0".equals(value)) return false; + restriction = UserManager.DISALLOW_DATA_ROAMING; + break; + } return false; } diff --git a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java index 9bbc3c10213c2..f0ed7907770d8 100644 --- a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java +++ b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java @@ -33,6 +33,8 @@ import android.os.RemoteException; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; import android.util.Log; import org.xmlpull.v1.XmlPullParser; @@ -40,10 +42,11 @@ import org.xmlpull.v1.XmlSerializer; import java.io.IOException; import java.io.PrintWriter; +import java.util.List; import java.util.Set; /** - * Utility methods for uesr restrictions. + * Utility methods for user restrictions. * *

See {@link UserManagerService} for the method suffixes. */ @@ -88,7 +91,8 @@ public class UserRestrictionsUtils { UserManager.ALLOW_PARENT_PROFILE_APP_LINKING, UserManager.DISALLOW_RECORD_AUDIO, UserManager.DISALLOW_CAMERA, - UserManager.DISALLOW_RUN_IN_BACKGROUND + UserManager.DISALLOW_RUN_IN_BACKGROUND, + UserManager.DISALLOW_DATA_ROAMING ); /** @@ -113,7 +117,8 @@ public class UserRestrictionsUtils { UserManager.DISALLOW_SMS, UserManager.DISALLOW_FUN, UserManager.DISALLOW_SAFE_BOOT, - UserManager.DISALLOW_CREATE_WINDOWS + UserManager.DISALLOW_CREATE_WINDOWS, + UserManager.DISALLOW_DATA_ROAMING ); /** @@ -315,6 +320,27 @@ public class UserRestrictionsUtils { .WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0, userId); } break; + case UserManager.DISALLOW_DATA_ROAMING: + if (newValue) { + // DISALLOW_DATA_ROAMING user restriction is set. + + // Multi sim device. + SubscriptionManager subscriptionManager = new SubscriptionManager(context); + final List subscriptionInfoList = + subscriptionManager.getActiveSubscriptionInfoList(); + if (subscriptionInfoList != null) { + for (SubscriptionInfo subInfo : subscriptionInfoList) { + android.provider.Settings.Global.putStringForUser(cr, + android.provider.Settings.Global.DATA_ROAMING + + subInfo.getSubscriptionId(), "0", userId); + } + } + + // Single sim device. + android.provider.Settings.Global.putStringForUser(cr, + android.provider.Settings.Global.DATA_ROAMING, "0", userId); + } + break; case UserManager.DISALLOW_SHARE_LOCATION: if (newValue) { android.provider.Settings.Secure.putIntForUser(cr,