Merge "Do not set brandOverride if opNames are invalid"
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 754215b..b3149c2 100755
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -2205,8 +2205,6 @@
}
case EVENT_POLL_STATE_OPERATOR: {
- String brandOverride = getOperatorBrandOverride();
- mCdnr.updateEfForBrandOverride(brandOverride);
if (mPhone.isPhoneTypeGsm()) {
String opNames[] = (String[]) ar.result;
@@ -2214,6 +2212,8 @@
mNewSS.setOperatorAlphaLongRaw(opNames[0]);
mNewSS.setOperatorAlphaShortRaw(opNames[1]);
// FIXME: Giving brandOverride higher precedence, is this desired?
+ String brandOverride = getOperatorBrandOverride();
+ mCdnr.updateEfForBrandOverride(brandOverride);
if (brandOverride != null) {
log("EVENT_POLL_STATE_OPERATOR: use brandOverride=" + brandOverride);
mNewSS.setOperatorName(brandOverride, brandOverride, opNames[2]);
@@ -2243,6 +2243,8 @@
// NV device (as opposed to CSIM)
mNewSS.setOperatorName(opNames[0], opNames[1], opNames[2]);
} else {
+ String brandOverride = getOperatorBrandOverride();
+ mCdnr.updateEfForBrandOverride(brandOverride);
if (brandOverride != null) {
mNewSS.setOperatorName(brandOverride, brandOverride, opNames[2]);
} else {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
index c8d958c..36850a7 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
@@ -1913,6 +1913,26 @@
waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
}
+ @Test
+ public void testPollStateOperatorWhileNotRegistered() {
+ final String[] oldOpNamesResult = new String[] { "Old carrier long", "Old carrier", "" };
+ final String[] badOpNamesResult = null;
+ sst.mPollingContext[0] = 1;
+ sst.sendMessage(sst.obtainMessage(
+ ServiceStateTracker.EVENT_POLL_STATE_OPERATOR,
+ new AsyncResult(sst.mPollingContext, oldOpNamesResult, null)));
+ waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
+ assertEquals(oldOpNamesResult[0], sst.getServiceState().getOperatorAlpha());
+
+ // if the device is not registered, the modem returns an invalid operator
+ sst.mPollingContext[0] = 1;
+ sst.sendMessage(sst.obtainMessage(
+ ServiceStateTracker.EVENT_POLL_STATE_OPERATOR,
+ new AsyncResult(sst.mPollingContext, badOpNamesResult, null)));
+ waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
+ assertEquals(null, sst.getServiceState().getOperatorAlpha());
+ }
+
// Edge and GPRS are grouped under the same family and Edge has higher rate than GPRS.
// Expect no rat update when move from E to G.
@Test