summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java18
-rw-r--r--tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java71
2 files changed, 83 insertions, 6 deletions
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
index 355c5775d..a5c9caaca 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
@@ -836,12 +836,18 @@ public class CellBroadcastSettings extends CollapsingToolbarBaseActivity {
* @return The resource
*/
public static @NonNull Resources getResources(@NonNull Context context, int subId) {
- if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID
- || !SubscriptionManager.isValidSubscriptionId(subId)
- // based on 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) {
+
+ 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);
return context.getResources();
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
index b3237aa60..ca34ac650 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
@@ -19,12 +19,26 @@ import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
+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;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Resources;
import android.os.Looper;
import android.os.RemoteException;
import android.support.test.uiautomator.UiDevice;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import androidx.preference.PreferenceManager;
import androidx.test.InstrumentationRegistry;
@@ -130,6 +144,63 @@ public class CellBroadcastSettingsTest extends
assertTrue(CellBroadcastSettings.hasAnyPreferenceChanged(mContext));
}
+ @Test
+ public void testGetResources() {
+ Context mockContext = mock(Context.class);
+ Resources mockResources = mock(Resources.class);
+ doReturn(mockResources).when(mockContext).getResources();
+
+ CellBroadcastSettings.getResources(
+ mockContext, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verify(mockContext, never()).getSystemService(anyString());
+ verify(mockContext, times(1)).getResources();
+
+ CellBroadcastSettings.getResources(
+ mockContext, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ verify(mockContext, never()).getSystemService(anyString());
+ verify(mockContext, times(2)).getResources();
+
+ Context mockContext2 = mock(Context.class);
+ doReturn(mockResources).when(mockContext2).getResources();
+ 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());
+ doReturn(mockContext2).when(mockContext).createConfigurationContext(any());
+ CellBroadcastSettings.getResources(
+ mockContext, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID - 1);
+
+ verify(mockContext, times(1)).getSystemService(anyString());
+ verify(mockContext, times(3)).getResources();
+
+
+ doReturn(TelephonyManager.SIM_STATE_LOADED).when(mockTelephonyManager)
+ .getSimApplicationState(anyInt());
+ CellBroadcastSettings.getResources(
+ mockContext, SubscriptionManager.DEFAULT_SUBSCRIPTION_ID - 2);
+
+ verify(mockContext, times(3)).getResources();
+ verify(mockSubManager, times(1)).getActiveSubscriptionInfo(anyInt());
+ verify(mockContext2, times(1)).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();
+ }
+
public void waitUntilDialogOpens(Runnable r, long maxWaitMs) {
long waitTime = 0;
while (waitTime < maxWaitMs) {