summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryoungtaecha <youngtaecha@google.com>2021-12-13 16:30:36 +0000
committeryoungtaecha <youngtaecha@google.com>2022-02-10 04:06:47 +0000
commiteceae6dd28b1618d8d83e226f1200a03ec97ae5f (patch)
tree45e29455122977c7962f5d3fb0fa16111ab1c212
parentdbc501f6aee7e87ff3e10d60c54c4ff6a820faaa (diff)
downloadCellBroadcastReceiver-eceae6dd28b1618d8d83e226f1200a03ec97ae5f.tar.gz
Do not initialize carrier id by non default sub id
For multiple sim case, non default sub change may come earlier than default sub. In this case, the carrier id for the default sub should not be initialized. Otherwise, it may lead to the preference to be reset unexpectedly. Bug: 208739357 Test: Manual, atest CellBroadcastReceiverOemUnitTests Change-Id: I8f2bd9851d6b10becce87c9dd775088c25a9d70b
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java16
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastReceiverTest.java20
2 files changed, 29 insertions, 7 deletions
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
index 63be97ffd..70b2b1880 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
@@ -268,8 +268,16 @@ public class CellBroadcastReceiver extends BroadcastReceiver {
* @param subId subId of the carrier config event
*/
private void resetSettingsAsNeeded(Context context, int subId) {
+ final int defaultSubId = SubscriptionManager.getDefaultSubscriptionId();
+
// subId may be -1 if carrier config broadcast is being sent on SIM removal
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ if (defaultSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ Log.d(TAG, "ignoring carrier config broadcast because subId=-1 and it's not"
+ + " defaultSubId when device is support multi-sim");
+ return;
+ }
+
if (getPreviousCarrierIdForDefaultSub() == NO_PREVIOUS_CARRIER_ID) {
// on first boot only, if no SIM is inserted we save the carrier ID -1.
// This allows us to detect the carrier change from -1 to the carrier of the first
@@ -280,7 +288,6 @@ public class CellBroadcastReceiver extends BroadcastReceiver {
return;
}
- final int defaultSubId = SubscriptionManager.getDefaultSubscriptionId();
Log.d(TAG, "subId=" + subId + " defaultSubId=" + defaultSubId);
if (defaultSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
Log.d(TAG, "ignoring carrier config broadcast because defaultSubId=-1");
@@ -336,7 +343,12 @@ public class CellBroadcastReceiver extends BroadcastReceiver {
.getInt(CARRIER_ID_FOR_DEFAULT_SUB_PREF, NO_PREVIOUS_CARRIER_ID);
}
- private void saveCarrierIdForDefaultSub(int carrierId) {
+
+ /**
+ * store carrierId corresponding to the default subId.
+ */
+ @VisibleForTesting
+ public void saveCarrierIdForDefaultSub(int carrierId) {
getDefaultSharedPreferences().edit().putInt(CARRIER_ID_FOR_DEFAULT_SUB_PREF, carrierId)
.apply();
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastReceiverTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastReceiverTest.java
index 5b57ab548..a92d75dbc 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastReceiverTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastReceiverTest.java
@@ -16,8 +16,6 @@
package com.android.cellbroadcastreceiver.unit;
-import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -213,15 +211,27 @@ public class CellBroadcastReceiverTest extends CellBroadcastTest {
}
@Test
- public void testInitializeSharedPreference_ifSystemUser_invalidSub() {
+ public void testInitializeSharedPreference_ifSystemUser_invalidSub() throws RemoteException {
doReturn("An invalid action").when(mIntent).getAction();
doReturn(true).when(mUserManager).isSystemUser();
doReturn(true).when(mCellBroadcastReceiver).sharedPrefsHaveDefaultValues();
doNothing().when(mCellBroadcastReceiver).adjustReminderInterval();
+ mockTelephonyManager();
- mCellBroadcastReceiver.initializeSharedPreference(mContext, INVALID_SUBSCRIPTION_ID);
+ int subId = 1;
+ // Not starting ConfigService, as default subId is valid and subId are invalid
+ doReturn(subId).when(mSubService).getDefaultSubId();
+ mCellBroadcastReceiver.initializeSharedPreference(mContext,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ verify(mContext, never()).startService(any());
+ verify(mCellBroadcastReceiver, never()).saveCarrierIdForDefaultSub(anyInt());
+
+ // Not starting ConfigService, as both default subId and subId are invalid
+ doReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID).when(mSubService).getDefaultSubId();
+ mCellBroadcastReceiver.initializeSharedPreference(mContext,
+ SubscriptionManager.INVALID_SUBSCRIPTION_ID);
verify(mContext, never()).startService(any());
- // Check interval.
+ verify(mCellBroadcastReceiver).saveCarrierIdForDefaultSub(anyInt());
}
private void mockTelephonyManager() {