diff options
Diffstat (limited to 'core/java/android/os/PowerManager.java')
| -rw-r--r-- | core/java/android/os/PowerManager.java | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 2f8e30e42b7e..82b04a661b54 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -20,6 +20,7 @@ import android.Manifest.permission; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SystemApi; @@ -552,6 +553,13 @@ public final class PowerManager { public static final String REBOOT_SAFE_MODE = "safemode"; /** + * The 'reason' value used for rebooting userspace. + * @hide + */ + @SystemApi + public static final String REBOOT_USERSPACE = "userspace"; + + /** * The 'reason' value used when rebooting the device without turning on the screen. * @hide */ @@ -1326,6 +1334,14 @@ public final class PowerManager { } /** + * Returns {@code true} if this device supports rebooting userspace. + */ + // TODO(b/138605180): add link to documentation once it's ready. + public boolean isRebootingUserspaceSupported() { + return SystemProperties.getBoolean("ro.init.userspace_reboot.is_supported", false); + } + + /** * Reboot the device. Will not return if the reboot is successful. * <p> * Requires the {@link android.Manifest.permission#REBOOT} permission. @@ -1333,8 +1349,14 @@ public final class PowerManager { * * @param reason code to pass to the kernel (e.g., "recovery") to * request special boot modes, or null. + * @throws UnsupportedOperationException if userspace reboot was requested on a device that + * doesn't support it. */ - public void reboot(String reason) { + public void reboot(@Nullable String reason) { + if (REBOOT_USERSPACE.equals(reason) && !isRebootingUserspaceSupported()) { + throw new UnsupportedOperationException( + "Attempted userspace reboot on a device that doesn't support it"); + } try { mService.reboot(false, reason, true); } catch (RemoteException e) { |
