ServiceStateTracker: Only call updatePhoneObject when the phone is registered.

This is to avoid situations where we switch phone types unnecessarily.

Bug: 18193790

Change-Id: Ic0fa608122a43077ca599d1b1ac5b41365466237
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index e7b83d0..dc06fd6 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -26,6 +26,7 @@
 import android.os.RegistrantList;
 import android.os.SystemClock;
 import android.telephony.CellInfo;
+import android.telephony.Rlog;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
 import android.telephony.TelephonyManager;
@@ -48,6 +49,7 @@
  * {@hide}
  */
 public abstract class ServiceStateTracker extends Handler {
+    private static final String LOG_TAG = "SST";
     protected  static final boolean DBG = true;
     protected static final boolean VDBG = false;
 
@@ -294,6 +296,13 @@
     protected void updatePhoneObject() {
         if (mPhoneBase.getContext().getResources().
                 getBoolean(com.android.internal.R.bool.config_switch_phone_on_voice_reg_state_change)) {
+            // If the phone is not registered on a network, no need to update.
+            boolean isRegistered = mSS.getVoiceRegState() == ServiceState.STATE_IN_SERVICE ||
+                    mSS.getVoiceRegState() == ServiceState.STATE_EMERGENCY_ONLY;
+            if (!isRegistered) {
+                Rlog.d(LOG_TAG, "updatePhoneObject: Ignore update");
+                return;
+            }
             mPhoneBase.updatePhoneObject(mSS.getRilVoiceRadioTechnology());
         }
     }
diff --git a/src/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java b/src/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
index e48afcf..483a9ea 100644
--- a/src/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/cdma/CdmaLteServiceStateTracker.java
@@ -669,9 +669,16 @@
 
     @Override
     protected void updatePhoneObject() {
-        int voiceRat = mSS.getRilVoiceRadioTechnology();
         if (mPhone.getContext().getResources().
                 getBoolean(com.android.internal.R.bool.config_switch_phone_on_voice_reg_state_change)) {
+            // If the phone is not registered on a network, no need to update.
+            boolean isRegistered = mSS.getVoiceRegState() == ServiceState.STATE_IN_SERVICE ||
+                    mSS.getVoiceRegState() == ServiceState.STATE_EMERGENCY_ONLY;
+            if (!isRegistered) {
+                Rlog.d(LOG_TAG, "updatePhoneObject: Ignore update");
+                return;
+            }
+
             // For CDMA-LTE phone don't update phone to GSM
             // if replacement RAT is unknown
             // If there is a  real need to switch to LTE, then it will be done via
@@ -681,6 +688,7 @@
                     com.android.internal.R.integer.config_volte_replacement_rat);
             Rlog.d(LOG_TAG, "updatePhoneObject: volteReplacementRat=" + volteReplacementRat);
 
+            int voiceRat = mSS.getRilVoiceRadioTechnology();
             if (voiceRat == ServiceState.RIL_RADIO_TECHNOLOGY_LTE &&
                     volteReplacementRat == ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN) {
                 voiceRat = ServiceState.RIL_RADIO_TECHNOLOGY_1xRTT;