Loading core/res/AndroidManifest.xml +2 −3 Original line number Diff line number Diff line Loading @@ -1109,13 +1109,12 @@ grants your app this permission. If you don't need this permission, be sure your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> is 4 or higher. <p>Protection level: dangerous <p>Protection level: normal --> <permission android:name="android.permission.READ_PHONE_STATE" android:permissionGroup="android.permission-group.UNDEFINED" android:label="@string/permlab_readPhoneState" android:description="@string/permdesc_readPhoneState" android:protectionLevel="dangerous" /> 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. Loading telephony/common/com/android/internal/telephony/TelephonyPermissions.java +14 −9 Original line number Diff line number Diff line Loading @@ -437,8 +437,9 @@ public final class TelephonyPermissions { /** * Returns whether the caller can read phone numbers. * * <p>Besides apps with the ability to read phone state per {@link #checkReadPhoneState}, the * default SMS app and apps with READ_SMS or READ_PHONE_NUMBERS can also read phone numbers. * <p>Besides apps with the ability to read phone state per {@link #checkReadPhoneState} * (only prior to R), the default SMS app and apps with READ_SMS or READ_PHONE_NUMBERS * can also read phone numbers. */ public static boolean checkCallingOrSelfReadPhoneNumber( Context context, int subId, String callingPackage, @Nullable String callingFeatureId, Loading @@ -451,8 +452,9 @@ public final class TelephonyPermissions { /** * Returns whether the caller can read phone numbers. * * <p>Besides apps with the ability to read phone state per {@link #checkReadPhoneState}, the * default SMS app and apps with READ_SMS or READ_PHONE_NUMBERS can also read phone numbers. * <p>Besides apps with the ability to read phone state per {@link #checkReadPhoneState} * (only prior to R), the default SMS app and apps with READ_SMS or READ_PHONE_NUMBERS * can also read phone numbers. */ @VisibleForTesting public static boolean checkReadPhoneNumber( Loading @@ -468,12 +470,15 @@ public final class TelephonyPermissions { // NOTE(b/73308711): If an app has one of the following AppOps bits explicitly revoked, they // will be denied access, even if they have another permission and AppOps bit if needed. // First, check if we can read the phone state. // First, check if we can read the phone state and the SDK version is below R. try { ApplicationInfo info = context.getPackageManager().getApplicationInfoAsUser( callingPackage, 0, UserHandle.getUserHandleForUid(Binder.getCallingUid())); if (info.targetSdkVersion <= Build.VERSION_CODES.Q) { return checkReadPhoneState( context, subId, pid, uid, callingPackage, callingFeatureId, message); } catch (SecurityException readPhoneStateSecurityException) { context, subId, pid, uid, callingPackage, callingFeatureId, message); } } catch (SecurityException | PackageManager.NameNotFoundException e) { } // Can be read with READ_SMS too. try { Loading telephony/java/android/telephony/TelephonyManager.java +47 −9 Original line number Diff line number Diff line Loading @@ -4328,14 +4328,18 @@ public class TelephonyManager { /** * Returns the phone number string for line 1, for example, the MSISDN * for a GSM phone. Return null if it is unavailable. * for a GSM phone for a particular subscription. Return null if it is unavailable. * <p> * The default SMS app can also use this. * * <p>Requires Permission: * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}, * {@link android.Manifest.permission#READ_SMS READ_SMS}, * {@link android.Manifest.permission#READ_PHONE_NUMBERS READ_PHONE_NUMBERS}, * that the caller is the default SMS app, * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}). * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}) * for any API level. * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges or default SMS app @RequiresPermission(anyOf = { Loading @@ -4353,6 +4357,15 @@ public class TelephonyManager { * <p> * The default SMS app can also use this. * * <p>Requires Permission: * {@link android.Manifest.permission#READ_SMS READ_SMS}, * {@link android.Manifest.permission#READ_PHONE_NUMBERS READ_PHONE_NUMBERS}, * that the caller is the default SMS app, * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}) * for any API level. * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. * * @param subId whose phone number for line 1 is returned * @hide */ Loading Loading @@ -4533,25 +4546,50 @@ public class TelephonyManager { } /** * Returns the MSISDN string. * for a GSM phone. Return null if it is unavailable. * Returns the MSISDN string for a GSM phone. Return null if it is unavailable. * * <p>Requires Permission: * {@link android.Manifest.permission#READ_SMS READ_SMS}, * {@link android.Manifest.permission#READ_PHONE_NUMBERS READ_PHONE_NUMBERS}, * that the caller is the default SMS app, * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}) * for any API level. * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. * * @hide */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @RequiresPermission(anyOf = { android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS }) @UnsupportedAppUsage public String getMsisdn() { return getMsisdn(getSubId()); } /** * Returns the MSISDN string. * for a GSM phone. Return null if it is unavailable. * Returns the MSISDN string for a GSM phone. Return null if it is unavailable. * * @param subId for which msisdn is returned * * <p>Requires Permission: * {@link android.Manifest.permission#READ_SMS READ_SMS}, * {@link android.Manifest.permission#READ_PHONE_NUMBERS READ_PHONE_NUMBERS}, * that the caller is the default SMS app, * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}) * for any API level. * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. * * @hide */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @RequiresPermission(anyOf = { android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS }) @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) public String getMsisdn(int subId) { try { Loading Loading
core/res/AndroidManifest.xml +2 −3 Original line number Diff line number Diff line Loading @@ -1109,13 +1109,12 @@ grants your app this permission. If you don't need this permission, be sure your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> is 4 or higher. <p>Protection level: dangerous <p>Protection level: normal --> <permission android:name="android.permission.READ_PHONE_STATE" android:permissionGroup="android.permission-group.UNDEFINED" android:label="@string/permlab_readPhoneState" android:description="@string/permdesc_readPhoneState" android:protectionLevel="dangerous" /> 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. Loading
telephony/common/com/android/internal/telephony/TelephonyPermissions.java +14 −9 Original line number Diff line number Diff line Loading @@ -437,8 +437,9 @@ public final class TelephonyPermissions { /** * Returns whether the caller can read phone numbers. * * <p>Besides apps with the ability to read phone state per {@link #checkReadPhoneState}, the * default SMS app and apps with READ_SMS or READ_PHONE_NUMBERS can also read phone numbers. * <p>Besides apps with the ability to read phone state per {@link #checkReadPhoneState} * (only prior to R), the default SMS app and apps with READ_SMS or READ_PHONE_NUMBERS * can also read phone numbers. */ public static boolean checkCallingOrSelfReadPhoneNumber( Context context, int subId, String callingPackage, @Nullable String callingFeatureId, Loading @@ -451,8 +452,9 @@ public final class TelephonyPermissions { /** * Returns whether the caller can read phone numbers. * * <p>Besides apps with the ability to read phone state per {@link #checkReadPhoneState}, the * default SMS app and apps with READ_SMS or READ_PHONE_NUMBERS can also read phone numbers. * <p>Besides apps with the ability to read phone state per {@link #checkReadPhoneState} * (only prior to R), the default SMS app and apps with READ_SMS or READ_PHONE_NUMBERS * can also read phone numbers. */ @VisibleForTesting public static boolean checkReadPhoneNumber( Loading @@ -468,12 +470,15 @@ public final class TelephonyPermissions { // NOTE(b/73308711): If an app has one of the following AppOps bits explicitly revoked, they // will be denied access, even if they have another permission and AppOps bit if needed. // First, check if we can read the phone state. // First, check if we can read the phone state and the SDK version is below R. try { ApplicationInfo info = context.getPackageManager().getApplicationInfoAsUser( callingPackage, 0, UserHandle.getUserHandleForUid(Binder.getCallingUid())); if (info.targetSdkVersion <= Build.VERSION_CODES.Q) { return checkReadPhoneState( context, subId, pid, uid, callingPackage, callingFeatureId, message); } catch (SecurityException readPhoneStateSecurityException) { context, subId, pid, uid, callingPackage, callingFeatureId, message); } } catch (SecurityException | PackageManager.NameNotFoundException e) { } // Can be read with READ_SMS too. try { Loading
telephony/java/android/telephony/TelephonyManager.java +47 −9 Original line number Diff line number Diff line Loading @@ -4328,14 +4328,18 @@ public class TelephonyManager { /** * Returns the phone number string for line 1, for example, the MSISDN * for a GSM phone. Return null if it is unavailable. * for a GSM phone for a particular subscription. Return null if it is unavailable. * <p> * The default SMS app can also use this. * * <p>Requires Permission: * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}, * {@link android.Manifest.permission#READ_SMS READ_SMS}, * {@link android.Manifest.permission#READ_PHONE_NUMBERS READ_PHONE_NUMBERS}, * that the caller is the default SMS app, * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}). * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}) * for any API level. * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. */ @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges or default SMS app @RequiresPermission(anyOf = { Loading @@ -4353,6 +4357,15 @@ public class TelephonyManager { * <p> * The default SMS app can also use this. * * <p>Requires Permission: * {@link android.Manifest.permission#READ_SMS READ_SMS}, * {@link android.Manifest.permission#READ_PHONE_NUMBERS READ_PHONE_NUMBERS}, * that the caller is the default SMS app, * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}) * for any API level. * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. * * @param subId whose phone number for line 1 is returned * @hide */ Loading Loading @@ -4533,25 +4546,50 @@ public class TelephonyManager { } /** * Returns the MSISDN string. * for a GSM phone. Return null if it is unavailable. * Returns the MSISDN string for a GSM phone. Return null if it is unavailable. * * <p>Requires Permission: * {@link android.Manifest.permission#READ_SMS READ_SMS}, * {@link android.Manifest.permission#READ_PHONE_NUMBERS READ_PHONE_NUMBERS}, * that the caller is the default SMS app, * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}) * for any API level. * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. * * @hide */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @RequiresPermission(anyOf = { android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS }) @UnsupportedAppUsage public String getMsisdn() { return getMsisdn(getSubId()); } /** * Returns the MSISDN string. * for a GSM phone. Return null if it is unavailable. * Returns the MSISDN string for a GSM phone. Return null if it is unavailable. * * @param subId for which msisdn is returned * * <p>Requires Permission: * {@link android.Manifest.permission#READ_SMS READ_SMS}, * {@link android.Manifest.permission#READ_PHONE_NUMBERS READ_PHONE_NUMBERS}, * that the caller is the default SMS app, * or that the caller has carrier privileges (see {@link #hasCarrierPrivileges}) * for any API level. * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * for apps targeting SDK API level 29 and below. * * @hide */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @RequiresPermission(anyOf = { android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS }) @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) public String getMsisdn(int subId) { try { Loading