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;