OSDN Git Service

Add shutdown reason as extra when triggering ACTION_REQUEST_SHUTDOWN.
authorSudheer Shanka <sudheersai@google.com>
Mon, 25 Sep 2017 17:36:23 +0000 (10:36 -0700)
committerSudheer Shanka <sudheersai@google.com>
Mon, 25 Sep 2017 18:20:37 +0000 (11:20 -0700)
When BatteryService triggers ACTION_REQUEST_SHUTDOWN intent, add the reason
for shutdown as extra to indicate low battery or critical battery
thermal state.

Bug: 63736262
Test: 1/ adb shell cmd battery unplug && adb shell cmd battery set level 0
      2/ Power on the device
      3/ Verify sys.boot.reason == shutdown,battery
Test: 1/ adb shell cmd battery set temp 700
      2/ Power on the device
      3/ Verify sys.boot.reason == shutdown,thermal,battery

Change-Id: If20a36ef53f8bcbfae4114df08f741ec1dcd7df9

core/java/android/os/PowerManager.java
core/java/com/android/internal/app/ShutdownActivity.java
services/core/java/com/android/server/BatteryService.java
services/core/java/com/android/server/power/PowerManagerService.java

index 960c9f5..3726f47 100644 (file)
@@ -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;
index 745d28f..f81e838 100644 (file)
@@ -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) {
                 }
index 83bd9eb..5106c8d 100644 (file)
@@ -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);
                     }
index 12ca89a..b7e1d5b 100644 (file)
@@ -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;
         }