Don't dial non-emergency CS voice call in airplane mode

Added a new CallStateException error code ERROR_POWER_OFF

Bug: 28709116
Change-Id: Ia63196d5e8c051a91da3e2a7e60ac605dccf8344
(cherry picked from commit 16ebf27f93b3c8c5aaf4aa6a169a63a2dae5f436)
diff --git a/src/java/com/android/internal/telephony/CallStateException.java b/src/java/com/android/internal/telephony/CallStateException.java
index 57cbeb8..cac701a 100644
--- a/src/java/com/android/internal/telephony/CallStateException.java
+++ b/src/java/com/android/internal/telephony/CallStateException.java
@@ -27,6 +27,7 @@
     public static final int ERROR_INVALID = -1;
 
     public static final int ERROR_DISCONNECTED = 1;
+    public static final int ERROR_POWER_OFF = 2;
 
     public
     CallStateException()
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index 3330879..07afe0c 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -1121,6 +1121,14 @@
                 && mSST.mSS.getDataRegState() != ServiceState.STATE_IN_SERVICE && !isEmergency) {
             throw new CallStateException("cannot dial in current state");
         }
+        // Check non-emergency voice CS call - shouldn't dial when POWER_OFF
+        if (mSST != null && mSST.mSS.getState() == ServiceState.STATE_POWER_OFF /* CS POWER_OFF */
+                && !VideoProfile.isVideo(videoState) /* voice call */
+                && !isEmergency /* non-emergency call */) {
+            throw new CallStateException(
+                CallStateException.ERROR_POWER_OFF,
+                "cannot dial voice call in airplane mode");
+        }
         if (DBG) logd("Trying (non-IMS) CS call");
 
         if (isPhoneTypeGsm()) {