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

Commit b25144cc authored by arunvoddu's avatar arunvoddu
Browse files

IMPU system API implementation

Bug: 237347020
Test:atest frameworks/opt/telephony/tests/telephonytests/src/com/android/internal/telephony
Change-Id: I9bc81424178fdda70b8ed34229fe81351076ab52
parent 142a8b25
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