Loading src/java/com/android/internal/telephony/PhoneSubInfoController.java +39 −0 Original line number Original line Diff line number Diff line Loading @@ -47,6 +47,9 @@ import com.android.internal.telephony.uicc.UiccCardApplication; import com.android.internal.telephony.uicc.UiccPort; import com.android.internal.telephony.uicc.UiccPort; import com.android.telephony.Rlog; import com.android.telephony.Rlog; import java.util.ArrayList; import java.util.List; public class PhoneSubInfoController extends IPhoneSubInfo.Stub { public class PhoneSubInfoController extends IPhoneSubInfo.Stub { private static final String TAG = "PhoneSubInfoController"; private static final String TAG = "PhoneSubInfoController"; private static final boolean DBG = true; private static final boolean DBG = true; Loading Loading @@ -410,6 +413,42 @@ public class PhoneSubInfoController extends IPhoneSubInfo.Stub { }); }); } } /** * Fetches the ISIM public user identities (EF_IMPU) from UICC based on subId * * @param subId subscriptionId * @param callingPackage package name of the caller * @param callingFeatureId feature Id of the caller * @return List of public user identities of type android.net.Uri or empty list if * EF_IMPU is not available. * @throws IllegalArgumentException if the subscriptionId is not valid * @throws IllegalStateException in case the ISIM hasn’t been loaded. * @throws SecurityException if the caller does not have the required permission */ public List<Uri> getImsPublicUserIdentities(int subId, String callingPackage, String callingFeatureId) { if (TelephonyPermissions. checkCallingOrSelfReadPrivilegedPhoneStatePermissionOrReadPhoneNumber( mContext, subId, callingPackage, callingFeatureId, "getImsPublicUserIdentities")) { Phone phone = getPhone(subId); assert phone != null; IsimRecords isimRecords = phone.getIsimRecords(); if (isimRecords != null) { String[] impus = isimRecords.getIsimImpu(); List<Uri> impuList = new ArrayList<>(); for (String impu : impus) { if (impu != null && impu.trim().length() > 0) { impuList.add(Uri.parse(impu)); } } return impuList; } throw new IllegalStateException("ISIM is not loaded"); } else { throw new IllegalArgumentException("Invalid SubscriptionID = " + subId); } } /** /** * get the Isim Ist based on subId * get the Isim Ist based on subId */ */ Loading tests/telephonytests/src/com/android/internal/telephony/PhoneSubInfoControllerTest.java +83 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.telephony.TelephonyManager.APPTYPE_ISIM; import static android.telephony.TelephonyManager.APPTYPE_USIM; import static android.telephony.TelephonyManager.APPTYPE_USIM; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assert.fail; Loading @@ -35,6 +36,7 @@ import android.app.AppOpsManager; import android.app.PropertyInvalidatedCache; import android.app.PropertyInvalidatedCache; import android.content.Context; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Binder; import android.os.Binder; import android.os.Build; import android.os.Build; import android.os.RemoteException; import android.os.RemoteException; Loading @@ -52,6 +54,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.Test; import org.mockito.Mockito; import org.mockito.Mockito; import java.util.List; public class PhoneSubInfoControllerTest extends TelephonyTest { public class PhoneSubInfoControllerTest extends TelephonyTest { private static final String FEATURE_ID = "myfeatureId"; private static final String FEATURE_ID = "myfeatureId"; private static final String PSI_SMSC_TEL1 = "tel:+91123456789"; private static final String PSI_SMSC_TEL1 = "tel:+91123456789"; Loading Loading @@ -1212,4 +1216,83 @@ public class PhoneSubInfoControllerTest extends TelephonyTest { assertTrue(ex.getMessage().contains("Invalid SubscriptionID")); assertTrue(ex.getMessage().contains("Invalid SubscriptionID")); } } } } @Test public void getImsPublicUserIdentities() { String[] refImpuArray = new String[3]; refImpuArray[0] = "012345678"; refImpuArray[1] = "sip:test@verify.com"; refImpuArray[2] = "tel:+91987754324"; doReturn(mIsimUiccRecords).when(mPhone).getIsimRecords(); doReturn(refImpuArray).when(mIsimUiccRecords).getIsimImpu(); List<Uri> impuList = mPhoneSubInfoControllerUT.getImsPublicUserIdentities(0, TAG, FEATURE_ID); assertNotNull(impuList); assertEquals(refImpuArray.length, impuList.size()); assertEquals(impuList.get(0).toString(), refImpuArray[0]); assertEquals(impuList.get(1).toString(), refImpuArray[1]); assertEquals(impuList.get(2).toString(), refImpuArray[2]); } @Test public void getImsPublicUserIdentities_InvalidImpu() { String[] refImpuArray = new String[3]; refImpuArray[0] = null; refImpuArray[2] = ""; refImpuArray[2] = "tel:+91987754324"; doReturn(mIsimUiccRecords).when(mPhone).getIsimRecords(); doReturn(refImpuArray).when(mIsimUiccRecords).getIsimImpu(); List<Uri> impuList = mPhoneSubInfoControllerUT.getImsPublicUserIdentities(0, TAG, FEATURE_ID); assertNotNull(impuList); // Null or Empty string cannot be converted to URI assertEquals(refImpuArray.length - 2, impuList.size()); } @Test public void getImsPublicUserIdentities_IsimNotLoadedError() { doReturn(null).when(mPhone).getIsimRecords(); try { mPhoneSubInfoControllerUT.getImsPublicUserIdentities(0, TAG, FEATURE_ID); fail(); } catch (Exception ex) { assertTrue(ex instanceof IllegalStateException); assertTrue(ex.getMessage().contains("ISIM is not loaded")); } } @Test public void getImsPublicUserIdentities_InValidSubIdCheck() { try { mPhoneSubInfoControllerUT.getImsPublicUserIdentities(-1, TAG, FEATURE_ID); fail(); } catch (Exception ex) { assertTrue(ex instanceof IllegalArgumentException); assertTrue(ex.getMessage().contains("Invalid SubscriptionID")); } } @Test public void getImsPublicUserIdentities_NoReadPrivilegedPermission() { mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); String[] refImpuArray = new String[3]; refImpuArray[0] = "012345678"; refImpuArray[1] = "sip:test@verify.com"; refImpuArray[2] = "tel:+91987754324"; doReturn(mIsimUiccRecords).when(mPhone).getIsimRecords(); doReturn(refImpuArray).when(mIsimUiccRecords).getIsimImpu(); List<Uri> impuList = mPhoneSubInfoControllerUT.getImsPublicUserIdentities(0, TAG, FEATURE_ID); assertNotNull(impuList); assertEquals(refImpuArray.length, impuList.size()); assertEquals(impuList.get(0).toString(), refImpuArray[0]); assertEquals(impuList.get(1).toString(), refImpuArray[1]); assertEquals(impuList.get(2).toString(), refImpuArray[2]); mContextFixture.addCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE); } } } No newline at end of file Loading
src/java/com/android/internal/telephony/PhoneSubInfoController.java +39 −0 Original line number Original line Diff line number Diff line Loading @@ -47,6 +47,9 @@ import com.android.internal.telephony.uicc.UiccCardApplication; import com.android.internal.telephony.uicc.UiccPort; import com.android.internal.telephony.uicc.UiccPort; import com.android.telephony.Rlog; import com.android.telephony.Rlog; import java.util.ArrayList; import java.util.List; public class PhoneSubInfoController extends IPhoneSubInfo.Stub { public class PhoneSubInfoController extends IPhoneSubInfo.Stub { private static final String TAG = "PhoneSubInfoController"; private static final String TAG = "PhoneSubInfoController"; private static final boolean DBG = true; private static final boolean DBG = true; Loading Loading @@ -410,6 +413,42 @@ public class PhoneSubInfoController extends IPhoneSubInfo.Stub { }); }); } } /** * Fetches the ISIM public user identities (EF_IMPU) from UICC based on subId * * @param subId subscriptionId * @param callingPackage package name of the caller * @param callingFeatureId feature Id of the caller * @return List of public user identities of type android.net.Uri or empty list if * EF_IMPU is not available. * @throws IllegalArgumentException if the subscriptionId is not valid * @throws IllegalStateException in case the ISIM hasn’t been loaded. * @throws SecurityException if the caller does not have the required permission */ public List<Uri> getImsPublicUserIdentities(int subId, String callingPackage, String callingFeatureId) { if (TelephonyPermissions. checkCallingOrSelfReadPrivilegedPhoneStatePermissionOrReadPhoneNumber( mContext, subId, callingPackage, callingFeatureId, "getImsPublicUserIdentities")) { Phone phone = getPhone(subId); assert phone != null; IsimRecords isimRecords = phone.getIsimRecords(); if (isimRecords != null) { String[] impus = isimRecords.getIsimImpu(); List<Uri> impuList = new ArrayList<>(); for (String impu : impus) { if (impu != null && impu.trim().length() > 0) { impuList.add(Uri.parse(impu)); } } return impuList; } throw new IllegalStateException("ISIM is not loaded"); } else { throw new IllegalArgumentException("Invalid SubscriptionID = " + subId); } } /** /** * get the Isim Ist based on subId * get the Isim Ist based on subId */ */ Loading
tests/telephonytests/src/com/android/internal/telephony/PhoneSubInfoControllerTest.java +83 −0 Original line number Original line Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.telephony.TelephonyManager.APPTYPE_ISIM; import static android.telephony.TelephonyManager.APPTYPE_USIM; import static android.telephony.TelephonyManager.APPTYPE_USIM; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assert.fail; Loading @@ -35,6 +36,7 @@ import android.app.AppOpsManager; import android.app.PropertyInvalidatedCache; import android.app.PropertyInvalidatedCache; import android.content.Context; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Binder; import android.os.Binder; import android.os.Build; import android.os.Build; import android.os.RemoteException; import android.os.RemoteException; Loading @@ -52,6 +54,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.Test; import org.mockito.Mockito; import org.mockito.Mockito; import java.util.List; public class PhoneSubInfoControllerTest extends TelephonyTest { public class PhoneSubInfoControllerTest extends TelephonyTest { private static final String FEATURE_ID = "myfeatureId"; private static final String FEATURE_ID = "myfeatureId"; private static final String PSI_SMSC_TEL1 = "tel:+91123456789"; private static final String PSI_SMSC_TEL1 = "tel:+91123456789"; Loading Loading @@ -1212,4 +1216,83 @@ public class PhoneSubInfoControllerTest extends TelephonyTest { assertTrue(ex.getMessage().contains("Invalid SubscriptionID")); assertTrue(ex.getMessage().contains("Invalid SubscriptionID")); } } } } @Test public void getImsPublicUserIdentities() { String[] refImpuArray = new String[3]; refImpuArray[0] = "012345678"; refImpuArray[1] = "sip:test@verify.com"; refImpuArray[2] = "tel:+91987754324"; doReturn(mIsimUiccRecords).when(mPhone).getIsimRecords(); doReturn(refImpuArray).when(mIsimUiccRecords).getIsimImpu(); List<Uri> impuList = mPhoneSubInfoControllerUT.getImsPublicUserIdentities(0, TAG, FEATURE_ID); assertNotNull(impuList); assertEquals(refImpuArray.length, impuList.size()); assertEquals(impuList.get(0).toString(), refImpuArray[0]); assertEquals(impuList.get(1).toString(), refImpuArray[1]); assertEquals(impuList.get(2).toString(), refImpuArray[2]); } @Test public void getImsPublicUserIdentities_InvalidImpu() { String[] refImpuArray = new String[3]; refImpuArray[0] = null; refImpuArray[2] = ""; refImpuArray[2] = "tel:+91987754324"; doReturn(mIsimUiccRecords).when(mPhone).getIsimRecords(); doReturn(refImpuArray).when(mIsimUiccRecords).getIsimImpu(); List<Uri> impuList = mPhoneSubInfoControllerUT.getImsPublicUserIdentities(0, TAG, FEATURE_ID); assertNotNull(impuList); // Null or Empty string cannot be converted to URI assertEquals(refImpuArray.length - 2, impuList.size()); } @Test public void getImsPublicUserIdentities_IsimNotLoadedError() { doReturn(null).when(mPhone).getIsimRecords(); try { mPhoneSubInfoControllerUT.getImsPublicUserIdentities(0, TAG, FEATURE_ID); fail(); } catch (Exception ex) { assertTrue(ex instanceof IllegalStateException); assertTrue(ex.getMessage().contains("ISIM is not loaded")); } } @Test public void getImsPublicUserIdentities_InValidSubIdCheck() { try { mPhoneSubInfoControllerUT.getImsPublicUserIdentities(-1, TAG, FEATURE_ID); fail(); } catch (Exception ex) { assertTrue(ex instanceof IllegalArgumentException); assertTrue(ex.getMessage().contains("Invalid SubscriptionID")); } } @Test public void getImsPublicUserIdentities_NoReadPrivilegedPermission() { mContextFixture.removeCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); String[] refImpuArray = new String[3]; refImpuArray[0] = "012345678"; refImpuArray[1] = "sip:test@verify.com"; refImpuArray[2] = "tel:+91987754324"; doReturn(mIsimUiccRecords).when(mPhone).getIsimRecords(); doReturn(refImpuArray).when(mIsimUiccRecords).getIsimImpu(); List<Uri> impuList = mPhoneSubInfoControllerUT.getImsPublicUserIdentities(0, TAG, FEATURE_ID); assertNotNull(impuList); assertEquals(refImpuArray.length, impuList.size()); assertEquals(impuList.get(0).toString(), refImpuArray[0]); assertEquals(impuList.get(1).toString(), refImpuArray[1]); assertEquals(impuList.get(2).toString(), refImpuArray[2]); mContextFixture.addCallingOrSelfPermission(READ_PRIVILEGED_PHONE_STATE); } } } No newline at end of file