From f523f1502870385bf8927cb733dea90c863933e2 Mon Sep 17 00:00:00 2001 From: Karishma Vakil Date: Mon, 13 Dec 2021 11:50:55 +0000 Subject: [PATCH] [SafetyCenter] Add broadcast action and extra constants for data refreshes Test: Will add when the constants are used in b/208624002. Bug: 208623999 Bug: 210423417 Change-Id: I16482a7101c0f2429b79bac92e5b463f47b13a2d --- core/api/system-current.txt | 5 ++ core/java/android/content/Intent.java | 112 ++++++++++++++++++++++++++ core/res/AndroidManifest.xml | 3 + 3 files changed, 120 insertions(+) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 2879261aecd4e..b3acb8c4e161e 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -2656,6 +2656,7 @@ package android.content { field public static final String ACTION_PENDING_INCIDENT_REPORTS_CHANGED = "android.intent.action.PENDING_INCIDENT_REPORTS_CHANGED"; field public static final String ACTION_PRE_BOOT_COMPLETED = "android.intent.action.PRE_BOOT_COMPLETED"; field public static final String ACTION_QUERY_PACKAGE_RESTART = "android.intent.action.QUERY_PACKAGE_RESTART"; + field public static final String ACTION_REFRESH_SAFETY_SOURCES = "android.intent.action.REFRESH_SAFETY_SOURCES"; field public static final String ACTION_RESOLVE_INSTANT_APP_PACKAGE = "android.intent.action.RESOLVE_INSTANT_APP_PACKAGE"; field @RequiresPermission(android.Manifest.permission.REVIEW_ACCESSIBILITY_SERVICES) public static final String ACTION_REVIEW_ACCESSIBILITY_SERVICES = "android.intent.action.REVIEW_ACCESSIBILITY_SERVICES"; field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_REVIEW_ONGOING_PERMISSION_USAGE = "android.intent.action.REVIEW_ONGOING_PERMISSION_USAGE"; @@ -2686,6 +2687,10 @@ package android.content { field public static final String EXTRA_PACKAGES = "android.intent.extra.PACKAGES"; field public static final String EXTRA_PERMISSION_NAME = "android.intent.extra.PERMISSION_NAME"; field public static final String EXTRA_REASON = "android.intent.extra.REASON"; + field public static final int EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA = 0; // 0x0 + field public static final int EXTRA_REFRESH_REQUEST_TYPE_GET_DATA = 1; // 0x1 + field public static final String EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE = "android.intent.extra.REFRESH_SAFETY_SOURCES_REQUEST_TYPE"; + field public static final String EXTRA_REFRESH_SAFETY_SOURCE_IDS = "android.intent.extra.REFRESH_SAFETY_SOURCE_IDS"; field public static final String EXTRA_REMOTE_CALLBACK = "android.intent.extra.REMOTE_CALLBACK"; field public static final String EXTRA_RESULT_NEEDED = "android.intent.extra.RESULT_NEEDED"; field public static final String EXTRA_ROLE_NAME = "android.intent.extra.ROLE_NAME"; diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 2ff29cbdcc2a4..af84392b51693 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -3793,6 +3793,47 @@ public class Intent implements Parcelable, Cloneable { public static final String ACTION_IDLE_MAINTENANCE_END = "android.intent.action.ACTION_IDLE_MAINTENANCE_END"; + /** + * Broadcast Action: A broadcast sent by the system to indicate that + * {@link android.safetycenter.SafetyCenterManager} is requesting data from safety sources + * regarding their safety state. + * + * This broadcast is sent when a user triggers a data refresh from the Safety Center UI or when + * Safety Center detects that its stored safety information is stale and needs to be updated. + * + * This broadcast is sent explicitly to safety sources by targeting intents to a specified set + * of components provided by the safety sources in the safety source configuration. + * The receiving components should be manifest-declared receivers so that safety sources can be + * requested to send data even if they are not running. + * + * On receiving this broadcast, safety sources should determine their safety state + * according to the parameters specified in the intent extras (see below) and send Safety Center + * data about their safety state using + * {@link android.safetycenter.SafetyCenterManager#sendSafetyCenterUpdate(android.safetycenter.SafetySourceData)}. + * + *

This is a protected intent that can only be sent by the system. + * + *

Includes the following extras: + *

+ * + * @hide + */ + // TODO(b/210805082): Define the term "safety sources" more concretely here once safety sources + // are configured in xml config. + // TODO(b/210979035): Determine recommendation for sources if they are requested for fresh data + // but cannot provide it. + @SystemApi + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_REFRESH_SAFETY_SOURCES = + "android.intent.action.REFRESH_SAFETY_SOURCES"; + /** * Broadcast Action: a remote intent is to be broadcasted. * @@ -6386,6 +6427,77 @@ public class Intent implements Parcelable, Cloneable { public static final String EXTRA_VISIBILITY_ALLOW_LIST = "android.intent.extra.VISIBILITY_ALLOW_LIST"; + + /** + * Used as a {@code String[]} extra field in + * {@link android.content.Intent#ACTION_REFRESH_SAFETY_SOURCES} intents to specify the safety + * source ids of the safety sources being requested for data by Safety Center. + * + * When this extra field is not specified in the intent, it is assumed that Safety Center is + * requesting data from all safety sources supported by the component receiving the broadcast. + * @hide + */ + @SystemApi + public static final String EXTRA_REFRESH_SAFETY_SOURCE_IDS = + "android.intent.extra.REFRESH_SAFETY_SOURCE_IDS"; + + /** + * Used as an {@code int} extra field in + * {@link android.content.Intent#ACTION_REFRESH_SAFETY_SOURCES} intents to specify the type of + * data request from Safety Center. + * + * Possible values are all values in {@link RefreshRequestType}. + * + * @hide + */ + @SystemApi + public static final String EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE = + "android.intent.extra.REFRESH_SAFETY_SOURCES_REQUEST_TYPE"; + + /** + * All possible types of data refresh requests in broadcasts with intent action + * {@link android.content.Intent#ACTION_REFRESH_SAFETY_SOURCES}. + * + * @hide + */ + @IntDef(prefix = { "EXTRA_REFRESH_REQUEST_TYPE_" }, value = { + EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA, + EXTRA_REFRESH_REQUEST_TYPE_GET_DATA, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface RefreshRequestType {} + + /** + * Used as an int value for + * {@link android.content.Intent#EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE} + * to indicate that the safety source should fetch fresh data relating to their safety state + * upon receiving a broadcast with intent action + * {@link android.content.Intent#ACTION_REFRESH_SAFETY_SOURCES} and provide it to Safety Center. + * + * The term "fresh" here means that the sources should ensure that the safety data is accurate + * as possible at the time of providing it to Safety Center, even if it involves performing an + * expensive and/or slow process. + * + * @hide + */ + @SystemApi + public static final int EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA = 0; + + /** + * Used as an int value for + * {@link android.content.Intent#EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE} + * to indicate that upon receiving a broadcasts with intent action + * {@link android.content.Intent#ACTION_REFRESH_SAFETY_SOURCES}, the safety source should + * provide data relating to their safety state to Safety Center. + * + * If the source already has its safety data cached, it may provide it without triggering a + * process to fetch state which may be expensive and/or slow. + * + * @hide + */ + @SystemApi + public static final int EXTRA_REFRESH_REQUEST_TYPE_GET_DATA = 1; + // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Intent flags (see mFlags variable). diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 420c7c8a8a341..9495a00a641d2 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -714,6 +714,9 @@ + + +