diff options
4 files changed, 44 insertions, 4 deletions
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 960c9f5cf22c..3726f47093b9 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -443,6 +443,20 @@ public final class PowerManager { public static final String SHUTDOWN_USER_REQUESTED = "userrequested"; /** + * The value to pass as the 'reason' argument to android_reboot() when battery temperature + * is too high. + * @hide + */ + public static final String SHUTDOWN_BATTERY_THERMAL_STATE = "thermal,battery"; + + /** + * The value to pass as the 'reason' argument to android_reboot() when device is running + * critically low on battery. + * @hide + */ + public static final String SHUTDOWN_LOW_BATTERY = "battery"; + + /** * @hide */ @Retention(RetentionPolicy.SOURCE) @@ -451,7 +465,9 @@ public final class PowerManager { SHUTDOWN_REASON_SHUTDOWN, SHUTDOWN_REASON_REBOOT, SHUTDOWN_REASON_USER_REQUESTED, - SHUTDOWN_REASON_THERMAL_SHUTDOWN + SHUTDOWN_REASON_THERMAL_SHUTDOWN, + SHUTDOWN_REASON_LOW_BATTERY, + SHUTDOWN_REASON_BATTERY_THERMAL }) public @interface ShutdownReason {} @@ -485,6 +501,18 @@ public final class PowerManager { */ public static final int SHUTDOWN_REASON_THERMAL_SHUTDOWN = 4; + /** + * constant for shutdown reason being low battery. + * @hide + */ + public static final int SHUTDOWN_REASON_LOW_BATTERY = 5; + + /** + * constant for shutdown reason being critical battery thermal state. + * @hide + */ + public static final int SHUTDOWN_REASON_BATTERY_THERMAL = 6; + final Context mContext; final IPowerManager mService; final Handler mHandler; diff --git a/core/java/com/android/internal/app/ShutdownActivity.java b/core/java/com/android/internal/app/ShutdownActivity.java index 745d28f367a3..f81e83836e18 100644 --- a/core/java/com/android/internal/app/ShutdownActivity.java +++ b/core/java/com/android/internal/app/ShutdownActivity.java @@ -41,6 +41,9 @@ public class ShutdownActivity extends Activity { mReboot = Intent.ACTION_REBOOT.equals(intent.getAction()); mConfirm = intent.getBooleanExtra(Intent.EXTRA_KEY_CONFIRM, false); mUserRequested = intent.getBooleanExtra(Intent.EXTRA_USER_REQUESTED_SHUTDOWN, false); + final String reason = mUserRequested + ? PowerManager.SHUTDOWN_USER_REQUESTED + : intent.getStringExtra(Intent.EXTRA_REASON); Slog.i(TAG, "onCreate(): confirm=" + mConfirm); Thread thr = new Thread("ShutdownActivity") { @@ -52,9 +55,7 @@ public class ShutdownActivity extends Activity { if (mReboot) { pm.reboot(mConfirm, null, false); } else { - pm.shutdown(mConfirm, - mUserRequested ? PowerManager.SHUTDOWN_USER_REQUESTED : null, - false); + pm.shutdown(mConfirm, reason, false); } } catch (RemoteException e) { } diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java index 83bd9ebded95..5106c8d731ff 100644 --- a/services/core/java/com/android/server/BatteryService.java +++ b/services/core/java/com/android/server/BatteryService.java @@ -20,6 +20,7 @@ import android.app.ActivityManagerInternal; import android.database.ContentObserver; import android.os.BatteryStats; +import android.os.PowerManager; import android.os.ResultReceiver; import android.os.ShellCallback; import android.os.ShellCommand; @@ -291,6 +292,8 @@ public final class BatteryService extends SystemService { if (mActivityManagerInternal.isSystemReady()) { Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN); intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false); + intent.putExtra(Intent.EXTRA_REASON, + PowerManager.SHUTDOWN_LOW_BATTERY); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivityAsUser(intent, UserHandle.CURRENT); } @@ -310,6 +313,8 @@ public final class BatteryService extends SystemService { if (mActivityManagerInternal.isSystemReady()) { Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN); intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false); + intent.putExtra(Intent.EXTRA_REASON, + PowerManager.SHUTDOWN_BATTERY_THERMAL_STATE); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivityAsUser(intent, UserHandle.CURRENT); } diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 12ca89a93d02..b7e1d5b9221e 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -206,6 +206,8 @@ public final class PowerManagerService extends SystemService private static final String REASON_REBOOT = "reboot"; private static final String REASON_USERREQUESTED = "shutdown,userrequested"; private static final String REASON_THERMAL_SHUTDOWN = "shutdown,thermal"; + private static final String REASON_LOW_BATTERY = "shutdown,battery"; + private static final String REASON_BATTERY_THERMAL_STATE = "shutdown,thermal,battery"; private static final String TRACE_SCREEN_ON = "Screen turning on"; @@ -4651,6 +4653,10 @@ public final class PowerManagerService extends SystemService return PowerManager.SHUTDOWN_REASON_USER_REQUESTED; case REASON_THERMAL_SHUTDOWN: return PowerManager.SHUTDOWN_REASON_THERMAL_SHUTDOWN; + case REASON_LOW_BATTERY: + return PowerManager.SHUTDOWN_REASON_LOW_BATTERY; + case REASON_BATTERY_THERMAL_STATE: + return PowerManager.SHUTDOWN_REASON_BATTERY_THERMAL; default: return PowerManager.SHUTDOWN_REASON_UNKNOWN; } |