diff options
-rw-r--r-- | api/current.xml | 13 | ||||
-rw-r--r-- | core/java/android/os/IPowerManager.aidl | 1 | ||||
-rw-r--r-- | core/java/android/os/PowerManager.java | 17 | ||||
-rw-r--r-- | core/res/AndroidManifest.xml | 4 | ||||
-rw-r--r-- | services/java/com/android/server/PowerManagerService.java | 15 |
5 files changed, 47 insertions, 3 deletions
diff --git a/api/current.xml b/api/current.xml index 3d4c492..bf6d64f 100644 --- a/api/current.xml +++ b/api/current.xml @@ -106250,6 +106250,19 @@ <parameter name="tag" type="java.lang.String"> </parameter> </method> +<method name="reboot" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="reason" type="java.lang.String"> +</parameter> +</method> <method name="userActivity" return="void" abstract="false" diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index b9dc860..0229864 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -32,6 +32,7 @@ interface IPowerManager void preventScreenOn(boolean prevent); void setScreenBrightnessOverride(int brightness); boolean isScreenOn(); + void reboot(String reason); // sets the brightness of the backlights (screen, keyboard, button) 0-255 void setBacklightBrightness(int brightness); diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 4b3b6f6..ffdb27c 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -465,6 +465,22 @@ public class PowerManager } } + /** + * Reboot the device. Will not return if the reboot is + * successful. Requires the {@link android.Manifest#REBOOT} + * permission. + * + * @param reason code to pass to the kernel (e.g., "recovery") to + * request special boot modes, or null. + */ + public void reboot(String reason) + { + try { + mService.reboot(reason); + } catch (RemoteException e) { + } + } + private PowerManager() { } @@ -488,4 +504,3 @@ public class PowerManager IPowerManager mService; Handler mHandler; } - diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 22716b8..8047436 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -943,7 +943,7 @@ <permission android:name="android.permission.DELETE_CACHE_FILES" android:label="@string/permlab_deleteCacheFiles" android:description="@string/permdesc_deleteCacheFiles" - android:protectionLevel="signature" /> + android:protectionLevel="signatureOrSystem" /> <!-- Allows an application to delete packages. --> <permission android:name="android.permission.DELETE_PACKAGES" @@ -981,7 +981,7 @@ <permission android:name="android.permission.REBOOT" android:label="@string/permlab_reboot" android:description="@string/permdesc_reboot" - android:protectionLevel="signature" /> + android:protectionLevel="signatureOrSystem" /> <!-- Allows low-level access to power management --> <permission android:name="android.permission.DEVICE_POWER" diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java index 444c8de..0e22f86 100644 --- a/services/java/com/android/server/PowerManagerService.java +++ b/services/java/com/android/server/PowerManagerService.java @@ -59,6 +59,7 @@ import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import static android.provider.Settings.System.STAY_ON_WHILE_PLUGGED_IN; import java.io.FileDescriptor; +import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; @@ -2091,6 +2092,20 @@ class PowerManagerService extends IPowerManager.Stub } /** + * Reboot the device immediately, passing 'reason' (may be null) + * to the underlying __reboot system call. Should not return. + */ + public void reboot(String reason) + { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null); + try { + Power.reboot(reason); + } catch (IOException e) { + Log.e(TAG, "reboot failed", e); + } + } + + /** * Returns the time the screen has been on since boot, in millis. * @return screen on time */ |