diff options
| author | Nikita Ioffe <ioffe@google.com> | 2019-12-19 16:11:37 -0800 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2019-12-19 16:11:37 -0800 |
| commit | d1c0e074c03555719ebbda157043ea977daf363d (patch) | |
| tree | b96d03fbf768ebed1388a26f63dae566dbbc9584 /core/java/android | |
| parent | 9ee90ab48932de4f7ddc08246a9b066059b82c89 (diff) | |
| parent | 670352e807f37c3123b9f2f41b8ae96911d906c5 (diff) | |
Merge "Add an API to tell whenever device supports userspace reboot"
am: 670352e807
Change-Id: I6706acb0d2d396b1870813e692c3124da92e4b7f
Diffstat (limited to 'core/java/android')
| -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 ab4d424ac053..c618dbc2b551 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; @@ -605,6 +606,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 */ @@ -1383,6 +1391,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. @@ -1390,8 +1406,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) { |
