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

Commit b04ce6d6 authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Automerger Merge Worker
Browse files

Merge "Add non dangerous read phone state permission" am: 12c048e4 am:...

Merge "Add non dangerous read phone state permission" am: 12c048e4 am: efd83737 am: f987679c am: 7042bccf

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1882949

Change-Id: I7dc136cd80291783306c2218c633a137bfbc2111
parents e44b5fe7 7042bccf
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ package android {
    field public static final String POST_NOTIFICATIONS = "android.permission.POST_NOTIFICATIONS";
    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";
@@ -43115,11 +43116,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();
@@ -43172,7 +43173,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();
@@ -43184,10 +43185,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
@@ -1210,6 +1210,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
@@ -1355,6 +1355,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
@@ -1898,9 +1898,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());
@@ -2962,7 +2963,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
     *
@@ -2985,7 +2988,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()));
    }
@@ -3023,10 +3028,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());
    }
@@ -10188,7 +10197,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
@@ -10199,7 +10210,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);
@@ -10218,14 +10230,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 {
@@ -12627,11 +12642,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);
@@ -12767,14 +12784,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 {