summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorNikita Ioffe <ioffe@google.com>2019-12-19 16:11:37 -0800
committerandroid-build-merger <android-build-merger@google.com>2019-12-19 16:11:37 -0800
commitd1c0e074c03555719ebbda157043ea977daf363d (patch)
treeb96d03fbf768ebed1388a26f63dae566dbbc9584 /core/java/android
parent9ee90ab48932de4f7ddc08246a9b066059b82c89 (diff)
parent670352e807f37c3123b9f2f41b8ae96911d906c5 (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.java24
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) {