When Wi-Fi calling is available display SPN as SPN+" Wi-Fi"

Bug:19681794
Change-Id: I2859d4d26c3103d9900befc6f5fe4aa50c6eadb7
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 343c0a6..d1738bc 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -180,6 +180,7 @@
     protected static final int EVENT_CHANGE_IMS_STATE                  = 45;
     protected static final int EVENT_IMS_STATE_CHANGED                 = 46;
     protected static final int EVENT_IMS_STATE_DONE                    = 47;
+    protected static final int EVENT_IMS_CAPABILITY_CHANGED            = 48;
 
     protected static final String TIMEZONE_PROPERTY = "persist.sys.timezone";
 
@@ -638,6 +639,7 @@
     public abstract boolean isConcurrentVoiceAndDataAllowed();
 
     public abstract void setImsRegistrationState(boolean registered);
+    public void onImsCapabilityChanged() {}
     public abstract void pollState();
 
     /**
diff --git a/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index 4d759d7..811fb80 100755
--- a/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -70,6 +70,7 @@
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyProperties;
 import com.android.internal.telephony.dataconnection.DcTrackerBase;
+import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
 import com.android.internal.telephony.uicc.IccRecords;
 import com.android.internal.telephony.uicc.SIMRecords;
@@ -504,6 +505,11 @@
                 setPowerStateToDesired();
                 break;
 
+            case EVENT_IMS_CAPABILITY_CHANGED:
+                if (DBG) log("EVENT_IMS_CAPABILITY_CHANGED");
+                updateSpnDisplay();
+                break;
+
             default:
                 super.handleMessage(msg);
             break;
@@ -634,9 +640,18 @@
                 && ((rule & SIMRecords.SPN_RULE_SHOW_SPN)
                         == SIMRecords.SPN_RULE_SHOW_SPN);
 
-        // airplane mode or spn equals plmn, do not show spn
-        if (mSS.getVoiceRegState() == ServiceState.STATE_POWER_OFF
+        if (!TextUtils.isEmpty(spn)
+                && mPhone.getImsPhone() != null
+                && ((ImsPhone) mPhone.getImsPhone()).isVowifiEnabled()) {
+            // In Wi-Fi Calling mode show SPN+WiFi
+            String format = mPhone.getContext().getText(
+                    com.android.internal.R.string.wfcSpnFormat).toString();
+            showPlmn = false;
+            showSpn = true;
+            spn = String.format(format, spn);
+        } else if (mSS.getVoiceRegState() == ServiceState.STATE_POWER_OFF
                 || (showPlmn && TextUtils.equals(spn, plmn))) {
+            // airplane mode or spn equals plmn, do not show spn
             spn = null;
             showSpn = false;
         }
@@ -2156,6 +2171,10 @@
         mImsRegistrationOnOff = registered;
     }
 
+    public void onImsCapabilityChanged() {
+        sendMessage(obtainMessage(EVENT_IMS_CAPABILITY_CHANGED));
+    }
+
     public void onSetPhoneRCDone(ArrayList<RadioAccessFamily> phoneRcs) {
         int INVALID = -1;
         int size = 0;
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
index 70f991c..439ca8b 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
@@ -83,6 +83,7 @@
 import com.android.internal.telephony.PhoneBase;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneNotifier;
+import com.android.internal.telephony.ServiceStateTracker;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyProperties;
 import com.android.internal.telephony.cdma.CDMAPhone;
@@ -1244,6 +1245,10 @@
         mEcmExitRespRegistrant.clear();
     }
 
+    public void onFeatureCapabilityChanged() {
+        mDefaultPhone.getServiceStateTracker().onImsCapabilityChanged();
+    }
+
     public boolean isVolteEnabled() {
         return mCT.isVolteEnabled();
     }
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 2e05789..5324111 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -1355,6 +1355,8 @@
                 for (ImsPhoneConnection connection : mConnections) {
                     connection.updateWifiState();
                 }
+
+                mPhone.onFeatureCapabilityChanged();
             }
 
             if (DBG) log("onFeatureCapabilityChanged: mImsFeatureEnabled=" +  mImsFeatureEnabled);