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

Commit 12c048e4 authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Gerrit Code Review
Browse files

Merge "Add non dangerous read phone state permission"

parents a859e86b 4219d77a
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ package android {
    field @Deprecated public static final String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY";
    field @Deprecated public static final String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS";
    field public static final String QUERY_ALL_PACKAGES = "android.permission.QUERY_ALL_PACKAGES";
    field public static final String READ_BASIC_PHONE_STATE = "android.permission.READ_BASIC_PHONE_STATE";
    field public static final String READ_CALENDAR = "android.permission.READ_CALENDAR";
    field public static final String READ_CALL_LOG = "android.permission.READ_CALL_LOG";
    field public static final String READ_CONTACTS = "android.permission.READ_CONTACTS";
@@ -42722,11 +42723,11 @@ package android.telephony {
    method public int getCarrierIdFromSimMccMnc();
    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.telephony.CellLocation getCellLocation();
    method public int getDataActivity();
    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getDataNetworkType();
    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_BASIC_PHONE_STATE}) public int getDataNetworkType();
    method public int getDataState();
    method @Deprecated @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDeviceId();
    method @Deprecated @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDeviceId(int);
    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceSoftwareVersion();
    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_BASIC_PHONE_STATE}) public String getDeviceSoftwareVersion();
    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList();
    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList(int);
    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<java.lang.String> getEquivalentHomePlmns();
@@ -42779,7 +42780,7 @@ package android.telephony {
    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVisualVoicemailPackageName();
    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailAlphaTag();
    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber();
    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getVoiceNetworkType();
    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_BASIC_PHONE_STATE}) public int getVoiceNetworkType();
    method @Nullable public android.net.Uri getVoicemailRingtoneUri(android.telecom.PhoneAccountHandle);
    method public boolean hasCarrierPrivileges();
    method public boolean hasIccCard();
@@ -42791,10 +42792,10 @@ package android.telephony {
    method @Deprecated public String iccTransmitApduLogicalChannel(int, int, int, int, int, int, String);
    method public boolean isConcurrentVoiceAndDataSupported();
    method public boolean isDataCapable();
    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE"}) public boolean isDataConnectionAllowed();
    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataEnabled();
    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean isDataEnabledForReason(int);
    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataRoamingEnabled();
    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_BASIC_PHONE_STATE}) public boolean isDataConnectionAllowed();
    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_BASIC_PHONE_STATE}) public boolean isDataEnabled();
    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.READ_BASIC_PHONE_STATE}) public boolean isDataEnabledForReason(int);
    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_BASIC_PHONE_STATE}) public boolean isDataRoamingEnabled();
    method public boolean isEmergencyNumber(@NonNull String);
    method public boolean isHearingAidCompatibilitySupported();
    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE"}) public boolean isManualNetworkSelectionAllowed();
+8 −0
Original line number Diff line number Diff line
@@ -1199,6 +1199,14 @@
        android:description="@string/permdesc_readPhoneState"
        android:protectionLevel="dangerous" />

    <!-- Allows read only access to phone state with a non dangerous permission,
         including the information like cellular network type, software version. -->
    <permission android:name="android.permission.READ_BASIC_PHONE_STATE"
            android:permissionGroup="android.permission-group.UNDEFINED"
            android:label="@string/permlab_readBasicPhoneState"
            android:description="@string/permdesc_readBasicPhoneState"
            android:protectionLevel="normal" />

    <!-- Allows read access to the device's phone number(s). This is a subset of the capabilities
         granted by {@link #READ_PHONE_STATE} but is exposed to instant applications.
         <p>Protection level: dangerous-->
+6 −0
Original line number Diff line number Diff line
@@ -1350,6 +1350,12 @@
      phone number and device IDs, whether a call is active, and the remote number
      connected by a call.</string>

    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR_LIMIT=80]-->
    <string name="permlab_readBasicPhoneState">read basic telephony status and identity </string>
    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR_LIMIT=NONE] -->
    <string name="permdesc_readBasicPhoneState">Allows the app to access the basic telephony
        features of the device.</string>

    <!-- Title of an application permission.  When granted the user is giving access to a third
         party app to route its calls through the system. -->
    <string name="permlab_manageOwnCalls">route calls through the system</string>
+20 −0
Original line number Diff line number Diff line
@@ -107,6 +107,26 @@ public final class TelephonyPermissions {
        }
    }


    /**
     * Check whether the caller (or self, if not processing an IPC) has non dangerous
     * read phone state permission.
     * @param context app context
     * @param message detail message
     * @return true if permission is granted, else false
     */
    public static boolean checkCallingOrSelfReadNonDangerousPhoneStateNoThrow(
            Context context, String message) {
        try {
            context.enforcePermission(
                    Manifest.permission.READ_BASIC_PHONE_STATE,
                    Binder.getCallingPid(), Binder.getCallingUid(), message);
            return true;
        } catch (SecurityException se) {
            return false;
        }
    }

    /**
     * Check whether the app with the given pid/uid can read phone state.
     *
+30 −16
Original line number Diff line number Diff line
@@ -1895,9 +1895,10 @@ public class TelephonyManager {
     * the IMEI/SV for GSM phones. Return null if the software version is
     * not available.
     * <p>
     * Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}.
     */
    @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
    @RequiresPermission(anyOf = {
            android.Manifest.permission.READ_PHONE_STATE,
            android.Manifest.permission.READ_BASIC_PHONE_STATE})
    @Nullable
    public String getDeviceSoftwareVersion() {
        return getDeviceSoftwareVersion(getSlotIndex());
@@ -2959,7 +2960,9 @@ public class TelephonyManager {
     * when opportunistic network is providing cellular internet connection to the user.
     *
     * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
     * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
     * or {@link android.Manifest.permission#READ_BASIC_PHONE_STATE
     * READ_BASIC_PHONE_STATE} or that the calling app has carrier privileges
     * (see {@link #hasCarrierPrivileges}).
     *
     * @return the network type
     *
@@ -2982,7 +2985,9 @@ public class TelephonyManager {
     * @see #NETWORK_TYPE_NR
     */
    @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges
    @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
    @RequiresPermission(anyOf = {
            android.Manifest.permission.READ_PHONE_STATE,
            android.Manifest.permission.READ_BASIC_PHONE_STATE})
    public @NetworkType int getDataNetworkType() {
        return getDataNetworkType(getSubId(SubscriptionManager.getActiveDataSubscriptionId()));
    }
@@ -3020,10 +3025,14 @@ public class TelephonyManager {
     * Returns the NETWORK_TYPE_xxxx for voice
     *
     * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
     * or that the calling app has carrier privileges (see {@link #hasCarrierPrivileges}).
     * or {@link android.Manifest.permission#READ_BASIC_PHONE_STATE
     * READ_BASIC_PHONE_STATE} or that the calling app has carrier privileges
     * (see {@link #hasCarrierPrivileges}).
     */
    @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges
    @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
    @RequiresPermission(anyOf = {
            android.Manifest.permission.READ_PHONE_STATE,
            android.Manifest.permission.READ_BASIC_PHONE_STATE})
    public @NetworkType int getVoiceNetworkType() {
        return getVoiceNetworkType(getSubId());
    }
@@ -9975,7 +9984,9 @@ public class TelephonyManager {
     *
     * <p>Requires one of the following permissions:
     * {@link android.Manifest.permission#ACCESS_NETWORK_STATE},
     * {@link android.Manifest.permission#MODIFY_PHONE_STATE}, or that the calling app has carrier
     * {@link android.Manifest.permission#MODIFY_PHONE_STATE}, or
     * {@link android.Manifest.permission#READ_BASIC_PHONE_STATE
     * READ_BASIC_PHONE_STATE} or that the calling app has carrier
     * privileges (see {@link #hasCarrierPrivileges}).
     *
     * <p>Note that this does not take into account any data restrictions that may be present on the
@@ -9986,7 +9997,8 @@ public class TelephonyManager {
     */
    @RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE,
            android.Manifest.permission.MODIFY_PHONE_STATE,
            android.Manifest.permission.READ_PHONE_STATE})
            android.Manifest.permission.READ_PHONE_STATE,
            android.Manifest.permission.READ_BASIC_PHONE_STATE})
    public boolean isDataEnabled() {
        try {
            return isDataEnabledForReason(DATA_ENABLED_REASON_USER);
@@ -10005,14 +10017,17 @@ public class TelephonyManager {
     *
     * <p>Requires one of the following permissions:
     * {@link android.Manifest.permission#ACCESS_NETWORK_STATE},
     * {@link android.Manifest.permission#READ_PHONE_STATE} or that the calling app
     * {@link android.Manifest.permission#READ_PHONE_STATE} or
     * {@link android.Manifest.permission#READ_BASIC_PHONE_STATE
     * READ_BASIC_PHONE_STATE} or that the calling app
     * has carrier privileges (see {@link #hasCarrierPrivileges}).
     *
     * @return {@code true} if the data roaming is enabled on the subscription, otherwise return
     * {@code false}.
     */
    @RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE,
            android.Manifest.permission.READ_PHONE_STATE})
            android.Manifest.permission.READ_PHONE_STATE,
            android.Manifest.permission.READ_BASIC_PHONE_STATE})
    public boolean isDataRoamingEnabled() {
        boolean isDataRoamingEnabled = false;
        try {
@@ -12418,11 +12433,13 @@ public class TelephonyManager {
     * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} or
     * {@link android.Manifest.permission#ACCESS_NETWORK_STATE} or
     * {@link android.Manifest.permission#MODIFY_PHONE_STATE}
     * {@link android.Manifest.permission#READ_BASIC_PHONE_STATE}
     * @throws IllegalStateException if the Telephony process is not currently available.
     */
    @RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE,
            android.Manifest.permission.READ_PHONE_STATE,
            android.Manifest.permission.MODIFY_PHONE_STATE
            android.Manifest.permission.MODIFY_PHONE_STATE,
            android.Manifest.permission.READ_BASIC_PHONE_STATE
    })
    public boolean isDataEnabledForReason(@DataEnabledReason int reason) {
        return isDataEnabledForReason(getSubId(), reason);
@@ -12558,14 +12575,11 @@ public class TelephonyManager {
     *   <LI>And possibly others.</LI>
     * </UL>
     * @return {@code true} if the overall data connection is allowed; {@code false} if not.
     * <p>Requires Permission:
     * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} or
     * {@link android.Manifest.permission#ACCESS_NETWORK_STATE} or
     * android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE
     */
    @RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE,
            android.Manifest.permission.READ_PHONE_STATE,
            android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE})
            android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
            android.Manifest.permission.READ_BASIC_PHONE_STATE})
    public boolean isDataConnectionAllowed() {
        boolean retVal = false;
        try {