Merge "Introduce static @hide PowerManager.isRebootingUserspaceSupportedImpl()" am: d8f9951f21
Change-Id: I35e5111b5db8be175c85032a90c82336ff9373be
This commit is contained in:
@@ -24,6 +24,7 @@ import android.os.RemoteException;
|
|||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.os.SystemProperties;
|
import android.os.SystemProperties;
|
||||||
|
import android.sysprop.InitProperties;
|
||||||
|
|
||||||
public class PowerCommand extends Svc.Command {
|
public class PowerCommand extends Svc.Command {
|
||||||
private static final int FORCE_SUSPEND_DELAY_DEFAULT_MILLIS = 0;
|
private static final int FORCE_SUSPEND_DELAY_DEFAULT_MILLIS = 0;
|
||||||
@@ -103,6 +104,8 @@ public class PowerCommand extends Svc.Command {
|
|||||||
pm.reboot(false, mode, true);
|
pm.reboot(false, mode, true);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
maybeLogRemoteException("Failed to reboot.");
|
maybeLogRemoteException("Failed to reboot.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Failed to reboot: " + e.getMessage());
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if ("shutdown".equals(args[1])) {
|
} else if ("shutdown".equals(args[1])) {
|
||||||
@@ -138,7 +141,9 @@ public class PowerCommand extends Svc.Command {
|
|||||||
// if it is already in shutdown flow.
|
// if it is already in shutdown flow.
|
||||||
private void maybeLogRemoteException(String msg) {
|
private void maybeLogRemoteException(String msg) {
|
||||||
String powerProp = SystemProperties.get("sys.powerctl");
|
String powerProp = SystemProperties.get("sys.powerctl");
|
||||||
if (powerProp.isEmpty()) {
|
// Also check if userspace reboot is ongoing, since in case of userspace reboot value of the
|
||||||
|
// sys.powerctl property will be reset.
|
||||||
|
if (powerProp.isEmpty() && !InitProperties.userspace_reboot_in_progress().orElse(false)) {
|
||||||
System.err.println(msg);
|
System.err.println(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1332,12 +1332,25 @@ public final class PowerManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if this device supports rebooting userspace.
|
||||||
|
*
|
||||||
|
* <p>This method exists solely for the sake of re-using same logic between {@code PowerManager}
|
||||||
|
* and {@code PowerManagerService}.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static boolean isRebootingUserspaceSupportedImpl() {
|
||||||
|
return InitProperties.is_userspace_reboot_supported().orElse(false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns {@code true} if this device supports rebooting userspace.
|
* Returns {@code true} if this device supports rebooting userspace.
|
||||||
*/
|
*/
|
||||||
// TODO(b/138605180): add link to documentation once it's ready.
|
// TODO(b/138605180): add link to documentation once it's ready.
|
||||||
public boolean isRebootingUserspaceSupported() {
|
public boolean isRebootingUserspaceSupported() {
|
||||||
return InitProperties.is_userspace_reboot_supported().orElse(false);
|
return isRebootingUserspaceSupportedImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2843,6 +2843,10 @@ public final class PowerManagerService extends SystemService
|
|||||||
private void shutdownOrRebootInternal(final @HaltMode int haltMode, final boolean confirm,
|
private void shutdownOrRebootInternal(final @HaltMode int haltMode, final boolean confirm,
|
||||||
@Nullable final String reason, boolean wait) {
|
@Nullable final String reason, boolean wait) {
|
||||||
if (PowerManager.REBOOT_USERSPACE.equals(reason)) {
|
if (PowerManager.REBOOT_USERSPACE.equals(reason)) {
|
||||||
|
if (!PowerManager.isRebootingUserspaceSupportedImpl()) {
|
||||||
|
throw new UnsupportedOperationException(
|
||||||
|
"Attempted userspace reboot on a device that doesn't support it");
|
||||||
|
}
|
||||||
UserspaceRebootLogger.noteUserspaceRebootWasRequested();
|
UserspaceRebootLogger.noteUserspaceRebootWasRequested();
|
||||||
}
|
}
|
||||||
if (mHandler == null || !mSystemReady) {
|
if (mHandler == null || !mSystemReady) {
|
||||||
|
|||||||
Reference in New Issue
Block a user