Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9b3fdc5 authored by Arun kumar Voddu's avatar Arun kumar Voddu Committed by Android (Google) Code Review
Browse files

Merge "IMPU system API implementation"

parents 33c1872d b25144cc
Loading
Loading
Loading
Loading
+39 −0
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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
    */
    */
+83 −0
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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;
@@ -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";
@@ -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