Loading src/java/com/android/internal/telephony/SubscriptionController.java +2 −2 Original line number Diff line number Diff line Loading @@ -3339,9 +3339,9 @@ public class SubscriptionController extends ISub.Stub { + logicalSlotIndex); } // Getting physicalSlotIndex // Getting and validating the physicalSlotIndex. int physicalSlotIndex = getPhysicalSlotIndexFromLogicalSlotIndex(logicalSlotIndex); if (!SubscriptionManager.isValidSlotIndex(physicalSlotIndex)) { if (physicalSlotIndex == SubscriptionManager.INVALID_SIM_SLOT_INDEX) { return SubscriptionManager.INVALID_SUBSCRIPTION_ID; } Loading tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java +61 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.Manifest; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.os.Bundle; Loading @@ -38,11 +39,15 @@ import android.os.UserHandle; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.UiccSlotInfo; import android.test.mock.MockContentResolver; import android.test.suitebuilder.annotation.SmallTest; import androidx.test.filters.FlakyTest; import com.android.internal.telephony.uicc.UiccController; import com.android.internal.telephony.uicc.UiccSlot; import org.junit.After; import org.junit.Before; import org.junit.Test; Loading @@ -63,6 +68,8 @@ public class SubscriptionControllerTest extends TelephonyTest { private MockContentResolver mMockContentResolver; private FakeTelephonyProvider mFakeTelephonyProvider; @Mock private UiccSlot mUiccSlot; @Mock private ITelephonyRegistry.Stub mTelephonyRegisteryMock; @Mock private MultiSimSettingController mMultiSimSettingControllerMock; Loading Loading @@ -883,4 +890,58 @@ public class SubscriptionControllerTest extends TelephonyTest { // Make sure the return sub ids are sorted by slot index assertTrue("active sub ids = " + subIds, Arrays.equals(subIds, new int[]{2, 1})); } @Test public void testGetEnabledSubscriptionIdSingleSIM() { // A single SIM device may have logical slot 0 mapped to physical slot 1 // (i.e. logical slot -1 mapped to physical slot 0) UiccSlotInfo slot0 = getFakeUiccSlotInfo(false, -1); UiccSlotInfo slot1 = getFakeUiccSlotInfo(true, 0); UiccSlotInfo [] uiccSlotInfos = {slot0, slot1}; UiccSlot [] uiccSlots = {mUiccSlot, mUiccSlot}; doReturn(uiccSlotInfos).when(mTelephonyManager).getUiccSlotsInfo(); doReturn(uiccSlots).when(mUiccController).getUiccSlots(); assertEquals(2, UiccController.getInstance().getUiccSlots().length); ContentResolver resolver = mContext.getContentResolver(); // logical 0 should find physical 1, has settings enabled subscription 0 Settings.Global.putInt(resolver, Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT + 1, 0); int enabledSubscription = mSubscriptionControllerUT.getEnabledSubscriptionId(0); assertEquals(0, enabledSubscription); } @Test public void testGetEnabledSubscriptionIdDualSIM() { doReturn(SINGLE_SIM).when(mTelephonyManager).getSimCount(); doReturn(SINGLE_SIM).when(mTelephonyManager).getPhoneCount(); // A dual SIM device may have logical slot 0 mapped to physical slot 0 // (i.e. logical slot 1 mapped to physical slot 1) UiccSlotInfo slot0 = getFakeUiccSlotInfo(true, 0); UiccSlotInfo slot1 = getFakeUiccSlotInfo(true, 1); UiccSlotInfo [] uiccSlotInfos = {slot0, slot1}; UiccSlot [] uiccSlots = {mUiccSlot, mUiccSlot}; doReturn(2).when(mTelephonyManager).getPhoneCount(); doReturn(uiccSlotInfos).when(mTelephonyManager).getUiccSlotsInfo(); doReturn(uiccSlots).when(mUiccController).getUiccSlots(); assertEquals(2, UiccController.getInstance().getUiccSlots().length); ContentResolver resolver = mContext.getContentResolver(); // logical 0 should find physical 0, has settings enabled subscription 0 Settings.Global.putInt(resolver, Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT + 0, 0); Settings.Global.putInt(resolver, Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT + 1, 1); int enabledSubscription = mSubscriptionControllerUT.getEnabledSubscriptionId(0); int secondEabledSubscription = mSubscriptionControllerUT.getEnabledSubscriptionId(1); assertEquals(0, enabledSubscription); assertEquals(1, secondEabledSubscription); } private UiccSlotInfo getFakeUiccSlotInfo(boolean active, int logicalSlotIndex) { return new UiccSlotInfo(active, false, "fake card Id", UiccSlotInfo.CARD_STATE_INFO_PRESENT, logicalSlotIndex, true, true); } } Loading
src/java/com/android/internal/telephony/SubscriptionController.java +2 −2 Original line number Diff line number Diff line Loading @@ -3339,9 +3339,9 @@ public class SubscriptionController extends ISub.Stub { + logicalSlotIndex); } // Getting physicalSlotIndex // Getting and validating the physicalSlotIndex. int physicalSlotIndex = getPhysicalSlotIndexFromLogicalSlotIndex(logicalSlotIndex); if (!SubscriptionManager.isValidSlotIndex(physicalSlotIndex)) { if (physicalSlotIndex == SubscriptionManager.INVALID_SIM_SLOT_INDEX) { return SubscriptionManager.INVALID_SUBSCRIPTION_ID; } Loading
tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java +61 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.Manifest; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.os.Bundle; Loading @@ -38,11 +39,15 @@ import android.os.UserHandle; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.UiccSlotInfo; import android.test.mock.MockContentResolver; import android.test.suitebuilder.annotation.SmallTest; import androidx.test.filters.FlakyTest; import com.android.internal.telephony.uicc.UiccController; import com.android.internal.telephony.uicc.UiccSlot; import org.junit.After; import org.junit.Before; import org.junit.Test; Loading @@ -63,6 +68,8 @@ public class SubscriptionControllerTest extends TelephonyTest { private MockContentResolver mMockContentResolver; private FakeTelephonyProvider mFakeTelephonyProvider; @Mock private UiccSlot mUiccSlot; @Mock private ITelephonyRegistry.Stub mTelephonyRegisteryMock; @Mock private MultiSimSettingController mMultiSimSettingControllerMock; Loading Loading @@ -883,4 +890,58 @@ public class SubscriptionControllerTest extends TelephonyTest { // Make sure the return sub ids are sorted by slot index assertTrue("active sub ids = " + subIds, Arrays.equals(subIds, new int[]{2, 1})); } @Test public void testGetEnabledSubscriptionIdSingleSIM() { // A single SIM device may have logical slot 0 mapped to physical slot 1 // (i.e. logical slot -1 mapped to physical slot 0) UiccSlotInfo slot0 = getFakeUiccSlotInfo(false, -1); UiccSlotInfo slot1 = getFakeUiccSlotInfo(true, 0); UiccSlotInfo [] uiccSlotInfos = {slot0, slot1}; UiccSlot [] uiccSlots = {mUiccSlot, mUiccSlot}; doReturn(uiccSlotInfos).when(mTelephonyManager).getUiccSlotsInfo(); doReturn(uiccSlots).when(mUiccController).getUiccSlots(); assertEquals(2, UiccController.getInstance().getUiccSlots().length); ContentResolver resolver = mContext.getContentResolver(); // logical 0 should find physical 1, has settings enabled subscription 0 Settings.Global.putInt(resolver, Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT + 1, 0); int enabledSubscription = mSubscriptionControllerUT.getEnabledSubscriptionId(0); assertEquals(0, enabledSubscription); } @Test public void testGetEnabledSubscriptionIdDualSIM() { doReturn(SINGLE_SIM).when(mTelephonyManager).getSimCount(); doReturn(SINGLE_SIM).when(mTelephonyManager).getPhoneCount(); // A dual SIM device may have logical slot 0 mapped to physical slot 0 // (i.e. logical slot 1 mapped to physical slot 1) UiccSlotInfo slot0 = getFakeUiccSlotInfo(true, 0); UiccSlotInfo slot1 = getFakeUiccSlotInfo(true, 1); UiccSlotInfo [] uiccSlotInfos = {slot0, slot1}; UiccSlot [] uiccSlots = {mUiccSlot, mUiccSlot}; doReturn(2).when(mTelephonyManager).getPhoneCount(); doReturn(uiccSlotInfos).when(mTelephonyManager).getUiccSlotsInfo(); doReturn(uiccSlots).when(mUiccController).getUiccSlots(); assertEquals(2, UiccController.getInstance().getUiccSlots().length); ContentResolver resolver = mContext.getContentResolver(); // logical 0 should find physical 0, has settings enabled subscription 0 Settings.Global.putInt(resolver, Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT + 0, 0); Settings.Global.putInt(resolver, Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT + 1, 1); int enabledSubscription = mSubscriptionControllerUT.getEnabledSubscriptionId(0); int secondEabledSubscription = mSubscriptionControllerUT.getEnabledSubscriptionId(1); assertEquals(0, enabledSubscription); assertEquals(1, secondEabledSubscription); } private UiccSlotInfo getFakeUiccSlotInfo(boolean active, int logicalSlotIndex) { return new UiccSlotInfo(active, false, "fake card Id", UiccSlotInfo.CARD_STATE_INFO_PRESENT, logicalSlotIndex, true, true); } }