Include IMS service state when determining GSM/CDMA Phone service state.

Also, made both getServiceState calls identical, it would be desirable
to promote getServiceState to PhoneBase but since the mSST variable is
Object Specific that wasn't trivial to do, so for now the code is
duplicated.

Bug: 17326988
Change-Id: I548abf213ab098cd31e9f9c90d231135fba3be6a
diff --git a/src/java/com/android/internal/telephony/cdma/CDMAPhone.java b/src/java/com/android/internal/telephony/cdma/CDMAPhone.java
index c3ac036..1fe2a7d 100644
--- a/src/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/src/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -285,9 +285,22 @@
 
     @Override
     public ServiceState getServiceState() {
-        return mSST.mSS;
+        if (mSST == null || mSST.mSS.getState() != ServiceState.STATE_IN_SERVICE) {
+            if (mImsPhone != null &&
+                    mImsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE) {
+                return mImsPhone.getServiceState();
+            }
+        }
+
+        if (mSST != null) {
+            return mSST.mSS;
+        } else {
+            // avoid potential NPE in EmergencyCallHelper during Phone switch
+            return new ServiceState();
+        }
     }
 
+
     @Override
     public CallTracker getCallTracker() {
         return mCT;
diff --git a/src/java/com/android/internal/telephony/gsm/GSMPhone.java b/src/java/com/android/internal/telephony/gsm/GSMPhone.java
index c9d1d5e..5c01684 100644
--- a/src/java/com/android/internal/telephony/gsm/GSMPhone.java
+++ b/src/java/com/android/internal/telephony/gsm/GSMPhone.java
@@ -290,6 +290,13 @@
     @Override
     public ServiceState
     getServiceState() {
+        if (mSST == null || mSST.mSS.getState() != ServiceState.STATE_IN_SERVICE) {
+            if (mImsPhone != null &&
+                    mImsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE) {
+                return mImsPhone.getServiceState();
+            }
+        }
+
         if (mSST != null) {
             return mSST.mSS;
         } else {