ignore RemoteException from pm if shutdown is already on-going

- In new shutdown flow, adb is guaranteed to be alive while system server
  is alive.
- power manager can be killed before system server is killed.
- This leads into RemoteException for shutdown request to power manager.
- If shutdown is already on-going (=sys.powerctl set), the RemoteException
  should be ignored.

bug: 37096155
Test: adb shell svc power reboot|shutdown and check output to adb
Change-Id: Ia90a900d55123bd7c1bf57c90c49d35332ebfdf5
diff --git a/cmds/svc/src/com/android/commands/svc/PowerCommand.java b/cmds/svc/src/com/android/commands/svc/PowerCommand.java
index 6ce29cb..920a52d 100644
--- a/cmds/svc/src/com/android/commands/svc/PowerCommand.java
+++ b/cmds/svc/src/com/android/commands/svc/PowerCommand.java
@@ -22,6 +22,7 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
+import android.os.SystemProperties;
 
 public class PowerCommand extends Svc.Command {
     public PowerCommand() {
@@ -87,7 +88,7 @@
                         // no confirm, wait till device is rebooted
                         pm.reboot(false, mode, true);
                     } catch (RemoteException e) {
-                        System.err.println("Failed to reboot.");
+                        maybeLogRemoteException("Failed to reboot.");
                     }
                     return;
                 } else if ("shutdown".equals(args[1])) {
@@ -95,7 +96,7 @@
                         // no confirm, wait till device is off
                         pm.shutdown(false, null, true);
                     } catch (RemoteException e) {
-                        System.err.println("Failed to shutdown.");
+                        maybeLogRemoteException("Failed to shutdown.");
                     }
                     return;
                 }
@@ -103,4 +104,14 @@
         }
         System.err.println(longHelp());
     }
+
+    // Check if remote exception is benign during shutdown. Pm can be killed
+    // before system server during shutdown, so remote exception can be ignored
+    // if it is already in shutdown flow.
+    private void maybeLogRemoteException(String msg) {
+        String powerProp = SystemProperties.get("sys.powerctl");
+        if (powerProp.isEmpty()) {
+            System.err.println(msg);
+        }
+    }
 }