Add APIs that can be invoked to shutdown radio and SIM cards gracefully

Add APIs to check if Radios are available and trigger shutdown on all available
radios.

Bug: 9773278
Change-Id: I6afa9e810cefc7855f7ae42e51f39cc51fa2aa6e
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 6350e78..c608b1d 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1090,6 +1090,34 @@
         return true;
     }
 
+    public boolean needMobileRadioShutdown() {
+        /*
+         * If any of the Radios are available, it will need to be
+         * shutdown. So return true if any Radio is available.
+         */
+        for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
+            Phone phone = PhoneFactory.getPhone(i);
+            if (phone != null && phone.isRadioAvailable()) return true;
+        }
+        logv(TelephonyManager.getDefault().getPhoneCount() + " Phones are shutdown.");
+        return false;
+    }
+
+    public void shutdownMobileRadios() {
+        for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
+            logv("Shutting down Phone " + i);
+            shutdownRadioUsingPhoneId(i);
+        }
+    }
+
+    private void shutdownRadioUsingPhoneId(int phoneId) {
+        enforceModifyPermission();
+        Phone phone = PhoneFactory.getPhone(phoneId);
+        if (phone != null && phone.isRadioAvailable()) {
+            phone.shutdownRadio();
+        }
+    }
+
     public boolean setRadioPower(boolean turnOn) {
         return setRadioPowerUsingSubId(getDefaultSubscription(), turnOn);
     }
@@ -1376,6 +1404,10 @@
         Log.d(LOG_TAG, "[PhoneIntfMgr] " + msg);
     }
 
+    private static void logv(String msg) {
+        Log.v(LOG_TAG, "[PhoneIntfMgr] " + msg);
+    }
+
     private static void loge(String msg) {
         Log.e(LOG_TAG, "[PhoneIntfMgr] " + msg);
     }