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

Commit 1b0509b8 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: I01894730d4394a885c442866365b664231b4ed42
parent 64ecf87b
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -869,4 +870,27 @@ public final class TelephonyPermissions {
        }
        return true;
    }

    /**
     * Ensure the caller (or self, if not processing an IPC) has
     * {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE} or
     * {@link android.Manifest.permission#READ_PHONE_NUMBERS}.
     *
     * @throws SecurityException if the caller does not have the required permission/privileges
     */
    @RequiresPermission(anyOf = {
            android.Manifest.permission.READ_PHONE_NUMBERS,
            android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
    })
    public static boolean checkCallingOrSelfReadPrivilegedPhoneStatePermissionOrReadPhoneNumber(
            Context context, int subId, String callingPackage, @Nullable String callingFeatureId,
            String message) {
        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
            return false;
        }
        return (context.checkCallingOrSelfPermission(
                Manifest.permission.READ_PRIVILEGED_PHONE_STATE) == PERMISSION_GRANTED
                || checkCallingOrSelfReadPhoneNumber(context, subId, callingPackage,
                callingFeatureId, message));
    }
}
+34 −0
Original line number Diff line number Diff line
@@ -6050,6 +6050,7 @@ public class TelephonyManager {
     * @return an array of IMPU strings, with one IMPU per string, or null if
     *      not present or not loaded
     * @hide
     * @deprecated use {@link #getImsPublicUserIdentities()}
     */
    @UnsupportedAppUsage
    @Nullable
@@ -6069,6 +6070,39 @@ public class TelephonyManager {
        }
    }
    /**
     * Returns the IMS public user identities (IMPU) of the subscription that was loaded from the
     * ISIM records {@link #APPTYPE_ISIM}. This value is fetched from the Elementary file EF_IMPU.
     * The contents of the file are <b>Ip Multimedia Service Public User Identities</b> of the user
     * as defined in the section 4.2.4 of 3GPP TS 131 103. It contains one or more records.
     *
     * @return List of public user identities of type android.net.Uri or empty list  if
     *         EF_IMPU is not available.
     * @throws IllegalStateException in case the ISIM hasn’t been loaded
     * @throws SecurityException if the caller does not have the required permission/privilege
     * @hide
     */
    @NonNull
    @RequiresPermission(anyOf = {android.Manifest.permission.READ_PHONE_NUMBERS,
            android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE})
    @RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION)
    public List<Uri> getImsPublicUserIdentities() {
        try {
            IPhoneSubInfo info = getSubscriberInfoService();
            if (info == null) {
                throw new RuntimeException("IMPU error: Subscriber Info is null");
            }
            return info.getImsPublicUserIdentities(getSubId(), getOpPackageName(),
                    getAttributionTag());
        } catch (IllegalArgumentException | NullPointerException ex) {
            Rlog.e(TAG, "getImsPublicUserIdentities Exception = " + ex);
        } catch (RemoteException ex) {
            Rlog.e(TAG, "getImsPublicUserIdentities Exception = " + ex);
            ex.rethrowAsRuntimeException();
        }
        return Collections.EMPTY_LIST;
    }
    /**
     * Device call state: No activity.
     */
+8 −0
Original line number Diff line number Diff line
@@ -192,6 +192,14 @@ interface IPhoneSubInfo {
     */
    String[] getIsimImpu(int subId);

    /**
     * Fetches the ISIM public user identities (EF_IMPU) from UICC based on subId
     */
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(" +
    "anyOf={android.Manifest.permission.READ_PHONE_NUMBERS, android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE})")
     List<Uri> getImsPublicUserIdentities(int subId, String callingPackage,
                                           String callingFeatureId);

    /**
     * Returns the IMS Service Table (IST) that was loaded from the ISIM.
     * @return IMS Service Table or null if not present or not loaded