Skip to content

Commit

Permalink
Add implementation of
Browse files Browse the repository at this point in the history
- ShadowSubscriptionManager#getAvailableSubscriptionInfoList
- ShadowSubscriptionManager#setAvailableSubscriptionInfoList
- ShadowSubscriptionManager#setAvailableSubscriptionInfos
- SubscriptionInfoBuilder#setMnc

PiperOrigin-RevId: 240904542
  • Loading branch information
Googler authored and copybara-robolectric committed Mar 29, 2019
1 parent 5409c0d commit 95bac4a
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

import static android.content.Context.TELEPHONY_SUBSCRIPTION_SERVICE;
import static android.os.Build.VERSION_CODES.N;
import static android.os.Build.VERSION_CODES.P;
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
import static com.google.common.truth.Truth.assertThat;
import static org.robolectric.RuntimeEnvironment.application;
import static org.robolectric.Shadows.shadowOf;

import android.telephony.SubscriptionInfo;
Expand All @@ -21,50 +22,50 @@
public class ShadowSubscriptionManagerTest {

private SubscriptionManager subscriptionManager;
private ShadowSubscriptionManager shadowSubscriptionManager;

@Before
public void setUp() throws Exception {
subscriptionManager =
(SubscriptionManager) application.getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE);
shadowSubscriptionManager = shadowOf(subscriptionManager);
(SubscriptionManager)
getApplicationContext().getSystemService(TELEPHONY_SUBSCRIPTION_SERVICE);
}

@Test
public void shouldGiveDefaultSubscriptionId() {
int testId = 42;
ShadowSubscriptionManager.setDefaultSubscriptionId(testId);
assertThat(subscriptionManager.getDefaultSubscriptionId()).isEqualTo(testId);
assertThat(SubscriptionManager.getDefaultSubscriptionId()).isEqualTo(testId);
}

@Test
public void shouldGiveDefaultDataSubscriptionId() {
int testId = 42;
shadowSubscriptionManager.setDefaultDataSubscriptionId(testId);
assertThat(subscriptionManager.getDefaultDataSubscriptionId()).isEqualTo(testId);
ShadowSubscriptionManager.setDefaultDataSubscriptionId(testId);
assertThat(SubscriptionManager.getDefaultDataSubscriptionId()).isEqualTo(testId);
}

@Test
public void shouldGiveDefaultSmsSubscriptionId() {
int testId = 42;
shadowSubscriptionManager.setDefaultSmsSubscriptionId(testId);
assertThat(subscriptionManager.getDefaultSmsSubscriptionId()).isEqualTo(testId);
ShadowSubscriptionManager.setDefaultSmsSubscriptionId(testId);
assertThat(SubscriptionManager.getDefaultSmsSubscriptionId()).isEqualTo(testId);
}

@Test
public void shouldGiveDefaultVoiceSubscriptionId() {
int testId = 42;
shadowSubscriptionManager.setDefaultVoiceSubscriptionId(testId);
assertThat(subscriptionManager.getDefaultVoiceSubscriptionId()).isEqualTo(testId);
ShadowSubscriptionManager.setDefaultVoiceSubscriptionId(testId);
assertThat(SubscriptionManager.getDefaultVoiceSubscriptionId()).isEqualTo(testId);
}

@Test
public void addOnSubscriptionsChangedListener_shouldAddListener() {
DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
shadowSubscriptionManager.addOnSubscriptionsChangedListener(listener);
shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener);

shadowSubscriptionManager.setActiveSubscriptionInfos(
SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo());
shadowOf(subscriptionManager)
.setActiveSubscriptionInfos(
SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo());

assertThat(listener.subscriptionChanged).isTrue();
}
Expand All @@ -73,12 +74,13 @@ public void addOnSubscriptionsChangedListener_shouldAddListener() {
public void removeOnSubscriptionsChangedListener_shouldRemoveListener() {
DummySubscriptionsChangedListener listener = new DummySubscriptionsChangedListener();
DummySubscriptionsChangedListener listener2 = new DummySubscriptionsChangedListener();
shadowSubscriptionManager.addOnSubscriptionsChangedListener(listener);
shadowSubscriptionManager.addOnSubscriptionsChangedListener(listener2);
shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener);
shadowOf(subscriptionManager).addOnSubscriptionsChangedListener(listener2);

shadowSubscriptionManager.removeOnSubscriptionsChangedListener(listener);
shadowSubscriptionManager.setActiveSubscriptionInfos(
SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo());
shadowOf(subscriptionManager).removeOnSubscriptionsChangedListener(listener);
shadowOf(subscriptionManager)
.setActiveSubscriptionInfos(
SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo());

assertThat(listener.subscriptionChanged).isFalse();
assertThat(listener2.subscriptionChanged).isTrue();
Expand All @@ -88,116 +90,140 @@ public void removeOnSubscriptionsChangedListener_shouldRemoveListener() {
public void getActiveSubscriptionInfo_shouldReturnInfoWithSubId() {
SubscriptionInfo expectedSubscriptionInfo =
SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo();
shadowSubscriptionManager.setActiveSubscriptionInfos(expectedSubscriptionInfo);
shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo);

assertThat(shadowSubscriptionManager.getActiveSubscriptionInfo(123))
assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123))
.isSameAs(expectedSubscriptionInfo);
}

@Test
public void getActiveSubscriptionInfoForSimSlotIndex_shouldReturnInfoWithSlotIndex() {
SubscriptionInfo expectedSubscriptionInfo =
SubscriptionInfoBuilder.newBuilder().setSimSlotIndex(123).buildSubscriptionInfo();
shadowSubscriptionManager.setActiveSubscriptionInfos(expectedSubscriptionInfo);
shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo);

assertThat(shadowSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(123))
assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoForSimSlotIndex(123))
.isSameAs(expectedSubscriptionInfo);
}

@Test
public void getActiveSubscriptionInfo_shouldReturnNullForNullList() {
shadowSubscriptionManager.setActiveSubscriptionInfoList(null);
assertThat(shadowSubscriptionManager.getActiveSubscriptionInfo(123)).isNull();
shadowOf(subscriptionManager).setActiveSubscriptionInfoList(null);
assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull();
}

@Test
public void getActiveSubscriptionInfo_shouldReturnNullForNullVarargsList() {
shadowSubscriptionManager.setActiveSubscriptionInfos((SubscriptionInfo[]) null);
assertThat(shadowSubscriptionManager.getActiveSubscriptionInfo(123)).isNull();
shadowOf(subscriptionManager).setActiveSubscriptionInfos((SubscriptionInfo[]) null);
assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull();
}

@Test
public void getActiveSubscriptionInfo_shouldReturnNullForEmptyList() {
shadowSubscriptionManager.setActiveSubscriptionInfos();
assertThat(shadowSubscriptionManager.getActiveSubscriptionInfo(123)).isNull();
shadowOf(subscriptionManager).setActiveSubscriptionInfos();
assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfo(123)).isNull();
}

@Test
public void isNetworkRoaming_shouldReturnTrueIfSet() {
shadowSubscriptionManager.setNetworkRoamingStatus(123, /*isNetworkRoaming=*/ true);
assertThat(shadowSubscriptionManager.isNetworkRoaming(123)).isTrue();
shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /*isNetworkRoaming=*/ true);
assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue();
}

/** Multi act-asserts are discouraged but here we are testing the set+unset. */
@Test
public void isNetworkRoaming_shouldReturnFalseIfUnset() {
shadowSubscriptionManager.setNetworkRoamingStatus(123, /*isNetworkRoaming=*/ true);
assertThat(shadowSubscriptionManager.isNetworkRoaming(123)).isTrue();
shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /*isNetworkRoaming=*/ true);
assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue();

shadowSubscriptionManager.setNetworkRoamingStatus(123, /*isNetworkRoaming=*/ false);
assertThat(shadowSubscriptionManager.isNetworkRoaming(123)).isFalse();
shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /*isNetworkRoaming=*/ false);
assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isFalse();
}

/** Multi act-asserts are discouraged but here we are testing the set+clear. */
@Test
public void isNetworkRoaming_shouldReturnFalseOnClear() {
shadowSubscriptionManager.setNetworkRoamingStatus(123, /*isNetworkRoaming=*/ true);
assertThat(shadowSubscriptionManager.isNetworkRoaming(123)).isTrue();
shadowOf(subscriptionManager).setNetworkRoamingStatus(123, /*isNetworkRoaming=*/ true);
assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isTrue();

shadowSubscriptionManager.clearNetworkRoamingStatus();
assertThat(shadowSubscriptionManager.isNetworkRoaming(123)).isFalse();
shadowOf(subscriptionManager).clearNetworkRoamingStatus();
assertThat(shadowOf(subscriptionManager).isNetworkRoaming(123)).isFalse();
}

@Test
public void getActiveSubscriptionInfoCount_shouldReturnZeroIfActiveSubscriptionInfoListNotSet() {
shadowSubscriptionManager.setActiveSubscriptionInfoList(null);
shadowOf(subscriptionManager).setActiveSubscriptionInfoList(null);

assertThat(shadowSubscriptionManager.getActiveSubscriptionInfoCount()).isEqualTo(0);
assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoCount()).isEqualTo(0);
}

@Test
public void getActiveSubscriptionInfoCount_shouldReturnSizeOfActiveSubscriptionInfosList() {
SubscriptionInfo expectedSubscriptionInfo =
SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo();
shadowSubscriptionManager.setActiveSubscriptionInfos(expectedSubscriptionInfo);
shadowOf(subscriptionManager).setActiveSubscriptionInfos(expectedSubscriptionInfo);

assertThat(shadowSubscriptionManager.getActiveSubscriptionInfoCount()).isEqualTo(1);
assertThat(shadowOf(subscriptionManager).getActiveSubscriptionInfoCount()).isEqualTo(1);
}

@Test
public void getAvailableSubscriptionInfoList() {
SubscriptionInfo expectedSubscriptionInfo =
SubscriptionInfoBuilder.newBuilder().setId(123).buildSubscriptionInfo();

// default
assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).isEmpty();

// null condition
shadowOf(subscriptionManager).setAvailableSubscriptionInfos();
assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).isEmpty();

// set a specific subscription
shadowOf(subscriptionManager).setAvailableSubscriptionInfos(expectedSubscriptionInfo);
assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList()).hasSize(1);
assertThat(shadowOf(subscriptionManager).getAvailableSubscriptionInfoList().get(0))
.isSameAs(expectedSubscriptionInfo);
}

@Test
@Config(maxSdk = P)
public void getPhoneId_shouldReturnPhoneIdIfSet() {
ShadowSubscriptionManager.putPhoneId(123, 456);
assertThat(ShadowSubscriptionManager.getPhoneId(123)).isEqualTo(456);
assertThat(SubscriptionManager.getPhoneId(123)).isEqualTo(456);
}

@Test
@Config(maxSdk = P)
public void getPhoneId_shouldReturnInvalidIfNotSet() {
ShadowSubscriptionManager.putPhoneId(123, 456);
assertThat(ShadowSubscriptionManager.getPhoneId(456))
assertThat(SubscriptionManager.getPhoneId(456))
.isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX);
}

@Test
@Config(maxSdk = P)
public void getPhoneId_shouldReturnInvalidIfRemoved() {
ShadowSubscriptionManager.putPhoneId(123, 456);
ShadowSubscriptionManager.removePhoneId(123);
assertThat(ShadowSubscriptionManager.getPhoneId(123))
assertThat(SubscriptionManager.getPhoneId(123))
.isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX);
}

@Test
@Config(maxSdk = P)
public void getPhoneId_shouldReturnInvalidIfCleared() {
ShadowSubscriptionManager.putPhoneId(123, 456);
ShadowSubscriptionManager.clearPhoneIds();
assertThat(ShadowSubscriptionManager.getPhoneId(123))
assertThat(SubscriptionManager.getPhoneId(123))
.isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX);
}

@Test
@Config(maxSdk = P)
public void getPhoneId_shouldReturnInvalidIfReset() {
ShadowSubscriptionManager.putPhoneId(123, 456);
ShadowSubscriptionManager.reset();
assertThat(ShadowSubscriptionManager.getPhoneId(123))
assertThat(SubscriptionManager.getPhoneId(123))
.isEqualTo(ShadowSubscriptionManager.INVALID_PHONE_INDEX);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
import static android.os.Build.VERSION_CODES.LOLLIPOP_MR1;
import static android.os.Build.VERSION_CODES.M;
import static android.os.Build.VERSION_CODES.N;
import static android.os.Build.VERSION_CODES.O_MR1;
import static android.os.Build.VERSION_CODES.P;

import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -109,6 +110,11 @@ public static void setDefaultVoiceSubscriptionId(int defaultVoiceSubscriptionId)
* Managed by {@link #setActiveSubscriptionInfoList}.
*/
private List<SubscriptionInfo> subscriptionList = new ArrayList<>();
/**
* Cache of {@link SubscriptionInfo} used by {@link #getAvailableSubscriptionInfoList}. Managed by
* {@link #setAvailableSubscriptionInfos}.
*/
private List<SubscriptionInfo> availableSubscriptionList = new ArrayList<>();
/**
* List of listeners to be notified if the list of {@link SubscriptionInfo} changes. Managed by
* {@link #addOnSubscriptionsChangedListener} and {@link removeOnSubscriptionsChangedListener}.
Expand All @@ -129,6 +135,15 @@ protected List<SubscriptionInfo> getActiveSubscriptionInfoList() {
return subscriptionList;
}

/**
* Returns the available list of {@link SubscriptionInfo} that were set via {@link
* #setAvailableSubscriptionInfoList}.
*/
@Implementation(minSdk = O_MR1)
protected List<SubscriptionInfo> getAvailableSubscriptionInfoList() {
return availableSubscriptionList;
}

/**
* Returns the size of the list of {@link SubscriptionInfo} that were set via {@link
* #setActiveSubscriptionInfoList}. If no list was set, returns 0.
Expand Down Expand Up @@ -182,18 +197,41 @@ public void setActiveSubscriptionInfoList(List<SubscriptionInfo> list) {
dispatchOnSubscriptionsChanged();
}

/**
* Sets the active list of {@link SubscriptionInfo}. This call internally triggers {@link
* OnSubscriptionsChangedListener#onSubscriptionsChanged()} to all the listeners.
*
* @param list - The subscription info list, can be null.
*/
public void setAvailableSubscriptionInfoList(List<SubscriptionInfo> list) {
availableSubscriptionList = list;
dispatchOnSubscriptionsChanged();
}

/**
* Sets the active list of {@link SubscriptionInfo}. This call internally triggers {@link
* OnSubscriptionsChangedListener#onSubscriptionsChanged()} to all the listeners.
*/
public void setActiveSubscriptionInfos(SubscriptionInfo... infos) {
if (infos == null) {
setActiveSubscriptionInfoList(Collections.emptyList());
setActiveSubscriptionInfoList(ImmutableList.of());
} else {
setActiveSubscriptionInfoList(Arrays.asList(infos));
}
}

/**
* Sets the active list of {@link SubscriptionInfo}. This call internally triggers {@link
* OnSubscriptionsChangedListener#onSubscriptionsChanged()} to all the listeners.
*/
public void setAvailableSubscriptionInfos(SubscriptionInfo... infos) {
if (infos == null) {
setAvailableSubscriptionInfoList(ImmutableList.of());
} else {
setAvailableSubscriptionInfoList(Arrays.asList(infos));
}
}

/**
* Adds a listener to a local list of listeners. Will be triggered by {@link
* #setActiveSubscriptionInfoList} when the local list of {@link SubscriptionInfo} is updated.
Expand Down Expand Up @@ -378,6 +416,11 @@ public SubscriptionInfoBuilder setIsEmbedded(boolean isEmbedded) {
return this;
}

public SubscriptionInfoBuilder setMnc(String mnc) {
ReflectionHelpers.setField(subscriptionInfo, "mMnc", mnc);
return this;
}

// Use {@link #newBuilder} to construct builders.
private SubscriptionInfoBuilder() {}
}
Expand Down

0 comments on commit 95bac4a

Please sign in to comment.