summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2018-10-06 20:14:06 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-10-06 20:14:06 +0000
commit10efed0b49e5ae7a302c2cba37aae1982732d072 (patch)
treeeda1a3bcb3e171ed9bc67c847bcb2109f2d6409f /core/java/android
parentce10f9b15f3acf3543ce21d443cf03033232bb7f (diff)
parent9351985f7accbe36e3dc66818f2c5b47b5457ff6 (diff)
Merge "Remove SMS access for apps other than current SMS handler"
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/AppOpsManager.java305
-rw-r--r--core/java/android/content/ContentProvider.java31
-rw-r--r--core/java/android/provider/Settings.java12
3 files changed, 184 insertions, 164 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 9c47e795c81d..a05d01b5ad9a 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1256,85 +1256,85 @@ public class AppOpsManager {
* This specifies the default mode for each operation.
*/
private static int[] sOpDefaultMode = new int[] {
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_IGNORED, // OP_WRITE_SMS
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_DEFAULT, // OP_WRITE_SETTINGS
- AppOpsManager.MODE_DEFAULT, // OP_SYSTEM_ALERT_WINDOW
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_DEFAULT, // OP_GET_USAGE_STATS
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_IGNORED, // OP_PROJECT_MEDIA
- AppOpsManager.MODE_IGNORED, // OP_ACTIVATE_VPN
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ERRORED, // OP_MOCK_LOCATION
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED, // OP_TURN_ON_SCREEN
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_ALLOWED, // OP_RUN_IN_BACKGROUND
- AppOpsManager.MODE_ALLOWED, // OP_AUDIO_ACCESSIBILITY_VOLUME
- AppOpsManager.MODE_ALLOWED,
- AppOpsManager.MODE_DEFAULT, // OP_REQUEST_INSTALL_PACKAGES
- AppOpsManager.MODE_ALLOWED, // OP_PICTURE_IN_PICTURE
- AppOpsManager.MODE_DEFAULT, // OP_INSTANT_APP_START_FOREGROUND
- AppOpsManager.MODE_ALLOWED, // ANSWER_PHONE_CALLS
- AppOpsManager.MODE_ALLOWED, // OP_RUN_ANY_IN_BACKGROUND
- AppOpsManager.MODE_ALLOWED, // OP_CHANGE_WIFI_STATE
- AppOpsManager.MODE_ALLOWED, // REQUEST_DELETE_PACKAGES
- AppOpsManager.MODE_ALLOWED, // OP_BIND_ACCESSIBILITY_SERVICE
- AppOpsManager.MODE_ALLOWED, // ACCEPT_HANDOVER
- AppOpsManager.MODE_ERRORED, // MANAGE_IPSEC_TUNNELS
- AppOpsManager.MODE_ALLOWED, // OP_START_FOREGROUND
- AppOpsManager.MODE_ALLOWED, // OP_BLUETOOTH_SCAN
- AppOpsManager.MODE_ALLOWED, // USE_BIOMETRIC
+ AppOpsManager.MODE_ALLOWED, // COARSE_LOCATION
+ AppOpsManager.MODE_ALLOWED, // FINE_LOCATION
+ AppOpsManager.MODE_ALLOWED, // GPS
+ AppOpsManager.MODE_ALLOWED, // VIBRATE
+ AppOpsManager.MODE_ALLOWED, // READ_CONTACTS
+ AppOpsManager.MODE_ALLOWED, // WRITE_CONTACTS
+ AppOpsManager.MODE_ALLOWED, // READ_CALL_LOG
+ AppOpsManager.MODE_ALLOWED, // WRITE_CALL_LOG
+ AppOpsManager.MODE_ALLOWED, // READ_CALENDAR
+ AppOpsManager.MODE_ALLOWED, // WRITE_CALENDAR
+ AppOpsManager.MODE_ALLOWED, // WIFI_SCAN
+ AppOpsManager.MODE_ALLOWED, // POST_NOTIFICATION
+ AppOpsManager.MODE_ALLOWED, // NEIGHBORING_CELLS
+ AppOpsManager.MODE_ALLOWED, // CALL_PHONE
+ AppOpsManager.MODE_DEFAULT, // READ_SMS
+ AppOpsManager.MODE_DEFAULT, // WRITE_SMS
+ AppOpsManager.MODE_DEFAULT, // RECEIVE_SMS
+ AppOpsManager.MODE_ALLOWED, // RECEIVE_EMERGENCY_BROADCAST
+ AppOpsManager.MODE_ALLOWED, // RECEIVE_MMS
+ AppOpsManager.MODE_DEFAULT, // RECEIVE_WAP_PUSH
+ AppOpsManager.MODE_DEFAULT, // SEND_SMS
+ AppOpsManager.MODE_ALLOWED, // READ_ICC_SMS
+ AppOpsManager.MODE_ALLOWED, // WRITE_ICC_SMS
+ AppOpsManager.MODE_DEFAULT, // WRITE_SETTINGS
+ AppOpsManager.MODE_DEFAULT, // SYSTEM_ALERT_WINDOW
+ AppOpsManager.MODE_ALLOWED, // ACCESS_NOTIFICATIONS
+ AppOpsManager.MODE_ALLOWED, // CAMERA
+ AppOpsManager.MODE_ALLOWED, // RECORD_AUDIO
+ AppOpsManager.MODE_ALLOWED, // PLAY_AUDIO
+ AppOpsManager.MODE_ALLOWED, // READ_CLIPBOARD
+ AppOpsManager.MODE_ALLOWED, // WRITE_CLIPBOARD
+ AppOpsManager.MODE_ALLOWED, // TAKE_MEDIA_BUTTONS
+ AppOpsManager.MODE_ALLOWED, // TAKE_AUDIO_FOCUS
+ AppOpsManager.MODE_ALLOWED, // AUDIO_MASTER_VOLUME
+ AppOpsManager.MODE_ALLOWED, // AUDIO_VOICE_VOLUME
+ AppOpsManager.MODE_ALLOWED, // AUDIO_RING_VOLUME
+ AppOpsManager.MODE_ALLOWED, // AUDIO_MEDIA_VOLUME
+ AppOpsManager.MODE_ALLOWED, // AUDIO_ALARM_VOLUME
+ AppOpsManager.MODE_ALLOWED, // AUDIO_NOTIFICATION_VOLUME
+ AppOpsManager.MODE_ALLOWED, // AUDIO_BLUETOOTH_VOLUME
+ AppOpsManager.MODE_ALLOWED, // WAKE_LOCK
+ AppOpsManager.MODE_ALLOWED, // MONITOR_LOCATION
+ AppOpsManager.MODE_ALLOWED, // MONITOR_HIGH_POWER_LOCATION
+ AppOpsManager.MODE_DEFAULT, // GET_USAGE_STATS
+ AppOpsManager.MODE_ALLOWED, // MUTE_MICROPHONE
+ AppOpsManager.MODE_ALLOWED, // TOAST_WINDOW
+ AppOpsManager.MODE_IGNORED, // PROJECT_MEDIA
+ AppOpsManager.MODE_IGNORED, // ACTIVATE_VPN
+ AppOpsManager.MODE_ALLOWED, // WRITE_WALLPAPER
+ AppOpsManager.MODE_ALLOWED, // ASSIST_STRUCTURE
+ AppOpsManager.MODE_ALLOWED, // ASSIST_SCREENSHOT
+ AppOpsManager.MODE_ALLOWED, // READ_PHONE_STATE
+ AppOpsManager.MODE_ALLOWED, // ADD_VOICEMAIL
+ AppOpsManager.MODE_ALLOWED, // USE_SIP
+ AppOpsManager.MODE_ALLOWED, // PROCESS_OUTGOING_CALLS
+ AppOpsManager.MODE_ALLOWED, // USE_FINGERPRINT
+ AppOpsManager.MODE_ALLOWED, // BODY_SENSORS
+ AppOpsManager.MODE_DEFAULT, // READ_CELL_BROADCASTS
+ AppOpsManager.MODE_ERRORED, // MOCK_LOCATION
+ AppOpsManager.MODE_ALLOWED, // READ_EXTERNAL_STORAGE
+ AppOpsManager.MODE_ALLOWED, // WRITE_EXTERNAL_STORAGE
+ AppOpsManager.MODE_ALLOWED, // TURN_SCREEN_ON
+ AppOpsManager.MODE_ALLOWED, // GET_ACCOUNTS
+ AppOpsManager.MODE_ALLOWED, // RUN_IN_BACKGROUND
+ AppOpsManager.MODE_ALLOWED, // AUDIO_ACCESSIBILITY_VOLUME
+ AppOpsManager.MODE_ALLOWED, // READ_PHONE_NUMBERS
+ AppOpsManager.MODE_DEFAULT, // REQUEST_INSTALL_PACKAGES
+ AppOpsManager.MODE_ALLOWED, // PICTURE_IN_PICTURE
+ AppOpsManager.MODE_DEFAULT, // INSTANT_APP_START_FOREGROUND
+ AppOpsManager.MODE_ALLOWED, // ANSWER_PHONE_CALLS
+ AppOpsManager.MODE_ALLOWED, // RUN_ANY_IN_BACKGROUND
+ AppOpsManager.MODE_ALLOWED, // CHANGE_WIFI_STATE
+ AppOpsManager.MODE_ALLOWED, // REQUEST_DELETE_PACKAGES
+ AppOpsManager.MODE_ALLOWED, // BIND_ACCESSIBILITY_SERVICE
+ AppOpsManager.MODE_ALLOWED, // ACCEPT_HANDOVER
+ AppOpsManager.MODE_ERRORED, // MANAGE_IPSEC_TUNNELS
+ AppOpsManager.MODE_ALLOWED, // START_FOREGROUND
+ AppOpsManager.MODE_ALLOWED, // BLUETOOTH_SCAN
+ AppOpsManager.MODE_ALLOWED, // USE_BIOMETRIC
};
/**
@@ -1345,80 +1345,80 @@ public class AppOpsManager {
* for whichever app is selected as the current SMS app).
*/
private static boolean[] sOpDisableReset = new boolean[] {
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- true, // OP_WRITE_SMS
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false, // OP_AUDIO_ACCESSIBILITY_VOLUME
- false,
- false, // OP_REQUEST_INSTALL_PACKAGES
- false, // OP_PICTURE_IN_PICTURE
- false,
+ false, // COARSE_LOCATION
+ false, // FINE_LOCATION
+ false, // GPS
+ false, // VIBRATE
+ false, // READ_CONTACTS
+ false, // WRITE_CONTACTS
+ false, // READ_CALL_LOG
+ false, // WRITE_CALL_LOG
+ false, // READ_CALENDAR
+ false, // WRITE_CALENDAR
+ false, // WIFI_SCAN
+ false, // POST_NOTIFICATION
+ false, // NEIGHBORING_CELLS
+ false, // CALL_PHONE
+ true, // READ_SMS
+ true, // WRITE_SMS
+ true, // RECEIVE_SMS
+ false, // RECEIVE_EMERGENCY_BROADCAST
+ false, // RECEIVE_MMS
+ true, // RECEIVE_WAP_PUSH
+ true, // SEND_SMS
+ false, // READ_ICC_SMS
+ false, // WRITE_ICC_SMS
+ false, // WRITE_SETTINGS
+ false, // SYSTEM_ALERT_WINDOW
+ false, // ACCESS_NOTIFICATIONS
+ false, // CAMERA
+ false, // RECORD_AUDIO
+ false, // PLAY_AUDIO
+ false, // READ_CLIPBOARD
+ false, // WRITE_CLIPBOARD
+ false, // TAKE_MEDIA_BUTTONS
+ false, // TAKE_AUDIO_FOCUS
+ false, // AUDIO_MASTER_VOLUME
+ false, // AUDIO_VOICE_VOLUME
+ false, // AUDIO_RING_VOLUME
+ false, // AUDIO_MEDIA_VOLUME
+ false, // AUDIO_ALARM_VOLUME
+ false, // AUDIO_NOTIFICATION_VOLUME
+ false, // AUDIO_BLUETOOTH_VOLUME
+ false, // WAKE_LOCK
+ false, // MONITOR_LOCATION
+ false, // MONITOR_HIGH_POWER_LOCATION
+ false, // GET_USAGE_STATS
+ false, // MUTE_MICROPHONE
+ false, // TOAST_WINDOW
+ false, // PROJECT_MEDIA
+ false, // ACTIVATE_VPN
+ false, // WRITE_WALLPAPER
+ false, // ASSIST_STRUCTURE
+ false, // ASSIST_SCREENSHOT
+ false, // READ_PHONE_STATE
+ false, // ADD_VOICEMAIL
+ false, // USE_SIP
+ false, // PROCESS_OUTGOING_CALLS
+ false, // USE_FINGERPRINT
+ false, // BODY_SENSORS
+ true, // READ_CELL_BROADCASTS
+ false, // MOCK_LOCATION
+ false, // READ_EXTERNAL_STORAGE
+ false, // WRITE_EXTERNAL_STORAGE
+ false, // TURN_SCREEN_ON
+ false, // GET_ACCOUNTS
+ false, // RUN_IN_BACKGROUND
+ false, // AUDIO_ACCESSIBILITY_VOLUME
+ false, // READ_PHONE_NUMBERS
+ false, // REQUEST_INSTALL_PACKAGES
+ false, // PICTURE_IN_PICTURE
+ false, // INSTANT_APP_START_FOREGROUND
false, // ANSWER_PHONE_CALLS
- false, // OP_RUN_ANY_IN_BACKGROUND
- false, // OP_CHANGE_WIFI_STATE
- false, // OP_REQUEST_DELETE_PACKAGES
- false, // OP_BIND_ACCESSIBILITY_SERVICE
+ false, // RUN_ANY_IN_BACKGROUND
+ false, // CHANGE_WIFI_STATE
+ false, // REQUEST_DELETE_PACKAGES
+ false, // BIND_ACCESSIBILITY_SERVICE
false, // ACCEPT_HANDOVER
false, // MANAGE_IPSEC_TUNNELS
false, // START_FOREGROUND
@@ -1957,6 +1957,7 @@ public class AppOpsManager {
* @hide
*/
@SystemApi
+ @TestApi
@RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES)
public void setUidMode(String appOp, int uid, int mode) {
try {
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index a13a438cd7f7..2a03787f134c 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -18,6 +18,7 @@ package android.content;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.app.AppOpsManager.MODE_ALLOWED;
+import static android.app.AppOpsManager.MODE_DEFAULT;
import static android.app.AppOpsManager.MODE_ERRORED;
import static android.app.AppOpsManager.MODE_IGNORED;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -569,11 +570,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
return mode;
}
- if (mReadOp != AppOpsManager.OP_NONE) {
- return mAppOpsManager.noteProxyOp(mReadOp, callingPkg);
- }
-
- return AppOpsManager.MODE_ALLOWED;
+ return noteProxyOp(callingPkg, mReadOp);
}
private int enforceWritePermission(String callingPkg, Uri uri, IBinder callerToken)
@@ -583,8 +580,13 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
return mode;
}
- if (mWriteOp != AppOpsManager.OP_NONE) {
- return mAppOpsManager.noteProxyOp(mWriteOp, callingPkg);
+ return noteProxyOp(callingPkg, mWriteOp);
+ }
+
+ private int noteProxyOp(String callingPkg, int op) {
+ if (op != AppOpsManager.OP_NONE) {
+ int mode = mAppOpsManager.noteProxyOp(op, callingPkg);
+ return mode == MODE_DEFAULT ? interpretDefaultAppOpMode(op) : mode;
}
return AppOpsManager.MODE_ALLOWED;
@@ -609,12 +611,17 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
return MODE_ERRORED;
}
- final int permOp = AppOpsManager.permissionToOpCode(permission);
- if (permOp != AppOpsManager.OP_NONE) {
- return mTransport.mAppOpsManager.noteProxyOp(permOp, callingPkg);
- }
+ return mTransport.noteProxyOp(callingPkg, AppOpsManager.permissionToOpCode(permission));
+ }
- return MODE_ALLOWED;
+ /**
+ * Allows for custom interpretations of {@link AppOpsManager#MODE_DEFAULT} by individual
+ * content providers
+ *
+ * @hide
+ */
+ protected int interpretDefaultAppOpMode(int op) {
+ return MODE_IGNORED;
}
/** {@hide} */
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 3f264b717b6c..9bc17f22bc27 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -12342,6 +12342,18 @@ public final class Settings {
"location_global_kill_switch";
/**
+ * If set to 1, app cannot request read sms permission unless it's the default sms handler.
+ *
+ * STOPSHIP: Remove this once we ship with the restriction enabled.
+ *
+ * @hide
+ */
+ @SystemApi
+ @TestApi
+ public static final String SMS_ACCESS_RESTRICTION_ENABLED =
+ "sms_access_restriction_enabled";
+
+ /**
* If set to 1, SettingsProvider's restoreAnyVersion="true" attribute will be ignored
* and restoring to lower version of platform API will be skipped.
*