summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt1
-rw-r--r--core/java/android/app/AppOpsManager.java25
-rw-r--r--location/java/android/location/flags/location.aconfig7
3 files changed, 32 insertions, 1 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 01f54ade9acc..8c778ff2407b 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -652,6 +652,7 @@ package android.app {
field public static final String OPSTR_CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD = "android:capture_consentless_bugreport_on_userdebug_build";
field public static final String OPSTR_CHANGE_WIFI_STATE = "android:change_wifi_state";
field @FlaggedApi("android.view.contentprotection.flags.create_accessibility_overlay_app_op_enabled") public static final String OPSTR_CREATE_ACCESSIBILITY_OVERLAY = "android:create_accessibility_overlay";
+ field @FlaggedApi("android.location.flags.location_bypass") public static final String OPSTR_EMERGENCY_LOCATION = "android:emergency_location";
field @FlaggedApi("android.permission.flags.op_enable_mobile_data_by_user") public static final String OPSTR_ENABLE_MOBILE_DATA_BY_USER = "android:enable_mobile_data_by_user";
field public static final String OPSTR_ESTABLISH_VPN_MANAGER = "android:establish_vpn_manager";
field public static final String OPSTR_ESTABLISH_VPN_SERVICE = "android:establish_vpn_service";
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 0dbce97c978b..329d3dd58c56 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -16,6 +16,7 @@
package android.app;
+import static android.location.flags.Flags.FLAG_LOCATION_BYPASS;
import static android.permission.flags.Flags.FLAG_OP_ENABLE_MOBILE_DATA_BY_USER;
import static android.view.contentprotection.flags.Flags.FLAG_CREATE_ACCESSIBILITY_OVERLAY_APP_OP_ENABLED;
import static android.view.contentprotection.flags.Flags.FLAG_RAPID_CLEAR_NOTIFICATIONS_BY_LISTENER_APP_OP_ENABLED;
@@ -1571,9 +1572,17 @@ public class AppOpsManager {
public static final int OP_UNARCHIVAL_CONFIRMATION =
AppProtoEnums.APP_OP_UNARCHIVAL_CONFIRMATION;
+ /**
+ * Allows an app to access location without the traditional location permissions and while the
+ * user location setting is off, but only during pre-defined emergency sessions.
+ *
+ * @hide
+ */
+ public static final int OP_EMERGENCY_LOCATION = AppProtoEnums.APP_OP_EMERGENCY_LOCATION;
+
/** @hide */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
- public static final int _NUM_OP = 147;
+ public static final int _NUM_OP = 148;
/**
* All app ops represented as strings.
@@ -1726,6 +1735,7 @@ public class AppOpsManager {
OPSTR_RUN_BACKUP_JOBS,
OPSTR_ARCHIVE_ICON_OVERLAY,
OPSTR_UNARCHIVAL_CONFIRMATION,
+ OPSTR_EMERGENCY_LOCATION,
})
public @interface AppOpString {}
@@ -2439,6 +2449,16 @@ public class AppOpsManager {
*/
public static final String OPSTR_RUN_BACKUP_JOBS = "android:run_backup_jobs";
+ /**
+ * Allows an app to access location without the traditional location permissions and while the
+ * user location setting is off, but only during pre-defined emergency sessions.
+ *
+ * @hide
+ */
+ @SystemApi
+ @FlaggedApi(FLAG_LOCATION_BYPASS)
+ public static final String OPSTR_EMERGENCY_LOCATION = "android:emergency_location";
+
/** {@link #sAppOpsToNote} not initialized yet for this op */
private static final byte SHOULD_COLLECT_NOTE_OP_NOT_INITIALIZED = 0;
/** Should not collect noting of this app-op in {@link #sAppOpsToNote} */
@@ -3019,6 +3039,9 @@ public class AppOpsManager {
new AppOpInfo.Builder(OP_UNARCHIVAL_CONFIRMATION, OPSTR_UNARCHIVAL_CONFIRMATION,
"UNARCHIVAL_CONFIRMATION")
.setDefaultMode(MODE_ALLOWED).build(),
+ // TODO(b/301150056): STOPSHIP determine how this appop should work with the permission
+ new AppOpInfo.Builder(OP_EMERGENCY_LOCATION, OPSTR_EMERGENCY_LOCATION, "EMERGENCY_LOCATION")
+ .setPermission(Manifest.permission.LOCATION_BYPASS).build(),
};
// The number of longs needed to form a full bitmask of app ops
diff --git a/location/java/android/location/flags/location.aconfig b/location/java/android/location/flags/location.aconfig
index a96fe47f2381..0fa641b926a9 100644
--- a/location/java/android/location/flags/location.aconfig
+++ b/location/java/android/location/flags/location.aconfig
@@ -1,6 +1,13 @@
package: "android.location.flags"
flag {
+ name: "location_bypass"
+ namespace: "location"
+ description: "Enable location bypass appops behavior"
+ bug: "301150056"
+}
+
+flag {
name: "fix_service_watcher"
namespace: "location"
description: "Enable null explicit services in ServiceWatcher"