From 334ab546e46ff5916eb6239f98ee3462498e87c9 Mon Sep 17 00:00:00 2001 From: Shuo Qian Date: Mon, 28 Sep 2020 23:18:49 -0700 Subject: [PATCH] Introduce new App Ops permission for 3rd-party InCallService This permission is intended to be used internally as a system App Ops permission, and let CompanionDeviceManager or RoleManager to grant with users. If it is granted by user, the corresponding companion app has the ability to query the details of the ongoing calls, and also manage its life cycle. Bug: 169595473 Test: atest ThirdPartyInCallServiceAppOpsPermissionTest Change-Id: Ie0f790aab2edcd52cfdbded2630347b9f8dd4d49 --- api/current.txt | 1 + api/system-current.txt | 1 + api/test-current.txt | 1 + core/java/android/app/AppOpsManager.java | 22 +++++++++++++++++++++- core/proto/android/app/enums.proto | 1 + core/res/AndroidManifest.xml | 5 +++++ non-updatable-api/current.txt | 1 + non-updatable-api/system-current.txt | 1 + 8 files changed, 32 insertions(+), 1 deletion(-) diff --git a/api/current.txt b/api/current.txt index 5589a14c74341..6bce667c695a9 100644 --- a/api/current.txt +++ b/api/current.txt @@ -97,6 +97,7 @@ package android { field public static final String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE"; field public static final String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS"; field public static final String MANAGE_EXTERNAL_STORAGE = "android.permission.MANAGE_EXTERNAL_STORAGE"; + field public static final String MANAGE_ONGOING_CALLS = "android.permission.MANAGE_ONGOING_CALLS"; field public static final String MANAGE_OWN_CALLS = "android.permission.MANAGE_OWN_CALLS"; field public static final String MASTER_CLEAR = "android.permission.MASTER_CLEAR"; field public static final String MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL"; diff --git a/api/system-current.txt b/api/system-current.txt index 851f0f50e7155..1316ce8237f46 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -403,6 +403,7 @@ package android.app { field public static final String OPSTR_LOADER_USAGE_STATS = "android:loader_usage_stats"; field public static final String OPSTR_MANAGE_EXTERNAL_STORAGE = "android:manage_external_storage"; field public static final String OPSTR_MANAGE_IPSEC_TUNNELS = "android:manage_ipsec_tunnels"; + field public static final String OPSTR_MANAGE_ONGOING_CALLS = "android:manage_ongoing_calls"; field public static final String OPSTR_MUTE_MICROPHONE = "android:mute_microphone"; field public static final String OPSTR_NEIGHBORING_CELLS = "android:neighboring_cells"; field public static final String OPSTR_PLAY_AUDIO = "android:play_audio"; diff --git a/api/test-current.txt b/api/test-current.txt index 59020068e3423..599487d68965f 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -210,6 +210,7 @@ package android.app { field public static final String KEY_BG_STATE_SETTLE_TIME = "bg_state_settle_time"; field public static final String KEY_FG_SERVICE_STATE_SETTLE_TIME = "fg_service_state_settle_time"; field public static final String KEY_TOP_STATE_SETTLE_TIME = "top_state_settle_time"; + field public static final String OPSTR_MANAGE_ONGOING_CALLS = "android:manage_ongoing_calls"; field public static final int OP_COARSE_LOCATION = 0; // 0x0 field public static final int OP_RECORD_AUDIO = 27; // 0x1b field public static final int OP_START_FOREGROUND = 76; // 0x4c diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index f3b37891876d1..3bcb87aa73f29 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -865,6 +865,8 @@ public class AppOpsManager { @UnsupportedAppUsage public static final int OP_SEND_SMS = AppProtoEnums.APP_OP_SEND_SMS; /** @hide */ + public static final int OP_MANAGE_ONGOING_CALLS = AppProtoEnums.APP_OP_MANAGE_ONGOING_CALLS; + /** @hide */ @UnsupportedAppUsage public static final int OP_READ_ICC_SMS = AppProtoEnums.APP_OP_READ_ICC_SMS; /** @hide */ @@ -1155,7 +1157,7 @@ public class AppOpsManager { /** @hide */ @UnsupportedAppUsage - public static final int _NUM_OP = 103; + public static final int _NUM_OP = 104; /** Access to coarse location information. */ public static final String OPSTR_COARSE_LOCATION = "android:coarse_location"; @@ -1465,6 +1467,15 @@ public class AppOpsManager { @SystemApi public static final String OPSTR_LOADER_USAGE_STATS = "android:loader_usage_stats"; + /** + * Grants an app access to the {@link android.telecom.InCallService} API to see + * information about ongoing calls and to enable control of calls. + * @hide + */ + @SystemApi + @TestApi + public static final String OPSTR_MANAGE_ONGOING_CALLS = "android:manage_ongoing_calls"; + /** * AppOp granted to apps that we are started via {@code am instrument -e --no-isolated-storage} * @@ -1574,6 +1585,7 @@ public class AppOpsManager { OP_MANAGE_EXTERNAL_STORAGE, OP_INTERACT_ACROSS_PROFILES, OP_LOADER_USAGE_STATS, + OP_MANAGE_ONGOING_CALLS, }; /** @@ -1688,6 +1700,7 @@ public class AppOpsManager { OP_PHONE_CALL_MICROPHONE, // OP_PHONE_CALL_MICROPHONE OP_PHONE_CALL_CAMERA, // OP_PHONE_CALL_CAMERA OP_RECORD_AUDIO_HOTWORD, // RECORD_AUDIO_HOTWORD + OP_MANAGE_ONGOING_CALLS, // MANAGE_ONGOING_CALLS }; /** @@ -1797,6 +1810,7 @@ public class AppOpsManager { OPSTR_PHONE_CALL_MICROPHONE, OPSTR_PHONE_CALL_CAMERA, OPSTR_RECORD_AUDIO_HOTWORD, + OPSTR_MANAGE_ONGOING_CALLS, }; /** @@ -1907,6 +1921,7 @@ public class AppOpsManager { "PHONE_CALL_MICROPHONE", "PHONE_CALL_CAMERA", "RECORD_AUDIO_HOTWORD", + "MANAGE_ONGOING_CALLS", }; /** @@ -2018,6 +2033,7 @@ public class AppOpsManager { null, // no permission for OP_PHONE_CALL_MICROPHONE null, // no permission for OP_PHONE_CALL_CAMERA null, // no permission for OP_RECORD_AUDIO_HOTWORD + Manifest.permission.MANAGE_ONGOING_CALLS, }; /** @@ -2129,6 +2145,7 @@ public class AppOpsManager { null, // PHONE_CALL_MICROPHONE null, // PHONE_CALL_MICROPHONE null, // RECORD_AUDIO_HOTWORD + null, // MANAGE_ONGOING_CALLS }; /** @@ -2239,6 +2256,7 @@ public class AppOpsManager { null, // PHONE_CALL_MICROPHONE null, // PHONE_CALL_CAMERA null, // RECORD_AUDIO_HOTWORD + null, // MANAGE_ONGOING_CALLS }; /** @@ -2348,6 +2366,7 @@ public class AppOpsManager { AppOpsManager.MODE_ALLOWED, // PHONE_CALL_MICROPHONE AppOpsManager.MODE_ALLOWED, // PHONE_CALL_CAMERA AppOpsManager.MODE_ALLOWED, // OP_RECORD_AUDIO_HOTWORD + AppOpsManager.MODE_DEFAULT, // MANAGE_ONGOING_CALLS }; /** @@ -2461,6 +2480,7 @@ public class AppOpsManager { false, // PHONE_CALL_MICROPHONE false, // PHONE_CALL_CAMERA false, // RECORD_AUDIO_HOTWORD + true, // MANAGE_ONGOING_CALLS }; /** diff --git a/core/proto/android/app/enums.proto b/core/proto/android/app/enums.proto index 37a9f50dec898..2d2c8accc0399 100644 --- a/core/proto/android/app/enums.proto +++ b/core/proto/android/app/enums.proto @@ -210,4 +210,5 @@ enum AppOpEnum { APP_OP_PHONE_CALL_MICROPHONE = 100; APP_OP_PHONE_CALL_CAMERA = 101; APP_OP_RECORD_AUDIO_HOTWORD = 102; + APP_OP_MANAGE_ONGOING_CALLS = 103; } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 01954510ee082..8a7fa04b3cf4e 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2229,6 +2229,11 @@ + + + diff --git a/non-updatable-api/current.txt b/non-updatable-api/current.txt index a98ea695eaf18..05b69232a00eb 100644 --- a/non-updatable-api/current.txt +++ b/non-updatable-api/current.txt @@ -97,6 +97,7 @@ package android { field public static final String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE"; field public static final String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS"; field public static final String MANAGE_EXTERNAL_STORAGE = "android.permission.MANAGE_EXTERNAL_STORAGE"; + field public static final String MANAGE_ONGOING_CALLS = "android.permission.MANAGE_ONGOING_CALLS"; field public static final String MANAGE_OWN_CALLS = "android.permission.MANAGE_OWN_CALLS"; field public static final String MASTER_CLEAR = "android.permission.MASTER_CLEAR"; field public static final String MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL"; diff --git a/non-updatable-api/system-current.txt b/non-updatable-api/system-current.txt index fe4604b4c68da..243f596e63ef2 100644 --- a/non-updatable-api/system-current.txt +++ b/non-updatable-api/system-current.txt @@ -403,6 +403,7 @@ package android.app { field public static final String OPSTR_LOADER_USAGE_STATS = "android:loader_usage_stats"; field public static final String OPSTR_MANAGE_EXTERNAL_STORAGE = "android:manage_external_storage"; field public static final String OPSTR_MANAGE_IPSEC_TUNNELS = "android:manage_ipsec_tunnels"; + field public static final String OPSTR_MANAGE_ONGOING_CALLS = "android:manage_ongoing_calls"; field public static final String OPSTR_MUTE_MICROPHONE = "android:mute_microphone"; field public static final String OPSTR_NEIGHBORING_CELLS = "android:neighboring_cells"; field public static final String OPSTR_PLAY_AUDIO = "android:play_audio";