Merge "Fetches sim service table from the EF_SST elementary file of the sim"

This commit is contained in:
Arun kumar Voddu
2022-07-12 02:29:02 +00:00
committed by Android (Google) Code Review
2 changed files with 78 additions and 0 deletions

View File

@@ -8416,6 +8416,51 @@ public class TelephonyManager {
return -1;
}
/**
* Fetches the sim service table from the EFUST/EFIST based on the application type
* {@link #APPTYPE_USIM} or {@link #APPTYPE_ISIM}. The return value is hexaString format
* representing X bytes (x >= 1). Each bit of every byte indicates which optional services
* are available for the given application type.
* The USIM service table EF is described in as per Section 4.2.8 of 3GPP TS 31.102.
* The ISIM service table EF is described in as per Section 4.2.7 of 3GPP TS 31.103.
* The list of services mapped to the exact nth byte of response as mentioned in Section 4.2
* .7 of 3GPP TS 31.103. Eg. Service n°1: Local Phone Book, Service n°2: Fixed Dialling
* Numbers (FDN) - Bit 1 and 2 of the 1st Byte represent service Local Phone Book and Fixed
* Dialling Numbers (FDN)respectively. The coding format for each service type should be
* interpreted as bit = 1: service available;bit = 0:service not available.
*
* @param appType of type int of either {@link #APPTYPE_USIM} or {@link #APPTYPE_ISIM}.
* @return HexString represents sim service table else null.
* @throws SecurityException if the caller does not have the required permission/privileges
* @hide
*/
@Nullable
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
@RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION)
public String getSimServiceTable(int appType) {
try {
IPhoneSubInfo info = getSubscriberInfoService();
if (info == null) {
Rlog.e(TAG, "getSimServiceTable(): IPhoneSubInfo is null");
return null;
}
//Fetches the sim service table based on subId and appType
if (appType == APPTYPE_ISIM) {
return info.getIsimIst(getSubId());
} else if ((appType == APPTYPE_USIM)) {
return info.getSimServiceTable(getSubId(), APPTYPE_USIM);
} else {
return null;
}
} catch (RemoteException ex) {
Rlog.e(TAG, "getSimServiceTable(): RemoteException=" + ex.getMessage());
} catch (NullPointerException ex) {
Rlog.e(TAG, "getSimServiceTable(): NullPointerException=" + ex.getMessage());
}
return null;
}
/**
* Resets the {@link android.telephony.ims.ImsService} associated with the specified sim slot.
* Used by diagnostic apps to force the IMS stack to be disabled and re-enabled in an effort to
@@ -15920,6 +15965,17 @@ public class TelephonyManager {
sITelephony = telephony;
}
/**
* Setup sIPhoneSubInfo for testing.
* @hide
*/
@VisibleForTesting
public static void setupIPhoneSubInfoForTest(IPhoneSubInfo iPhoneSubInfo) {
synchronized (sCacheLock) {
sIPhoneSubInfo = iPhoneSubInfo;
}
}
/**
* Whether device can connect to 5G network when two SIMs are active.
* @hide

View File

@@ -232,4 +232,26 @@ interface IPhoneSubInfo {
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)")
String getSmscIdentity(int subId, int appType);
/**
* Fetches the sim service table from the EFUST/EFIST based on the application type
* {@link #APPTYPE_USIM} or {@link #APPTYPE_ISIM}. The return value is hexaString format
* representing X bytes (x >= 1). Each bit of every byte indicates which optional services
* are available for the given application type.
* The USIM service table EF is described in as per Section 4.2.8 of 3GPP TS 31.102.
* The ISIM service table EF is described in as per Section 4.2.7 of 3GPP TS 31.103.
* The list of services mapped to the exact nth byte of response as mentioned in Section 4.2
* .7 of 3GPP TS 31.103. Eg. Service n°1: Local Phone Book, Service n°2: Fixed Dialling
* Numbers (FDN) - Bit 1 and 2 of the 1st Byte represent service Local Phone Book and Fixed
* Dialling Numbers (FDN)respectively. The coding format for each service type should be
* interpreted as bit = 1: service available;bit = 0:service not available.
*
* @param appType of type int of either {@link #APPTYPE_USIM} or {@link #APPTYPE_ISIM}.
* @return HexString represents sim service table else null.
* @throws SecurityException if the caller does not have the required permission/privileges
* @hide
*/
@JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)")
String getSimServiceTable(int subId, int appType);
}