From 73ec8f963d46ea96a5a4d63d3086a362bf345320 Mon Sep 17 00:00:00 2001 From: Chad Brubaker Date: Thu, 10 Nov 2016 11:24:40 -0800 Subject: [PATCH] Add READ_PHONE_NUMBER permission READ_PHONE_NUMBER allows only access to the phone number and not all the other things that READ_PHONE_STATE allows access to. READ_PHONE_NUMBER will be accessible to ephemeral apps while READ_PHONE_STATE will no longer be. Test: Verified that getLine1Number works with READ_PHONE_NUMBER from an epemheral app Test: cts-tradefed run cts -m CtsPermission2TestCases Change-Id: I599c19227f886adbe8efe346a78d51e88ab46379 --- api/current.txt | 2 ++ api/system-current.txt | 2 ++ api/test-current.txt | 2 ++ core/java/android/app/AppOpsManager.java | 15 ++++++++++++++- core/res/AndroidManifest.xml | 9 +++++++++ core/res/res/values/strings.xml | 5 +++++ .../java/android/telephony/TelephonyManager.java | 4 ++++ 7 files changed, 38 insertions(+), 1 deletion(-) diff --git a/api/current.txt b/api/current.txt index 6bec747426069..78dcee8424ca8 100644 --- a/api/current.txt +++ b/api/current.txt @@ -99,6 +99,7 @@ package android { field public static final java.lang.String READ_FRAME_BUFFER = "android.permission.READ_FRAME_BUFFER"; field public static final deprecated java.lang.String READ_INPUT_STATE = "android.permission.READ_INPUT_STATE"; field public static final java.lang.String READ_LOGS = "android.permission.READ_LOGS"; + field public static final java.lang.String READ_PHONE_NUMBER = "android.permission.READ_PHONE_NUMBER"; field public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE"; field public static final java.lang.String READ_SMS = "android.permission.READ_SMS"; field public static final java.lang.String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS"; @@ -4067,6 +4068,7 @@ package android.app { field public static final java.lang.String OPSTR_READ_CELL_BROADCASTS = "android:read_cell_broadcasts"; field public static final java.lang.String OPSTR_READ_CONTACTS = "android:read_contacts"; field public static final java.lang.String OPSTR_READ_EXTERNAL_STORAGE = "android:read_external_storage"; + field public static final java.lang.String OPSTR_READ_PHONE_NUMBER = "android:read_phone_number"; field public static final java.lang.String OPSTR_READ_PHONE_STATE = "android:read_phone_state"; field public static final java.lang.String OPSTR_READ_SMS = "android:read_sms"; field public static final java.lang.String OPSTR_RECEIVE_MMS = "android:receive_mms"; diff --git a/api/system-current.txt b/api/system-current.txt index 1f3fd7dc8a93b..f7a8f07007eed 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -172,6 +172,7 @@ package android { field public static final java.lang.String READ_LOGS = "android.permission.READ_LOGS"; field public static final java.lang.String READ_NETWORK_USAGE_HISTORY = "android.permission.READ_NETWORK_USAGE_HISTORY"; field public static final java.lang.String READ_OEM_UNLOCK_STATE = "android.permission.READ_OEM_UNLOCK_STATE"; + field public static final java.lang.String READ_PHONE_NUMBER = "android.permission.READ_PHONE_NUMBER"; field public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE"; field public static final java.lang.String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE"; field public static final java.lang.String READ_SEARCH_INDEXABLES = "android.permission.READ_SEARCH_INDEXABLES"; @@ -4203,6 +4204,7 @@ package android.app { field public static final java.lang.String OPSTR_READ_CELL_BROADCASTS = "android:read_cell_broadcasts"; field public static final java.lang.String OPSTR_READ_CONTACTS = "android:read_contacts"; field public static final java.lang.String OPSTR_READ_EXTERNAL_STORAGE = "android:read_external_storage"; + field public static final java.lang.String OPSTR_READ_PHONE_NUMBER = "android:read_phone_number"; field public static final java.lang.String OPSTR_READ_PHONE_STATE = "android:read_phone_state"; field public static final java.lang.String OPSTR_READ_SMS = "android:read_sms"; field public static final java.lang.String OPSTR_RECEIVE_MMS = "android:receive_mms"; diff --git a/api/test-current.txt b/api/test-current.txt index 4a4bf70a589d5..e285c2c3c5055 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -99,6 +99,7 @@ package android { field public static final java.lang.String READ_FRAME_BUFFER = "android.permission.READ_FRAME_BUFFER"; field public static final deprecated java.lang.String READ_INPUT_STATE = "android.permission.READ_INPUT_STATE"; field public static final java.lang.String READ_LOGS = "android.permission.READ_LOGS"; + field public static final java.lang.String READ_PHONE_NUMBER = "android.permission.READ_PHONE_NUMBER"; field public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE"; field public static final java.lang.String READ_SMS = "android.permission.READ_SMS"; field public static final java.lang.String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS"; @@ -4077,6 +4078,7 @@ package android.app { field public static final java.lang.String OPSTR_READ_CELL_BROADCASTS = "android:read_cell_broadcasts"; field public static final java.lang.String OPSTR_READ_CONTACTS = "android:read_contacts"; field public static final java.lang.String OPSTR_READ_EXTERNAL_STORAGE = "android:read_external_storage"; + field public static final java.lang.String OPSTR_READ_PHONE_NUMBER = "android:read_phone_number"; field public static final java.lang.String OPSTR_READ_PHONE_STATE = "android:read_phone_state"; field public static final java.lang.String OPSTR_READ_SMS = "android:read_sms"; field public static final java.lang.String OPSTR_RECEIVE_MMS = "android:receive_mms"; diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index ba6bc159cdf29..67fbc5a46832d 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -241,8 +241,10 @@ public class AppOpsManager { public static final int OP_RUN_IN_BACKGROUND = 63; /** @hide */ public static final int OP_AUDIO_ACCESSIBILITY_VOLUME = 64; + /** @hide Read the phone number. */ + public static final int OP_READ_PHONE_NUMBER = 65; /** @hide */ - public static final int _NUM_OP = 65; + public static final int _NUM_OP = 66; /** Access to coarse location information. */ public static final String OPSTR_COARSE_LOCATION = "android:coarse_location"; @@ -343,6 +345,8 @@ public class AppOpsManager { /** @hide Get device accounts. */ public static final String OPSTR_GET_ACCOUNTS = "android:get_accounts"; + public static final String OPSTR_READ_PHONE_NUMBER + = "android:read_phone_number"; private static final int[] RUNTIME_PERMISSIONS_OPS = { // Contacts @@ -367,6 +371,7 @@ public class AppOpsManager { OP_FINE_LOCATION, // Phone OP_READ_PHONE_STATE, + OP_READ_PHONE_NUMBER, OP_CALL_PHONE, OP_READ_CALL_LOG, OP_WRITE_CALL_LOG, @@ -455,6 +460,7 @@ public class AppOpsManager { OP_GET_ACCOUNTS, OP_RUN_IN_BACKGROUND, OP_AUDIO_ACCESSIBILITY_VOLUME, + OP_READ_PHONE_NUMBER, }; /** @@ -527,6 +533,7 @@ public class AppOpsManager { OPSTR_GET_ACCOUNTS, null, null, // OP_AUDIO_ACCESSIBILITY_VOLUME + OPSTR_READ_PHONE_NUMBER, }; /** @@ -599,6 +606,7 @@ public class AppOpsManager { "GET_ACCOUNTS", "RUN_IN_BACKGROUND", "AUDIO_ACCESSIBILITY_VOLUME", + "READ_PHONE_NUMBER", }; /** @@ -671,6 +679,7 @@ public class AppOpsManager { Manifest.permission.GET_ACCOUNTS, null, // no permission for running in background null, // no permission for changing accessibility volume + Manifest.permission.READ_PHONE_NUMBER, }; /** @@ -744,6 +753,7 @@ public class AppOpsManager { null, // GET_ACCOUNTS null, // RUN_IN_BACKGROUND UserManager.DISALLOW_ADJUST_VOLUME, //AUDIO_ACCESSIBILITY_VOLUME + null, // READ_PHONE_NUMBER }; /** @@ -816,6 +826,7 @@ public class AppOpsManager { false, // GET_ACCOUNTS false, // RUN_IN_BACKGROUND false, // AUDIO_ACCESSIBILITY_VOLUME + false, // READ_PHONE_NUMBER }; /** @@ -887,6 +898,7 @@ public class AppOpsManager { AppOpsManager.MODE_ALLOWED, AppOpsManager.MODE_ALLOWED, // OP_RUN_IN_BACKGROUND AppOpsManager.MODE_ALLOWED, // OP_AUDIO_ACCESSIBILITY_VOLUME + AppOpsManager.MODE_ALLOWED, }; /** @@ -962,6 +974,7 @@ public class AppOpsManager { false, false, false, // OP_AUDIO_ACCESSIBILITY_VOLUME + false, }; /** diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index fbad143f55033..de90c18ed5771 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -769,6 +769,15 @@ android:permissionGroup="android.permission-group.PHONE" android:label="@string/permlab_readPhoneState" android:description="@string/permdesc_readPhoneState" + android:protectionLevel="dangerous" /> + + + + read phone number + + Allows the app to access the phone number of the device. + prevent tablet from sleeping diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 457fd88e1f7ca..918ef5eccbde2 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -2275,6 +2275,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * OR * {@link android.Manifest.permission#READ_SMS} + * OR + * {@link android.Manifest.permission#READ_PHONE_NUMBER} *

* The default SMS app can also use this. */ @@ -2290,6 +2292,8 @@ public class TelephonyManager { * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} * OR * {@link android.Manifest.permission#READ_SMS} + * OR + * {@link android.Manifest.permission#READ_PHONE_NUMBER} *

* The default SMS app can also use this. *