summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHui Wang <huiwang@google.com>2022-01-12 20:11:46 +0000
committerHui Wang <huiwang@google.com>2022-02-01 19:36:01 +0000
commit9beb2691d9507aff2e6eab2f1fcb9fafe12be070 (patch)
tree2b55a761a8085106f22cbe2dbd21a216a77cfee3
parent612b3e1a1f5a6c59798dbfe9480de7144932608d (diff)
downloadCellBroadcastReceiver-9beb2691d9507aff2e6eab2f1fcb9fafe12be070.tar.gz
Cache the resources when the mnc of the configuration is not zero
Checking the sim loaded is not used properly for the resources caching. The resources per the mcc and mnc can also be ready before sim loaded. In this case, the mnc of the configuration from the resource is not 0. Bug: 214250834 Test: atest CellBroadcastReceiverUnitTests Change-Id: I15d6fe9d2e50c06d17fd8602b67bc9ddc5affb9c
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java20
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastActivityTestCase.java17
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java22
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastServiceTestCase.java15
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java48
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastTest.java2
6 files changed, 63 insertions, 61 deletions
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
index dd6291f03..f4fe98d17 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
@@ -33,7 +33,6 @@ import android.os.Bundle;
import android.os.UserManager;
import android.os.Vibrator;
import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.MenuItem;
import android.widget.Switch;
@@ -881,17 +880,8 @@ public class CellBroadcastSettings extends CollapsingToolbarBaseActivity {
*/
public static @NonNull Resources getResources(@NonNull Context context, int subId) {
- try {
- if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID
- || !SubscriptionManager.isValidSubscriptionId(subId)
- // per the latest design, subId can be valid earlier than mcc mnc is known to
- // telephony. check if sim is loaded to avoid caching the wrong resources.
- || context.getSystemService(TelephonyManager.class).getSimApplicationState(
- SubscriptionManager.getSlotIndex(subId)) != TelephonyManager.SIM_STATE_LOADED) {
- return context.getResources();
- }
- } catch (Exception e) {
- Log.d(TAG, "Fail to getSimApplicationState due to " + e);
+ if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID
+ || !SubscriptionManager.isValidSubscriptionId(subId)) {
return context.getResources();
}
@@ -902,7 +892,11 @@ public class CellBroadcastSettings extends CollapsingToolbarBaseActivity {
Resources res = SubscriptionManager.getResourcesForSubId(context, subId);
- sResourcesCache.put(subId, res);
+ if (res.getConfiguration().mnc != 0) {
+ Log.d(TAG, "Cache resource for sub: " + subId + ", mcc: "
+ + res.getConfiguration().mcc + ", mnc:" + res.getConfiguration().mnc);
+ sResourcesCache.put(subId, res);
+ }
return res;
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastActivityTestCase.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastActivityTestCase.java
index 4af6cc2f0..db5a270cd 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastActivityTestCase.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastActivityTestCase.java
@@ -16,11 +16,14 @@
package com.android.cellbroadcastreceiver.unit;
+import static org.mockito.Mockito.spy;
+
import android.app.Activity;
import android.app.ResourcesManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Handler;
import android.test.ActivityUnitTestCase;
@@ -114,8 +117,11 @@ public class CellBroadcastActivityTestCase<T extends Activity> extends ActivityU
private HashMap<String, Object> mInjectedSystemServices = new HashMap<>();
+ private Resources mResources;
+
public TestContext(Context base) {
super(base);
+ mResources = spy(super.getResources());
}
public <S> void injectSystemService(Class<S> cls, S service) {
@@ -144,17 +150,14 @@ public class CellBroadcastActivityTestCase<T extends Activity> extends ActivityU
return super.getSystemService(name);
}
- Resources mResources;
@Override
public Resources getResources() {
- if (mResources != null) {
- return mResources;
- }
- return super.getResources();
+ return mResources;
}
- public void setResources(Resources resources) {
- mResources = resources;
+ @Override
+ public Context createConfigurationContext(Configuration overrideConfiguration) {
+ return this;
}
}
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
index acca9afe1..dd651e513 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
@@ -36,7 +36,6 @@ import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
import android.telephony.SmsCbMessage;
-import android.telephony.TelephonyManager;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -45,6 +44,7 @@ import android.widget.TextView;
import com.android.cellbroadcastreceiver.CellBroadcastAlertDialog;
import com.android.cellbroadcastreceiver.CellBroadcastAlertService;
+import com.android.cellbroadcastreceiver.CellBroadcastSettings;
import com.android.cellbroadcastreceiver.R;
import com.android.internal.telephony.gsm.SmsCbConstants;
@@ -69,9 +69,6 @@ public class CellBroadcastAlertDialogTest extends
@Mock
private IThermalService.Stub mMockedThermalService;
- @Mock
- TelephonyManager mTelephonyManager;
-
@Captor
private ArgumentCaptor<Integer> mInt;
@@ -90,9 +87,6 @@ public class CellBroadcastAlertDialogTest extends
private ArrayList<SmsCbMessage> mMessageList;
- @Mock
- Resources mMockResources;
-
@Override
protected Intent createActivityIntent() {
mMessageList = new ArrayList<>(1);
@@ -118,9 +112,7 @@ public class CellBroadcastAlertDialogTest extends
mPowerManager = new PowerManager(mContext, mMockedPowerManagerService,
mMockedThermalService, null);
injectSystemService(PowerManager.class, mPowerManager);
- doReturn(TelephonyManager.SIM_STATE_UNKNOWN).when(mTelephonyManager)
- .getSimApplicationState(anyInt());
- injectSystemService(TelephonyManager.class, mTelephonyManager);
+ CellBroadcastSettings.resetResourcesCache();
}
@After
@@ -184,9 +176,10 @@ public class CellBroadcastAlertDialogTest extends
public void testGetNewMessageListIfNeeded() throws Throwable {
CellBroadcastAlertDialog activity = startActivity();
- mContext.setResources(mMockResources);
- doReturn(false).when(mMockResources).getBoolean(
+ Resources spyRes = mContext.getResources();
+ doReturn(false).when(spyRes).getBoolean(
R.bool.show_cmas_messages_in_priority_order);
+
SmsCbMessage testMessage1 = CellBroadcastAlertServiceTest
.createMessageForCmasMessageClass(12412,
SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL,
@@ -215,13 +208,12 @@ public class CellBroadcastAlertDialogTest extends
assertTrue(messageList.size() == 2);
assertEquals(testMessage2.getReceivedTime(), messageList.get(1).getReceivedTime());
- doReturn(true).when(mMockResources).getBoolean(
+ doReturn(true).when(spyRes).getBoolean(
R.bool.show_cmas_messages_in_priority_order);
+
messageList = activity.getNewMessageListIfNeeded(inputList1, inputList2);
assertTrue(messageList.size() == 2);
assertEquals(testMessage1.getReceivedTime(), messageList.get(1).getReceivedTime());
-
- mContext.setResources(null);
}
@InstrumentationTest
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastServiceTestCase.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastServiceTestCase.java
index 2e767feaa..67251d910 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastServiceTestCase.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastServiceTestCase.java
@@ -27,6 +27,7 @@ import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.media.AudioManager;
import android.os.SystemClock;
@@ -38,6 +39,7 @@ import android.telephony.TelephonyManager;
import android.test.ServiceTestCase;
import com.android.cellbroadcastreceiver.CellBroadcastChannelManager;
+import com.android.cellbroadcastreceiver.CellBroadcastSettings;
import com.android.internal.telephony.ISub;
import org.junit.After;
@@ -69,6 +71,8 @@ public abstract class CellBroadcastServiceTestCase<T extends Service> extends Se
@Mock
protected SharedPreferences mMockedSharedPreferences;
+ protected Configuration mConfiguration;
+
MockedServiceManager mMockedServiceManager;
Intent mServiceIntentToVerify;
@@ -145,6 +149,11 @@ public abstract class CellBroadcastServiceTestCase<T extends Service> extends Se
public SharedPreferences getSharedPreferences(String name, int mode) {
return mMockedSharedPreferences;
}
+
+ @Override
+ public Context createConfigurationContext(Configuration overrideConfiguration) {
+ return this;
+ }
}
@Before
@@ -159,20 +168,22 @@ public abstract class CellBroadcastServiceTestCase<T extends Service> extends Se
doReturn(new String[]{""}).when(mResources).getStringArray(anyInt());
+ mConfiguration = new Configuration();
+ doReturn(mConfiguration).when(mResources).getConfiguration();
+
doReturn(1).when(mMockSubscriptionInfo).getSubscriptionId();
doReturn(Arrays.asList(mMockSubscriptionInfo)).when(mMockedSubscriptionManager)
.getActiveSubscriptionInfoList();
doReturn(mMockedTelephonyManager).when(mMockedTelephonyManager)
.createForSubscriptionId(anyInt());
- doReturn(TelephonyManager.SIM_STATE_UNKNOWN).when(mMockedTelephonyManager)
- .getSimApplicationState(anyInt());
mMockedServiceManager = new MockedServiceManager();
mMockedServiceManager.replaceService("isub", mSubService);
mContext = new TestContextWrapper(getContext());
setContext(mContext);
+ CellBroadcastSettings.resetResourcesCache();
CellBroadcastChannelManager.clearAllCellBroadcastChannelRanges();
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
index c20d36560..16a5e8ea1 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
@@ -24,7 +24,6 @@ import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -41,8 +40,8 @@ import android.os.Looper;
import android.os.RemoteException;
import android.os.UserManager;
import android.support.test.uiautomator.UiDevice;
+import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
@@ -204,43 +203,48 @@ public class CellBroadcastSettingsTest extends
Context mockContext2 = mock(Context.class);
doReturn(mockResources).when(mockContext2).getResources();
+ Configuration config = new Configuration();
+ doReturn(config).when(mockResources).getConfiguration();
SubscriptionManager mockSubManager = mock(SubscriptionManager.class);
- TelephonyManager mockTelephonyManager = mock(TelephonyManager.class);
doReturn(Context.TELEPHONY_SUBSCRIPTION_SERVICE).when(mockContext)
.getSystemServiceName(eq(SubscriptionManager.class));
doReturn(mockSubManager).when(mockContext).getSystemService(
eq(Context.TELEPHONY_SUBSCRIPTION_SERVICE));
- doReturn(Context.TELEPHONY_SERVICE).when(mockContext)
- .getSystemServiceName(eq(TelephonyManager.class));
- doReturn(mockTelephonyManager).when(mockContext)
- .getSystemService(eq(Context.TELEPHONY_SERVICE));
- doReturn(TelephonyManager.SIM_STATE_UNKNOWN).when(mockTelephonyManager)
- .getSimApplicationState(anyInt());
+ SubscriptionInfo mockSubInfo = mock(SubscriptionInfo.class);
+ doReturn(mockSubInfo).when(mockSubManager).getActiveSubscriptionInfo(anyInt());
+ doReturn(0).when(mockSubInfo).getMcc();
+ doReturn(0).when(mockSubInfo).getMnc();
doReturn(mockContext2).when(mockContext).createConfigurationContext(any());
+
+ // The resource will not be cached for the sub
CellBroadcastSettings.getResources(
mockContext, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID - 1);
- verify(mockContext, times(1)).getSystemService(anyString());
- verify(mockContext, times(3)).getResources();
+ verify(mockContext, times(2)).getResources();
+ verify(mockContext2, times(1)).getResources();
+ // The resources will be cached for ths sub
+ config.mcc = 123;
+ config.mnc = 456;
- doReturn(TelephonyManager.SIM_STATE_LOADED).when(mockTelephonyManager)
- .getSimApplicationState(anyInt());
CellBroadcastSettings.getResources(
- mockContext, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID - 2);
+ mockContext, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID - 1);
- verify(mockContext, times(3)).getResources();
- verify(mockSubManager, times(1)).getActiveSubscriptionInfo(anyInt());
- verify(mockContext2, times(1)).getResources();
+ verify(mockContext, times(2)).getResources();
+ verify(mockContext2, times(2)).getResources();
+
+ // The resources should be read from the cached directly
+ CellBroadcastSettings.getResources(
+ mockContext, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID - 1);
+
+ verify(mockContext, times(2)).getResources();
+ verify(mockContext2, times(2)).getResources();
- doThrow(NullPointerException.class).when(mockTelephonyManager)
- .getSimApplicationState(anyInt());
CellBroadcastSettings.getResources(
mockContext, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID - 2);
- verify(mockContext, times(4)).getResources();
- verify(mockSubManager, times(1)).getActiveSubscriptionInfo(anyInt());
- verify(mockContext2, times(1)).getResources();
+ verify(mockContext, times(2)).getResources();
+ verify(mockContext2, times(3)).getResources();
}
@Test
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastTest.java
index e4c80a32b..9447047a2 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastTest.java
@@ -88,8 +88,6 @@ public abstract class CellBroadcastTest {
doReturn(mResources).when(mContext).getResources();
doReturn(mContext).when(mContext).getApplicationContext();
doReturn(new String[]{""}).when(mResources).getStringArray(anyInt());
- doReturn(TelephonyManager.SIM_STATE_LOADED).when(mTelephonyManager)
- .getSimApplicationState(anyInt());
}
void carrierConfigSetStringArray(int subId, String key, String[] values) {