Set isGsm flag based on currently camped voice and data RATs
Jayachandran C [Fri, 5 May 2017 23:40:09 +0000 (16:40 -0700)]
Use currently camped RATs to determine isGsm the flag
instead of checking both phone type and camped RATs.

Test: Verified the signal bar for the following use cases
Idle:
 - SRLTE (1x & LTE) mode
 - hVoLTE mode
 - 2G only, 3G preferred, LTE preferred
 - Cellular and IWLAN registered

Voice calls:
 - CS calls on 1x, GSM, UMTS for all possible voice, data RATs
 - IMS calls on LTE and IWLAN for all possible voice, data RATs

Bug: 36644977
Change-Id: Ifd996a2c902c7238f7328a42f0401c8d626e89e4

src/java/com/android/internal/telephony/ServiceStateTracker.java

index 8ae78d2..d982e7c 100644 (file)
@@ -4275,10 +4275,15 @@ public class ServiceStateTracker extends Handler {
      */
     protected boolean onSignalStrengthResult(AsyncResult ar) {
         boolean isGsm = false;
-        //override isGsm for CDMA LTE
-        if (mPhone.isPhoneTypeGsm() ||
-                (mPhone.isPhoneTypeCdmaLte() &&
-                        ServiceState.isLte(mSS.getRilDataRadioTechnology()))) {
+        int dataRat = mSS.getRilDataRadioTechnology();
+        int voiceRat = mSS.getRilVoiceRadioTechnology();
+
+        // Override isGsm based on currently camped data and voice RATs
+        // Set isGsm to true if the RAT belongs to GSM family and not IWLAN
+        if ((dataRat != ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN
+                && ServiceState.isGsm(dataRat))
+                || (voiceRat != ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN
+                && ServiceState.isGsm(voiceRat))) {
             isGsm = true;
         }