OSDN Git Service

Add DO policy to disable safe boot mode.
authorBenjamin Franz <bfranz@google.com>
Thu, 5 Mar 2015 18:33:51 +0000 (18:33 +0000)
committerBenjamin Franz <bfranz@google.com>
Thu, 19 Mar 2015 09:19:18 +0000 (09:19 +0000)
Bug: 19615843
Change-Id: I14dbe911995ec216c57bd285d6b7b04c9684591a

api/current.txt
api/system-current.txt
core/java/android/os/UserManager.java
services/core/java/com/android/server/pm/UserManagerService.java
services/core/java/com/android/server/policy/GlobalActions.java
services/core/java/com/android/server/power/ShutdownThread.java
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java

index d333277..6d311d5 100644 (file)
@@ -23086,6 +23086,7 @@ package android.os {
     field public static final java.lang.String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam";
     field public static final java.lang.String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls";
     field public static final java.lang.String DISALLOW_REMOVE_USER = "no_remove_user";
+    field public static final java.lang.String DISALLOW_SAFE_BOOT = "no_safe_boot";
     field public static final java.lang.String DISALLOW_SHARE_LOCATION = "no_share_location";
     field public static final java.lang.String DISALLOW_SMS = "no_sms";
     field public static final java.lang.String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps";
index c87bb95..1237267 100644 (file)
@@ -24881,6 +24881,7 @@ package android.os {
     field public static final java.lang.String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam";
     field public static final java.lang.String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls";
     field public static final java.lang.String DISALLOW_REMOVE_USER = "no_remove_user";
+    field public static final java.lang.String DISALLOW_SAFE_BOOT = "no_safe_boot";
     field public static final java.lang.String DISALLOW_SHARE_LOCATION = "no_share_location";
     field public static final java.lang.String DISALLOW_SMS = "no_sms";
     field public static final java.lang.String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps";
index 706e0d0..3601a1c 100644 (file)
@@ -400,6 +400,18 @@ public class UserManager {
     public static final String DISALLOW_WALLPAPER = "no_wallpaper";
 
     /**
+     * Specifies if the user is not allowed to reboot the device into safe boot mode.
+     * This can only be set by device owners and profile owners on the primary user.
+     * The default value is <code>false</code>.
+     *
+     * <p/>Key for user restrictions.
+     * <p/>Type: Boolean
+     * @see #setUserRestrictions(Bundle)
+     * @see #getUserRestrictions()
+     */
+    public static final String DISALLOW_SAFE_BOOT = "no_safe_boot";
+
+    /**
      * Application restriction key that is used to indicate the pending arrival
      * of real restrictions for the app.
      *
index e4f5e7d..26ecb72 100644 (file)
@@ -918,6 +918,7 @@ public class UserManagerService extends IUserManager.Stub {
         writeBoolean(serializer, restrictions, UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE);
         writeBoolean(serializer, restrictions, UserManager.DISALLOW_OUTGOING_BEAM);
         writeBoolean(serializer, restrictions, UserManager.DISALLOW_WALLPAPER);
+        writeBoolean(serializer, restrictions, UserManager.DISALLOW_SAFE_BOOT);
         serializer.endTag(null, TAG_RESTRICTIONS);
     }
 
@@ -1065,6 +1066,7 @@ public class UserManagerService extends IUserManager.Stub {
         readBoolean(parser, restrictions, UserManager.DISALLOW_CROSS_PROFILE_COPY_PASTE);
         readBoolean(parser, restrictions, UserManager.DISALLOW_OUTGOING_BEAM);
         readBoolean(parser, restrictions, UserManager.DISALLOW_WALLPAPER);
+        readBoolean(parser, restrictions, UserManager.DISALLOW_SAFE_BOOT);
     }
 
     private void readBoolean(XmlPullParser parser, Bundle restrictions,
index 6bbcdcd..b431b33 100644 (file)
@@ -342,8 +342,12 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
 
         @Override
         public boolean onLongPress() {
-            mWindowManagerFuncs.rebootSafeMode(true);
-            return true;
+            UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+            if (!um.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
+                mWindowManagerFuncs.rebootSafeMode(true);
+                return true;
+            }
+            return false;
         }
 
         @Override
index da11387..1e0185d 100644 (file)
@@ -39,6 +39,7 @@ import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.os.Vibrator;
 import android.os.SystemVibrator;
 import android.os.storage.IMountService;
@@ -202,6 +203,11 @@ public final class ShutdownThread extends Thread {
      * @param confirm true if user confirmation is needed before shutting down.
      */
     public static void rebootSafeMode(final Context context, boolean confirm) {
+        UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        if (um.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
+            return;
+        }
+
         mReboot = true;
         mRebootSafeMode = true;
         mRebootReason = null;
index 67d7af1..663c919 100644 (file)
@@ -179,6 +179,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
         DEVICE_OWNER_USER_RESTRICTIONS.add(UserManager.DISALLOW_UNMUTE_MICROPHONE);
         DEVICE_OWNER_USER_RESTRICTIONS.add(UserManager.DISALLOW_ADJUST_VOLUME);
         DEVICE_OWNER_USER_RESTRICTIONS.add(UserManager.DISALLOW_SMS);
+        DEVICE_OWNER_USER_RESTRICTIONS.add(UserManager.DISALLOW_SAFE_BOOT);
     }
 
     // The following user restrictions cannot be changed by any active admin, including device