summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Giulio Fiscella <fiscella@google.com> 2022-03-29 10:22:28 +0000
committer Giulio Fiscella <fiscella@google.com> 2022-04-06 23:12:38 +0000
commit92713f8afeecf4dd2ce7f68733b26c24eef91ce8 (patch)
tree49b2661843acd78ac7a1d72852d2be158778de13
parent7839b5fb85acae8e468df4c97cce18e45acd519f (diff)
Pass resources to config parser to resolve runtime string resource names
Migrate back to the raw folder. Use the fully qualified string resource names to be able to read strings from both the base package and any overlay package. Unmark xml parser as SystemApi and move it back to a static lib. Test: atest CtsSafetyCenterTestCases Test: atest SafetyCenterConfigTests Test: atest SafetyCenterResourcesLibTests Bug: 227291608 Change-Id: If03404f4e92a99a096c049283c9ae02b46aee1af Merged-In: If03404f4e92a99a096c049283c9ae02b46aee1af
-rw-r--r--SafetyCenter/Config/Android.bp38
-rw-r--r--SafetyCenter/Config/java/com/android/safetycenter/config/ParseException.java (renamed from framework-s/java/android/safetycenter/config/ParseException.java)10
-rw-r--r--SafetyCenter/Config/java/com/android/safetycenter/config/SafetyCenterConfigParser.java (renamed from framework-s/java/android/safetycenter/config/SafetyCenterConfigParser.java)139
-rw-r--r--SafetyCenter/Config/safety_center_config.xsd11
-rw-r--r--SafetyCenter/Config/tests/Android.bp36
-rw-r--r--SafetyCenter/Config/tests/AndroidManifest.xml30
-rw-r--r--SafetyCenter/Config/tests/AndroidTest.xml35
-rw-r--r--SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParseExceptionTest.kt (renamed from tests/cts/safetycenter/src/android/safetycenter/cts/config/ParseExceptionTest.kt)3
-rw-r--r--SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigInvalidTest.kt (renamed from tests/cts/safetycenter/src/android/safetycenter/cts/config/ParserConfigInvalidTest.kt)168
-rw-r--r--SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigValidTest.kt (renamed from tests/cts/safetycenter/src/android/safetycenter/cts/config/ParserConfigValidTest.kt)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_all_disabled_no_work.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_all_disabled_no_work.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_all_no_work.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_all_no_work.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_disabled_no_summary.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_disabled_no_summary.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_disabled_no_title.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_disabled_no_title.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_duplicate_key.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_duplicate_key.xml)16
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_intent.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_intent.xml)4
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_summary.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_summary.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_title.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_title.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_invalid_display.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_invalid_display.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_invalid_profile.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_invalid_profile.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_id.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_id.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_intent.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_intent.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_package.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_package.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_profile.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_profile.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_summary.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_summary.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_title.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_title.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_primary_hidden_with_work.xml (renamed from tests/cts/safetycenter/res/xml/config_dynamic_safety_source_primary_hidden_with_work.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_primary_with_work.xml17
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_file_corrupted.txt0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_duplicate_key.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_duplicate_key.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_invalid_profile.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_invalid_profile.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_id.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_id.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_package.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_package.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_profile.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_profile.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_display.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_display.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_intent.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_intent.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_search.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_search.xml)2
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_summary.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_summary.xml)2
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_title.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_title.xml)2
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_work.xml (renamed from tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_work.xml)2
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_mixed_safety_source_duplicate_key.xml (renamed from tests/cts/safetycenter/res/xml/config_mixed_safety_source_duplicate_key.xml)14
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_safety_center_config_missing.xml (renamed from tests/cts/safetycenter/res/xml/config_safety_center_config_missing.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_safety_sources_config_empty.xml (renamed from tests/cts/safetycenter/res/xml/config_safety_sources_config_empty.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_safety_sources_config_missing.xml (renamed from tests/cts/safetycenter/res/xml/config_safety_sources_config_missing.xml)0
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_safety_sources_group_duplicate_id.xml26
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_safety_sources_group_empty.xml (renamed from tests/cts/safetycenter/res/xml/config_safety_sources_group_empty.xml)4
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_safety_sources_group_invalid_icon.xml16
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_safety_sources_group_no_id.xml14
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_safety_sources_group_no_title.xml (renamed from tests/cts/safetycenter/res/xml/config_safety_sources_group_no_title.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_duplicate_key.xml26
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_invalid_profile.xml (renamed from tests/cts/safetycenter/res/xml/config_static_safety_source_invalid_profile.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_id.xml14
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_intent.xml14
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_profile.xml14
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_summary.xml (renamed from tests/cts/safetycenter/res/xml/config_static_safety_source_no_summary.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_title.xml (renamed from tests/cts/safetycenter/res/xml/config_static_safety_source_no_title.xml)6
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_display.xml (renamed from tests/cts/safetycenter/res/xml/config_static_safety_source_with_display.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_logging.xml (renamed from tests/cts/safetycenter/res/xml/config_static_safety_source_with_logging.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_package.xml (renamed from tests/cts/safetycenter/res/xml/config_static_safety_source_with_package.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_primary_and_work.xml16
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_refresh.xml (renamed from tests/cts/safetycenter/res/xml/config_static_safety_source_with_refresh.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_severity.xml (renamed from tests/cts/safetycenter/res/xml/config_static_safety_source_with_severity.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_string_resource_name_empty.xml (renamed from tests/cts/safetycenter/res/xml/config_reference_invalid.xml)8
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_at.xml15
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_package.xml (renamed from tests/cts/safetycenter/res/xml/config_safety_sources_group_invalid_icon.xml)9
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_type.xml15
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_wrong_type.xml15
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_string_resource_name_missing.xml15
-rw-r--r--SafetyCenter/Config/tests/res/raw/config_valid.xml (renamed from tests/cts/safetycenter/res/xml/config_valid.xml)44
-rw-r--r--SafetyCenter/Config/tests/res/values/strings.xml (renamed from tests/cts/safetycenter/res/values/strings.xml)0
-rw-r--r--SafetyCenter/Resources/res/raw/safety_center_config.xml48
-rw-r--r--SafetyCenter/Resources/res/values/strings.xml5
-rw-r--r--SafetyCenter/Resources/res/xml/safety_center_config.xml38
-rw-r--r--SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java17
-rw-r--r--SafetyCenter/ResourcesLib/tests/AndroidManifest.xml4
-rw-r--r--SafetyCenter/ResourcesLib/tests/AndroidTest.xml2
-rw-r--r--SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/raw/test.txt1
-rw-r--r--SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/xml/test.xml1
-rw-r--r--SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt20
-rw-r--r--framework-s/api/system-current.txt6
-rw-r--r--framework-s/java/android/safetycenter/config/SafetyCenterConfig.java15
-rw-r--r--service/Android.bp1
-rw-r--r--service/java/com/android/safetycenter/SafetyCenterConfigReader.java19
-rw-r--r--tests/cts/safetycenter/Android.bp1
-rw-r--r--tests/cts/safetycenter/res/xml/config_dynamic_safety_source_primary_with_work.xml17
-rw-r--r--tests/cts/safetycenter/res/xml/config_safety_sources_group_duplicate_id.xml26
-rw-r--r--tests/cts/safetycenter/res/xml/config_safety_sources_group_no_id.xml14
-rw-r--r--tests/cts/safetycenter/res/xml/config_static_safety_source_duplicate_key.xml26
-rw-r--r--tests/cts/safetycenter/res/xml/config_static_safety_source_no_id.xml14
-rw-r--r--tests/cts/safetycenter/res/xml/config_static_safety_source_no_intent.xml14
-rw-r--r--tests/cts/safetycenter/res/xml/config_static_safety_source_no_profile.xml14
-rw-r--r--tests/cts/safetycenter/res/xml/config_static_safety_source_with_primary_and_work.xml16
-rw-r--r--tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt7
93 files changed, 804 insertions, 496 deletions
diff --git a/SafetyCenter/Config/Android.bp b/SafetyCenter/Config/Android.bp
new file mode 100644
index 000000000..afe7c380a
--- /dev/null
+++ b/SafetyCenter/Config/Android.bp
@@ -0,0 +1,38 @@
+//
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+java_library {
+ name: "safety-center-config",
+ sdk_version: "module_current",
+ min_sdk_version: "30",
+ target_sdk_version: "32",
+ srcs: [
+ "java/**/*.java",
+ ],
+ libs: [
+ "androidx.annotation_annotation",
+ "framework-annotations-lib",
+ "framework-permission-s",
+ ],
+ apex_available: [
+ "com.android.permission",
+ "test_com.android.permission",
+ ],
+ installable: false,
+}
diff --git a/framework-s/java/android/safetycenter/config/ParseException.java b/SafetyCenter/Config/java/com/android/safetycenter/config/ParseException.java
index 76ba94245..e73f98484 100644
--- a/framework-s/java/android/safetycenter/config/ParseException.java
+++ b/SafetyCenter/Config/java/com/android/safetycenter/config/ParseException.java
@@ -14,21 +14,15 @@
* limitations under the License.
*/
-package android.safetycenter.config;
+package com.android.safetycenter.config;
import static android.os.Build.VERSION_CODES.TIRAMISU;
import android.annotation.NonNull;
-import android.annotation.SystemApi;
import androidx.annotation.RequiresApi;
-/**
- * Exception thrown when there is an error parsing the Safety Center configuration.
- *
- * @hide
- */
-@SystemApi
+/** Exception thrown when there is an error parsing the Safety Center configuration. */
@RequiresApi(TIRAMISU)
public final class ParseException extends Exception {
diff --git a/framework-s/java/android/safetycenter/config/SafetyCenterConfigParser.java b/SafetyCenter/Config/java/com/android/safetycenter/config/SafetyCenterConfigParser.java
index 45d5c9f2f..fc933bdcd 100644
--- a/framework-s/java/android/safetycenter/config/SafetyCenterConfigParser.java
+++ b/SafetyCenter/Config/java/com/android/safetycenter/config/SafetyCenterConfigParser.java
@@ -14,12 +14,13 @@
* limitations under the License.
*/
-package android.safetycenter.config;
+package com.android.safetycenter.config;
import static android.os.Build.VERSION_CODES.TIRAMISU;
import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.END_TAG;
+import static org.xmlpull.v1.XmlPullParser.FEATURE_PROCESS_NAMESPACES;
import static org.xmlpull.v1.XmlPullParser.START_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.START_TAG;
import static org.xmlpull.v1.XmlPullParser.TEXT;
@@ -30,20 +31,22 @@ import static java.util.Objects.requireNonNull;
import android.annotation.NonNull;
import android.annotation.StringRes;
import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
-import android.safetycenter.config.SafetySource.InitialDisplayState;
-import android.safetycenter.config.SafetySource.Profile;
-import android.safetycenter.config.SafetySource.SafetySourceType;
-import android.safetycenter.config.SafetySourcesGroup.StatelessIconType;
+import android.safetycenter.config.SafetyCenterConfig;
+import android.safetycenter.config.SafetySource;
+import android.safetycenter.config.SafetySourcesGroup;
import androidx.annotation.RequiresApi;
+import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
+import java.io.InputStream;
+/** Parser and validator for {@link SafetyCenterConfig} objects. */
@RequiresApi(TIRAMISU)
-final class SafetyCenterConfigParser {
+public final class SafetyCenterConfigParser {
private static final String TAG_SAFETY_CENTER_CONFIG = "safety-center-config";
private static final String TAG_SAFETY_SOURCES_CONFIG = "safety-sources-config";
@@ -79,18 +82,32 @@ final class SafetyCenterConfigParser {
private SafetyCenterConfigParser() {
}
+ /**
+ * Parses and validates the given XML resource into a {@link SafetyCenterConfig} object.
+ *
+ * <p>It throws a {@link ParseException} if the given XML resource does not comply with the
+ * safety_center_config.xsd schema.
+ *
+ * @param in the raw XML resource representing the Safety Center configuration
+ * @param resources the {@link Resources} retrieved from the package that contains the Safety
+ * Center configuration
+ */
@NonNull
- static SafetyCenterConfig parseXmlResource(@NonNull XmlResourceParser parser)
- throws ParseException {
- requireNonNull(parser);
+ public static SafetyCenterConfig parseXmlResource(
+ @NonNull InputStream in, @NonNull Resources resources) throws ParseException {
+ requireNonNull(in);
+ requireNonNull(resources);
try {
- parser.next();
+ XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
+ parser.setFeature(FEATURE_PROCESS_NAMESPACES, true);
+ parser.setInput(in, null);
if (parser.getEventType() != START_DOCUMENT) {
throw new ParseException("Unexpected parser state");
}
parser.nextTag();
validateElementStart(parser, TAG_SAFETY_CENTER_CONFIG);
- SafetyCenterConfig safetyCenterConfig = parseSafetyCenterConfig(parser);
+ SafetyCenterConfig safetyCenterConfig =
+ parseSafetyCenterConfig(parser, resources);
if (parser.getEventType() == TEXT && parser.isWhitespace()) {
parser.next();
}
@@ -104,7 +121,8 @@ final class SafetyCenterConfigParser {
}
@NonNull
- private static SafetyCenterConfig parseSafetyCenterConfig(@NonNull XmlResourceParser parser)
+ private static SafetyCenterConfig parseSafetyCenterConfig(
+ @NonNull XmlPullParser parser, @NonNull Resources resources)
throws XmlPullParserException, IOException, ParseException {
validateElementHasNoAttribute(parser, TAG_SAFETY_CENTER_CONFIG);
parser.nextTag();
@@ -114,7 +132,8 @@ final class SafetyCenterConfigParser {
parser.nextTag();
while (parser.getEventType() == START_TAG
&& parser.getName().equals(TAG_SAFETY_SOURCES_GROUP)) {
- builder.addSafetySourcesGroup(parseSafetySourcesGroup(parser));
+ builder.addSafetySourcesGroup(
+ parseSafetySourcesGroup(parser, resources));
}
validateElementEnd(parser, TAG_SAFETY_SOURCES_CONFIG);
parser.nextTag();
@@ -128,7 +147,8 @@ final class SafetyCenterConfigParser {
}
@NonNull
- private static SafetySourcesGroup parseSafetySourcesGroup(@NonNull XmlResourceParser parser)
+ private static SafetySourcesGroup parseSafetySourcesGroup(
+ @NonNull XmlPullParser parser, @NonNull Resources resources)
throws XmlPullParserException, IOException, ParseException {
String name = TAG_SAFETY_SOURCES_GROUP;
SafetySourcesGroup.Builder builder = new SafetySourcesGroup.Builder();
@@ -138,10 +158,14 @@ final class SafetyCenterConfigParser {
builder.setId(parser.getAttributeValue(i));
break;
case ATTR_SAFETY_SOURCES_GROUP_TITLE:
- builder.setTitleResId(parseStringReference(parser, i, name));
+ builder.setTitleResId(
+ parseStringResourceName(parser.getAttributeValue(i), name,
+ parser.getAttributeName(i), resources));
break;
case ATTR_SAFETY_SOURCES_GROUP_SUMMARY:
- builder.setSummaryResId(parseStringReference(parser, i, name));
+ builder.setSummaryResId(
+ parseStringResourceName(parser.getAttributeValue(i), name,
+ parser.getAttributeName(i), resources));
break;
case ATTR_SAFETY_SOURCES_GROUP_STATELESS_ICON_TYPE:
builder.setStatelessIconType(
@@ -169,7 +193,8 @@ final class SafetyCenterConfigParser {
default:
break loop;
}
- builder.addSafetySource(parseSafetySource(parser, type, parser.getName()));
+ builder.addSafetySource(
+ parseSafetySource(parser, resources, type, parser.getName()));
}
validateElementEnd(parser, name);
parser.nextTag();
@@ -182,9 +207,12 @@ final class SafetyCenterConfigParser {
@NonNull
private static SafetySource parseSafetySource(
- @NonNull XmlResourceParser parser, @SafetySourceType int type, @NonNull String name)
- throws XmlPullParserException, IOException, ParseException {
- SafetySource.Builder builder = new SafetySource.Builder(type);
+ @NonNull XmlPullParser parser,
+ @NonNull Resources resources,
+ int safetySourceType,
+ @NonNull String name
+ ) throws XmlPullParserException, IOException, ParseException {
+ SafetySource.Builder builder = new SafetySource.Builder(safetySourceType);
for (int i = 0; i < parser.getAttributeCount(); i++) {
switch (parser.getAttributeName(i)) {
case ATTR_SAFETY_SOURCE_ID:
@@ -194,13 +222,19 @@ final class SafetyCenterConfigParser {
builder.setPackageName(parser.getAttributeValue(i));
break;
case ATTR_SAFETY_SOURCE_TITLE:
- builder.setTitleResId(parseStringReference(parser, i, name));
+ builder.setTitleResId(
+ parseStringResourceName(parser.getAttributeValue(i), name,
+ parser.getAttributeName(i), resources));
break;
case ATTR_SAFETY_SOURCE_TITLE_FOR_WORK:
- builder.setTitleForWorkResId(parseStringReference(parser, i, name));
+ builder.setTitleForWorkResId(
+ parseStringResourceName(parser.getAttributeValue(i), name,
+ parser.getAttributeName(i), resources));
break;
case ATTR_SAFETY_SOURCE_SUMMARY:
- builder.setSummaryResId(parseStringReference(parser, i, name));
+ builder.setSummaryResId(
+ parseStringResourceName(parser.getAttributeValue(i), name,
+ parser.getAttributeName(i), resources));
break;
case ATTR_SAFETY_SOURCE_INTENT_ACTION:
builder.setIntentAction(parser.getAttributeValue(i));
@@ -221,7 +255,9 @@ final class SafetyCenterConfigParser {
parser.getAttributeName(i)));
break;
case ATTR_SAFETY_SOURCE_SEARCH_TERMS:
- builder.setSearchTermsResId(parseStringReference(parser, i, name));
+ builder.setSearchTermsResId(
+ parseStringResourceName(parser.getAttributeValue(i), name,
+ parser.getAttributeName(i), resources));
break;
case ATTR_SAFETY_SOURCE_LOGGING_ALLOWED:
builder.setLoggingAllowed(
@@ -247,15 +283,14 @@ final class SafetyCenterConfigParser {
}
}
- private static void validateElementStart(@NonNull XmlResourceParser parser,
- @NonNull String name)
+ private static void validateElementStart(@NonNull XmlPullParser parser, @NonNull String name)
throws XmlPullParserException, ParseException {
if (parser.getEventType() != START_TAG || !parser.getName().equals(name)) {
throw elementMissing(name);
}
}
- private static void validateElementEnd(@NonNull XmlResourceParser parser, @NonNull String name)
+ private static void validateElementEnd(@NonNull XmlPullParser parser, @NonNull String name)
throws XmlPullParserException, ParseException {
if (parser.getEventType() != END_TAG || !parser.getName().equals(name)) {
throw elementNotClosed(name);
@@ -263,7 +298,7 @@ final class SafetyCenterConfigParser {
}
private static void validateElementHasNoAttribute(
- @NonNull XmlResourceParser parser, @NonNull String name) throws ParseException {
+ @NonNull XmlPullParser parser, @NonNull String name) throws ParseException {
if (parser.getAttributeCount() != 0) {
throw elementInvalid(name);
}
@@ -317,21 +352,47 @@ final class SafetyCenterConfigParser {
}
@StringRes
- private static int parseStringReference(
- @NonNull XmlResourceParser parser, int index, @NonNull String parent)
- throws ParseException {
- int id = parser.getAttributeResourceValue(index, Resources.ID_NULL);
+ private static int parseStringResourceName(
+ @NonNull String valueString, @NonNull String parent, @NonNull String name,
+ @NonNull Resources resources) throws ParseException {
+ if (valueString.isEmpty()) {
+ throw new ParseException(
+ String.format("Resource name in %s.%s cannot be empty", parent, name));
+ }
+ if (valueString.charAt(0) != '@') {
+ throw new ParseException(
+ String.format("Resource name %s in %s.%s does not start with @", valueString,
+ parent, name));
+ }
+ String[] colonSplit = valueString.substring(1).split(":", 2);
+ if (colonSplit.length != 2 || colonSplit[0].isEmpty()) {
+ throw new ParseException(
+ String.format("Resource name %s in %s.%s does not specify a package",
+ valueString, parent, name));
+ }
+ String packageName = colonSplit[0];
+ String[] slashSplit = colonSplit[1].split("/", 2);
+ if (slashSplit.length != 2 || slashSplit[0].isEmpty()) {
+ throw new ParseException(
+ String.format("Resource name %s in %s.%s does not specify a type",
+ valueString, parent, name));
+ }
+ String type = slashSplit[0];
+ if (!type.equals("string")) {
+ throw new ParseException(
+ String.format("Resource name %s in %s.%s is not a string", valueString, parent,
+ name));
+ }
+ String entry = slashSplit[1];
+ int id = resources.getIdentifier(entry, type, packageName);
if (id == Resources.ID_NULL) {
throw new ParseException(
- String.format(
- "Reference %s in %s.%s missing or invalid",
- parser.getAttributeValue(index), parent,
- parser.getAttributeName(index)));
+ String.format("Resource name %s in %s.%s missing or invalid", valueString,
+ parent, name));
}
return id;
}
- @StatelessIconType
private static int parseStatelessIconType(
@NonNull String valueString, @NonNull String parent, @NonNull String name)
throws ParseException {
@@ -345,7 +406,6 @@ final class SafetyCenterConfigParser {
}
}
- @Profile
private static int parseProfile(
@NonNull String valueString, @NonNull String parent, @NonNull String name)
throws ParseException {
@@ -359,7 +419,6 @@ final class SafetyCenterConfigParser {
}
}
- @InitialDisplayState
private static int parseInitialDisplayState(
@NonNull String valueString, @NonNull String parent, @NonNull String name)
throws ParseException {
diff --git a/SafetyCenter/Config/safety_center_config.xsd b/SafetyCenter/Config/safety_center_config.xsd
index 400380d24..5a3576dd5 100644
--- a/SafetyCenter/Config/safety_center_config.xsd
+++ b/SafetyCenter/Config/safety_center_config.xsd
@@ -43,8 +43,8 @@
<!-- id must be unique among safety sources groups -->
<xsd:attribute name="id" type="xsd:string" use="required"/>
<!-- title is required unless the group contains issue only and/or internal sources -->
- <xsd:attribute name="title" type="reference"/>
- <xsd:attribute name="summary" type="reference"/>
+ <xsd:attribute name="title" type="stringResourceName"/>
+ <xsd:attribute name="summary" type="stringResourceName"/>
<xsd:attribute name="statelessIconType" type="statelessIconType" default="none"/>
</xsd:complexType>
@@ -118,10 +118,11 @@
</xsd:restriction>
</xsd:simpleType>
- <!-- NOTE: string references will be ignored for any attribute not explicitly marked as reference in this schema -->
- <xsd:simpleType name="reference">
+ <!-- NOTE: stringResourceNames will be ignored for any attribute not explicitly marked as stringResourceName in this schema. -->
+ <!-- A stringResourceNames is a fully qualified resource name of the form "@package:string/entry". Package is required. -->
+ <xsd:simpleType name="stringResourceName">
<xsd:restriction base="xsd:string">
- <xsd:pattern value="@string/.+"/>
+ <xsd:pattern value="@([a-z]+\.)*[a-z]+:string/.+"/>
</xsd:restriction>
</xsd:simpleType>
diff --git a/SafetyCenter/Config/tests/Android.bp b/SafetyCenter/Config/tests/Android.bp
new file mode 100644
index 000000000..57e6f6b3f
--- /dev/null
+++ b/SafetyCenter/Config/tests/Android.bp
@@ -0,0 +1,36 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test {
+ name: "SafetyCenterConfigTests",
+ defaults: ["mts-target-sdk-version-current"],
+ sdk_version: "test_current",
+ min_sdk_version: "30",
+ target_sdk_version: "32",
+ srcs: [
+ "java/**/*.kt",
+ ],
+ static_libs: [
+ "safety-center-config",
+ "compatibility-device-util-axt",
+ ],
+ test_suites: [
+ "general-tests",
+ "mts-permission",
+ ],
+}
diff --git a/SafetyCenter/Config/tests/AndroidManifest.xml b/SafetyCenter/Config/tests/AndroidManifest.xml
new file mode 100644
index 000000000..2c32464f0
--- /dev/null
+++ b/SafetyCenter/Config/tests/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ ~ Copyright (C) 2022 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.safetycenter.config.tests">
+
+ <application android:label="Safety Center Config Tests">
+ <uses-library android:name="android.test.runner" />
+ </application>
+
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.safetycenter.config.tests"
+ android:label="Tests for the Safety Center Config library" />
+</manifest>
diff --git a/SafetyCenter/Config/tests/AndroidTest.xml b/SafetyCenter/Config/tests/AndroidTest.xml
new file mode 100644
index 000000000..1874ce0c3
--- /dev/null
+++ b/SafetyCenter/Config/tests/AndroidTest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ ~ Copyright (C) 2022 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<configuration description="Runs unit tests for the Safety Center Config library.">
+ <option name="test-suite-tag" value="apct" />
+ <option name="test-suite-tag" value="apct-instrumentation" />
+ <option name="test-tag" value="SafetyCenterConfigTests" />
+ <object type="module_controller" class="com.android.tradefed.testtype.suite.module.Sdk30ModuleController" />
+
+ <!-- Install test -->
+ <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup">
+ <option name="test-file-name" value="SafetyCenterConfigTests.apk" />
+ <option name="cleanup-apks" value="true" />
+ </target_preparer>
+
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+ <option name="package" value="com.android.safetycenter.config.tests" />
+ <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
+ </test>
+</configuration>
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/ParseExceptionTest.kt b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParseExceptionTest.kt
index e805757a7..ca4f914c4 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/ParseExceptionTest.kt
+++ b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParseExceptionTest.kt
@@ -14,10 +14,9 @@
* limitations under the License.
*/
-package android.safetycenter.cts.config
+package com.android.safetycenter.config
import android.os.Build.VERSION_CODES.TIRAMISU
-import android.safetycenter.config.ParseException
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import com.google.common.truth.Truth.assertThat
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/ParserConfigInvalidTest.kt b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigInvalidTest.kt
index ca3d1c7f2..7d8820a3b 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/ParserConfigInvalidTest.kt
+++ b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigInvalidTest.kt
@@ -14,15 +14,13 @@
* limitations under the License.
*/
-package android.safetycenter.cts.config
+package com.android.safetycenter.config
import android.content.Context
import android.os.Build.VERSION_CODES.TIRAMISU
-import android.safetycenter.config.ParseException
-import android.safetycenter.config.SafetyCenterConfig
-import android.safetycenter.cts.R
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.test.filters.SdkSuppress
+import com.android.safetycenter.config.tests.R
import com.google.common.truth.Truth.assertThat
import org.junit.Assert.assertThrows
import org.junit.Test
@@ -48,9 +46,11 @@ class ParserConfigInvalidTest {
@Test
fun invalidConfig_throws() {
- val parser = context.resources.getXml(params.configResourceId)
+ val inputStream = context.resources.openRawResource(params.configResourceId)
- val thrown = assertThrows(ParseException::class.java) { SafetyCenterConfig.fromXml(parser) }
+ val thrown = assertThrows(ParseException::class.java) {
+ SafetyCenterConfigParser.parseXmlResource(inputStream, context.resources)
+ }
assertThat(thrown).hasMessageThat().isEqualTo(params.errorMessage)
if (params.causeErrorMessage != null) {
@@ -65,315 +65,357 @@ class ParserConfigInvalidTest {
arrayOf(
Params(
"ConfigDynamicSafetySourceAllDisabledNoWork",
- R.xml.config_dynamic_safety_source_all_disabled_no_work,
+ R.raw.config_dynamic_safety_source_all_disabled_no_work,
"Element dynamic-safety-source invalid",
"Required attribute titleForWork missing"
),
Params(
"ConfigDynamicSafetySourceAllNoWork",
- R.xml.config_dynamic_safety_source_all_no_work,
+ R.raw.config_dynamic_safety_source_all_no_work,
"Element dynamic-safety-source invalid",
"Required attribute titleForWork missing"
),
Params(
"ConfigDynamicSafetySourceDisabledNoSummary",
- R.xml.config_dynamic_safety_source_disabled_no_summary,
+ R.raw.config_dynamic_safety_source_disabled_no_summary,
"Element dynamic-safety-source invalid",
"Required attribute summary missing"
),
Params(
"ConfigDynamicSafetySourceDisabledNoTitle",
- R.xml.config_dynamic_safety_source_disabled_no_title,
+ R.raw.config_dynamic_safety_source_disabled_no_title,
"Element dynamic-safety-source invalid",
"Required attribute title missing"
),
Params(
"ConfigDynamicSafetySourceDuplicateKey",
- R.xml.config_dynamic_safety_source_duplicate_key,
+ R.raw.config_dynamic_safety_source_duplicate_key,
"Element safety-sources-config invalid",
"Duplicate id id among safety sources"
),
Params(
"ConfigDynamicSafetySourceHiddenWithIntent",
- R.xml.config_dynamic_safety_source_hidden_with_intent,
+ R.raw.config_dynamic_safety_source_hidden_with_intent,
"Element dynamic-safety-source invalid",
"Prohibited attribute intentAction present"
),
Params(
"ConfigDynamicSafetySourceHiddenWithSummary",
- R.xml.config_dynamic_safety_source_hidden_with_summary,
+ R.raw.config_dynamic_safety_source_hidden_with_summary,
"Element dynamic-safety-source invalid",
"Prohibited attribute summary present"
),
Params(
"ConfigDynamicSafetySourceHiddenWithTitle",
- R.xml.config_dynamic_safety_source_hidden_with_title,
+ R.raw.config_dynamic_safety_source_hidden_with_title,
"Element dynamic-safety-source invalid",
"Prohibited attribute title present"
),
Params(
"ConfigDynamicSafetySourceInvalidDisplay",
- R.xml.config_dynamic_safety_source_invalid_display,
+ R.raw.config_dynamic_safety_source_invalid_display,
"Attribute dynamic-safety-source.initialDisplayState invalid",
null
),
Params(
"ConfigDynamicSafetySourceInvalidProfile",
- R.xml.config_dynamic_safety_source_invalid_profile,
+ R.raw.config_dynamic_safety_source_invalid_profile,
"Attribute dynamic-safety-source.profile invalid",
null
),
Params(
"ConfigDynamicSafetySourceNoId",
- R.xml.config_dynamic_safety_source_no_id,
+ R.raw.config_dynamic_safety_source_no_id,
"Element dynamic-safety-source invalid",
"Required attribute id missing"
),
Params(
"ConfigDynamicSafetySourceNoIntent",
- R.xml.config_dynamic_safety_source_no_intent,
+ R.raw.config_dynamic_safety_source_no_intent,
"Element dynamic-safety-source invalid",
"Required attribute intentAction missing"
),
Params(
"ConfigDynamicSafetySourceNoPackage",
- R.xml.config_dynamic_safety_source_no_package,
+ R.raw.config_dynamic_safety_source_no_package,
"Element dynamic-safety-source invalid",
"Required attribute packageName missing"
),
Params(
"ConfigDynamicSafetySourceNoProfile",
- R.xml.config_dynamic_safety_source_no_profile,
+ R.raw.config_dynamic_safety_source_no_profile,
"Element dynamic-safety-source invalid",
"Required attribute profile missing"
),
Params(
"ConfigDynamicSafetySourceNoSummary",
- R.xml.config_dynamic_safety_source_no_summary,
+ R.raw.config_dynamic_safety_source_no_summary,
"Element dynamic-safety-source invalid",
"Required attribute summary missing"
),
Params(
"ConfigDynamicSafetySourceNoTitle",
- R.xml.config_dynamic_safety_source_no_title,
+ R.raw.config_dynamic_safety_source_no_title,
"Element dynamic-safety-source invalid",
"Required attribute title missing"
),
Params(
"ConfigDynamicSafetySourcePrimaryHiddenWithWork",
- R.xml.config_dynamic_safety_source_primary_hidden_with_work,
+ R.raw.config_dynamic_safety_source_primary_hidden_with_work,
"Element dynamic-safety-source invalid",
"Prohibited attribute titleForWork present"
),
Params(
"ConfigDynamicSafetySourcePrimaryWithWork",
- R.xml.config_dynamic_safety_source_primary_with_work,
+ R.raw.config_dynamic_safety_source_primary_with_work,
"Element dynamic-safety-source invalid",
"Prohibited attribute titleForWork present"
),
Params(
+ "ConfigFileCorrupted",
+ R.raw.config_file_corrupted,
+ "Exception while parsing the XML resource",
+ null
+ ),
+ Params(
"ConfigIssueOnlySafetySourceDuplicateKey",
- R.xml.config_issue_only_safety_source_duplicate_key,
+ R.raw.config_issue_only_safety_source_duplicate_key,
"Element safety-sources-config invalid",
"Duplicate id id among safety sources"
),
Params(
"ConfigIssueOnlySafetySourceInvalidProfile",
- R.xml.config_issue_only_safety_source_invalid_profile,
+ R.raw.config_issue_only_safety_source_invalid_profile,
"Attribute issue-only-safety-source.profile invalid",
null
),
Params(
"ConfigIssueOnlySafetySourceNoId",
- R.xml.config_issue_only_safety_source_no_id,
+ R.raw.config_issue_only_safety_source_no_id,
"Element issue-only-safety-source invalid",
"Required attribute id missing"
),
Params(
"ConfigIssueOnlySafetySourceNoPackage",
- R.xml.config_issue_only_safety_source_no_package,
+ R.raw.config_issue_only_safety_source_no_package,
"Element issue-only-safety-source invalid",
"Required attribute packageName missing"
),
Params(
"ConfigIssueOnlySafetySourceNoProfile",
- R.xml.config_issue_only_safety_source_no_profile,
+ R.raw.config_issue_only_safety_source_no_profile,
"Element issue-only-safety-source invalid",
"Required attribute profile missing"
),
Params(
"ConfigIssueOnlySafetySourceWithDisplay",
- R.xml.config_issue_only_safety_source_with_display,
+ R.raw.config_issue_only_safety_source_with_display,
"Element issue-only-safety-source invalid",
"Prohibited attribute initialDisplayState present"
),
Params(
"ConfigIssueOnlySafetySourceWithIntent",
- R.xml.config_issue_only_safety_source_with_intent,
+ R.raw.config_issue_only_safety_source_with_intent,
"Element issue-only-safety-source invalid",
"Prohibited attribute intentAction present"
),
Params(
"ConfigIssueOnlySafetySourceWithSearch",
- R.xml.config_issue_only_safety_source_with_search,
+ R.raw.config_issue_only_safety_source_with_search,
"Element issue-only-safety-source invalid",
"Prohibited attribute searchTerms present"
),
Params(
"ConfigIssueOnlySafetySourceWithSummary",
- R.xml.config_issue_only_safety_source_with_summary,
+ R.raw.config_issue_only_safety_source_with_summary,
"Element issue-only-safety-source invalid",
"Prohibited attribute summary present"
),
Params(
"ConfigIssueOnlySafetySourceWithTitle",
- R.xml.config_issue_only_safety_source_with_title,
+ R.raw.config_issue_only_safety_source_with_title,
"Element issue-only-safety-source invalid",
"Prohibited attribute title present"
),
Params(
"ConfigIssueOnlySafetySourceWithWork",
- R.xml.config_issue_only_safety_source_with_work,
+ R.raw.config_issue_only_safety_source_with_work,
"Element issue-only-safety-source invalid",
"Prohibited attribute titleForWork present"
),
Params(
"ConfigMixedSafetySourceDuplicateKey",
- R.xml.config_mixed_safety_source_duplicate_key,
+ R.raw.config_mixed_safety_source_duplicate_key,
"Element safety-sources-config invalid",
"Duplicate id id among safety sources"
),
Params(
- "ConfigReferenceInvalid",
- R.xml.config_reference_invalid,
- "Reference title in safety-sources-group.title missing or invalid",
- null
- ),
- Params(
"ConfigSafetyCenterConfigMissing",
- R.xml.config_safety_center_config_missing,
+ R.raw.config_safety_center_config_missing,
"Element safety-center-config missing",
null
),
Params(
"ConfigSafetySourcesConfigEmpty",
- R.xml.config_safety_sources_config_empty,
+ R.raw.config_safety_sources_config_empty,
"Element safety-sources-config invalid",
"No safety sources groups present"
),
Params(
"ConfigSafetySourcesConfigMissing",
- R.xml.config_safety_sources_config_missing,
+ R.raw.config_safety_sources_config_missing,
"Element safety-sources-config missing",
null
),
Params(
"ConfigSafetySourcesGroupDuplicateId",
- R.xml.config_safety_sources_group_duplicate_id,
+ R.raw.config_safety_sources_group_duplicate_id,
"Element safety-sources-config invalid",
"Duplicate id id among safety sources groups"
),
Params(
"ConfigSafetySourcesGroupEmpty",
- R.xml.config_safety_sources_group_empty,
+ R.raw.config_safety_sources_group_empty,
"Element safety-sources-group invalid",
"Safety sources group empty"
),
Params(
"ConfigSafetySourcesGroupInvalidIcon",
- R.xml.config_safety_sources_group_invalid_icon,
+ R.raw.config_safety_sources_group_invalid_icon,
"Attribute safety-sources-group.statelessIconType invalid",
null
),
Params(
"ConfigSafetySourcesGroupNoId",
- R.xml.config_safety_sources_group_no_id,
+ R.raw.config_safety_sources_group_no_id,
"Element safety-sources-group invalid",
"Required attribute id missing"
),
Params(
"ConfigSafetySourcesGroupNoTitle",
- R.xml.config_safety_sources_group_no_title,
+ R.raw.config_safety_sources_group_no_title,
"Element safety-sources-group invalid",
"Required attribute title missing"
),
Params(
"ConfigStaticSafetySourceDuplicateKey",
- R.xml.config_static_safety_source_duplicate_key,
+ R.raw.config_static_safety_source_duplicate_key,
"Element safety-sources-config invalid",
"Duplicate id id among safety sources"
),
Params(
"ConfigStaticSafetySourceInvalidProfile",
- R.xml.config_static_safety_source_invalid_profile,
+ R.raw.config_static_safety_source_invalid_profile,
"Attribute static-safety-source.profile invalid",
null
),
Params(
"ConfigStaticSafetySourceNoId",
- R.xml.config_static_safety_source_no_id,
+ R.raw.config_static_safety_source_no_id,
"Element static-safety-source invalid",
"Required attribute id missing"
),
Params(
"ConfigStaticSafetySourceNoIntent",
- R.xml.config_static_safety_source_no_intent,
+ R.raw.config_static_safety_source_no_intent,
"Element static-safety-source invalid",
"Required attribute intentAction missing"
),
Params(
"ConfigStaticSafetySourceNoProfile",
- R.xml.config_static_safety_source_no_profile,
+ R.raw.config_static_safety_source_no_profile,
"Element static-safety-source invalid",
"Required attribute profile missing"
),
Params(
"ConfigStaticSafetySourceNoSummary",
- R.xml.config_static_safety_source_no_summary,
+ R.raw.config_static_safety_source_no_summary,
"Element static-safety-source invalid",
"Required attribute summary missing"
),
Params(
"ConfigStaticSafetySourceNoTitle",
- R.xml.config_static_safety_source_no_title,
+ R.raw.config_static_safety_source_no_title,
"Element static-safety-source invalid",
"Required attribute title missing"
),
Params(
"ConfigStaticSafetySourceWithDisplay",
- R.xml.config_static_safety_source_with_display,
+ R.raw.config_static_safety_source_with_display,
"Element static-safety-source invalid",
"Prohibited attribute initialDisplayState present"
),
Params(
"ConfigStaticSafetySourceWithLogging",
- R.xml.config_static_safety_source_with_logging,
+ R.raw.config_static_safety_source_with_logging,
"Element static-safety-source invalid",
"Prohibited attribute loggingAllowed present"
),
Params(
"ConfigStaticSafetySourceWithPackage",
- R.xml.config_static_safety_source_with_package,
+ R.raw.config_static_safety_source_with_package,
"Element static-safety-source invalid",
"Prohibited attribute packageName present"
),
Params(
"ConfigStaticSafetySourceWithPrimaryAndWork",
- R.xml.config_static_safety_source_with_primary_and_work,
+ R.raw.config_static_safety_source_with_primary_and_work,
"Element static-safety-source invalid",
"Prohibited attribute titleForWork present"
),
Params(
"ConfigStaticSafetySourceWithRefresh",
- R.xml.config_static_safety_source_with_refresh,
+ R.raw.config_static_safety_source_with_refresh,
"Element static-safety-source invalid",
"Prohibited attribute refreshOnPageOpenAllowed present"
),
Params(
"ConfigStaticSafetySourceWithSeverity",
- R.xml.config_static_safety_source_with_severity,
+ R.raw.config_static_safety_source_with_severity,
"Element static-safety-source invalid",
"Prohibited attribute maxSeverityLevel present"
+ ),
+ Params(
+ "ConfigStringResourceNameInvalidEmpty",
+ R.raw.config_string_resource_name_empty,
+ "Resource name in safety-sources-group.title cannot be empty",
+ null
+ ),
+ Params(
+ "ConfigStringResourceNameInvalidNoAt",
+ R.raw.config_string_resource_name_invalid_no_at,
+ "Resource name com.android.safetycenter.config.tests:string/reference in " +
+ "safety-sources-group.title does not start with @",
+ null
+ ),
+ Params(
+ "ConfigStringResourceNameInvalidNoPackage",
+ R.raw.config_string_resource_name_invalid_no_package,
+ "Resource name @string/reference in safety-sources-group.title does not " +
+ "specify a package",
+ null
+ ),
+ Params(
+ "ConfigStringResourceNameInvalidNoType",
+ R.raw.config_string_resource_name_invalid_no_type,
+ "Resource name @com.android.safetycenter.config.tests:reference in " +
+ "safety-sources-group.title does not specify a type",
+ null
+ ),
+ Params(
+ "ConfigStringResourceNameInvalidWrongType",
+ R.raw.config_string_resource_name_invalid_wrong_type,
+ "Resource name @com.android.safetycenter.config.tests:raw/" +
+ "config_string_resource_name_invalid_wrong_type in " +
+ "safety-sources-group.title is not a string",
+ null
+ ),
+ Params(
+ "ConfigStringResourceNameMissing",
+ R.raw.config_string_resource_name_missing,
+ "Resource name @com.android.safetycenter.config.tests:string/missing in " +
+ "safety-sources-group.title missing or invalid",
+ null
)
)
}
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/ParserConfigValidTest.kt b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigValidTest.kt
index 675ecf95e..9c46baf77 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/ParserConfigValidTest.kt
+++ b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigValidTest.kt
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package android.safetycenter.cts.config
+package com.android.safetycenter.config
import android.content.Context
import android.os.Build.VERSION_CODES.TIRAMISU
import android.safetycenter.config.SafetyCenterConfig
import android.safetycenter.config.SafetySource
import android.safetycenter.config.SafetySourcesGroup
-import android.safetycenter.cts.R
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
+import com.android.safetycenter.config.tests.R
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith
@@ -36,9 +36,9 @@ class ParserConfigValidTest {
@Test
fun validConfig_matchesExpected() {
- val parser = context.resources.getXml(R.xml.config_valid)
+ val inputStream = context.resources.openRawResource(R.raw.config_valid)
- val actual = SafetyCenterConfig.fromXml(parser)
+ val actual = SafetyCenterConfigParser.parseXmlResource(inputStream, context.resources)
val expected =
SafetyCenterConfig.Builder()
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_all_disabled_no_work.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_all_disabled_no_work.xml
index b2594c7ab..7ced767f2 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_all_disabled_no_work.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_all_disabled_no_work.xml
@@ -2,13 +2,13 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="all_profiles"
initialDisplayState="disabled"/>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_all_no_work.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_all_no_work.xml
index e582e0470..ac2757085 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_all_no_work.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_all_no_work.xml
@@ -2,13 +2,13 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="all_profiles"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_disabled_no_summary.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_disabled_no_summary.xml
index 6d065992c..0f87ddece 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_disabled_no_summary.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_disabled_no_summary.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"
initialDisplayState="disabled"/>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_disabled_no_title.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_disabled_no_title.xml
index 6d535766a..edd47155c 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_disabled_no_title.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_disabled_no_title.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- summary="@string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"
initialDisplayState="disabled"/>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_duplicate_key.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_duplicate_key.xml
index be7114d61..20631dbbf 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_duplicate_key.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_duplicate_key.xml
@@ -2,25 +2,25 @@
<safety-sources-config>
<safety-sources-group
id="id1"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
<safety-sources-group
id="id2"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_intent.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_intent.xml
index b30a6d921..faee1c9e1 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_intent.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_intent.xml
@@ -2,8 +2,8 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_summary.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_summary.xml
index c0fd18120..9e9384350 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_summary.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_summary.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- summary="@string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
profile="primary_profile_only"
initialDisplayState="hidden"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_title.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_title.xml
index 190fcdc87..a79f438f7 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_hidden_with_title.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_hidden_with_title.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
profile="primary_profile_only"
initialDisplayState="hidden"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_invalid_display.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_invalid_display.xml
index 4c1d00a4c..f2a8b40fb 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_invalid_display.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_invalid_display.xml
@@ -2,13 +2,13 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"
initialDisplayState="invalid"/>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_invalid_profile.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_invalid_profile.xml
index 303415b75..85515bcce 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_invalid_profile.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_invalid_profile.xml
@@ -2,13 +2,13 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="invalid"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_id.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_id.xml
index 8ace4ea4c..93dfbb17c 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_id.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_id.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_intent.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_intent.xml
index 6119e4aca..c7930bf69 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_intent.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_intent.xml
@@ -2,13 +2,13 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
profile="primary_profile_only"/>
</safety-sources-group>
</safety-sources-config>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_package.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_package.xml
index 2b40602b5..5c0893d82 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_package.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_package.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_profile.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_profile.xml
index f54d9400a..b49b9baf0 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_profile.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_profile.xml
@@ -2,13 +2,13 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"/>
</safety-sources-group>
</safety-sources-config>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_summary.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_summary.xml
index 0683f163a..4c5573618 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_summary.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_summary.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_title.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_title.xml
index 84f90e5d9..89c198541 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_no_title.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_no_title.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- summary="@string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_primary_hidden_with_work.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_primary_hidden_with_work.xml
index ad7add545..b145b8848 100644
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_primary_hidden_with_work.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_primary_hidden_with_work.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- titleForWork="@string/reference"
+ titleForWork="@com.android.safetycenter.config.tests:string/reference"
profile="primary_profile_only"
initialDisplayState="hidden"/>
</safety-sources-group>
diff --git a/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_primary_with_work.xml b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_primary_with_work.xml
new file mode 100644
index 000000000..48e4de108
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_dynamic_safety_source_primary_with_work.xml
@@ -0,0 +1,17 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <dynamic-safety-source
+ id="id"
+ packageName="package"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ titleForWork="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/SafetyCenter/Config/tests/res/raw/config_file_corrupted.txt b/SafetyCenter/Config/tests/res/raw/config_file_corrupted.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_file_corrupted.txt
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_duplicate_key.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_duplicate_key.xml
index 9c00d5727..9c00d5727 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_duplicate_key.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_duplicate_key.xml
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_invalid_profile.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_invalid_profile.xml
index dd85d55a8..dd85d55a8 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_invalid_profile.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_invalid_profile.xml
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_id.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_id.xml
index d57db8e42..d57db8e42 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_id.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_id.xml
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_package.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_package.xml
index d68b55740..d68b55740 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_package.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_package.xml
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_profile.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_profile.xml
index 7e7b6ef5f..7e7b6ef5f 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_no_profile.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_no_profile.xml
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_display.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_display.xml
index 1fab83913..1fab83913 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_display.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_display.xml
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_intent.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_intent.xml
index 9a7fa6bb1..9a7fa6bb1 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_intent.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_intent.xml
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_search.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_search.xml
index b065a3898..849f35503 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_search.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_search.xml
@@ -6,7 +6,7 @@
id="id"
packageName="package"
profile="primary_profile_only"
- searchTerms="@string/reference"/>
+ searchTerms="@com.android.safetycenter.config.tests:string/reference"/>
</safety-sources-group>
</safety-sources-config>
</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_summary.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_summary.xml
index 7d010018b..04b2ad2a9 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_summary.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_summary.xml
@@ -6,7 +6,7 @@
id="id"
packageName="package"
profile="primary_profile_only"
- summary="@string/reference"/>
+ summary="@com.android.safetycenter.config.tests:string/reference"/>
</safety-sources-group>
</safety-sources-config>
</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_title.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_title.xml
index 3b46eeab7..68d8f1d18 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_title.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_title.xml
@@ -6,7 +6,7 @@
id="id"
packageName="package"
profile="primary_profile_only"
- title="@string/reference"/>
+ title="@com.android.safetycenter.config.tests:string/reference"/>
</safety-sources-group>
</safety-sources-config>
</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_work.xml b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_work.xml
index e50149008..9e0209811 100644
--- a/tests/cts/safetycenter/res/xml/config_issue_only_safety_source_with_work.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_issue_only_safety_source_with_work.xml
@@ -6,7 +6,7 @@
id="id"
packageName="package"
profile="all_profiles"
- titleForWork="@string/reference"/>
+ titleForWork="@com.android.safetycenter.config.tests:string/reference"/>
</safety-sources-group>
</safety-sources-config>
</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_mixed_safety_source_duplicate_key.xml b/SafetyCenter/Config/tests/res/raw/config_mixed_safety_source_duplicate_key.xml
index e939a9c22..98d10b03b 100644
--- a/tests/cts/safetycenter/res/xml/config_mixed_safety_source_duplicate_key.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_mixed_safety_source_duplicate_key.xml
@@ -2,23 +2,23 @@
<safety-sources-config>
<safety-sources-group
id="id1"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
<safety-sources-group
id="id2"
- title="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_safety_center_config_missing.xml b/SafetyCenter/Config/tests/res/raw/config_safety_center_config_missing.xml
index 475791691..475791691 100644
--- a/tests/cts/safetycenter/res/xml/config_safety_center_config_missing.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_safety_center_config_missing.xml
diff --git a/tests/cts/safetycenter/res/xml/config_safety_sources_config_empty.xml b/SafetyCenter/Config/tests/res/raw/config_safety_sources_config_empty.xml
index b26ffc008..b26ffc008 100644
--- a/tests/cts/safetycenter/res/xml/config_safety_sources_config_empty.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_safety_sources_config_empty.xml
diff --git a/tests/cts/safetycenter/res/xml/config_safety_sources_config_missing.xml b/SafetyCenter/Config/tests/res/raw/config_safety_sources_config_missing.xml
index 12545759a..12545759a 100644
--- a/tests/cts/safetycenter/res/xml/config_safety_sources_config_missing.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_safety_sources_config_missing.xml
diff --git a/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_duplicate_id.xml b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_duplicate_id.xml
new file mode 100644
index 000000000..ce2b2f0b8
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_duplicate_id.xml
@@ -0,0 +1,26 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id1"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id2"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_safety_sources_group_empty.xml b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_empty.xml
index a395152f8..5c4d49af9 100644
--- a/tests/cts/safetycenter/res/xml/config_safety_sources_group_empty.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_empty.xml
@@ -2,8 +2,8 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
</safety-sources-group>
</safety-sources-config>
</safety-center-config>
diff --git a/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_invalid_icon.xml b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_invalid_icon.xml
new file mode 100644
index 000000000..8a2713a6d
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_invalid_icon.xml
@@ -0,0 +1,16 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ statelessIconType="invalid">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_no_id.xml b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_no_id.xml
new file mode 100644
index 000000000..95f86dba8
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_no_id.xml
@@ -0,0 +1,14 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_safety_sources_group_no_title.xml b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_no_title.xml
index de3ce82b9..9ec249d22 100644
--- a/tests/cts/safetycenter/res/xml/config_safety_sources_group_no_title.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_safety_sources_group_no_title.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- summary="@string/reference">
+ summary="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="id"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/SafetyCenter/Config/tests/res/raw/config_static_safety_source_duplicate_key.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_duplicate_key.xml
new file mode 100644
index 000000000..2aab748d2
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_duplicate_key.xml
@@ -0,0 +1,26 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id1"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ <safety-sources-group
+ id="id2"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_invalid_profile.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_invalid_profile.xml
index 7c135e782..3c76e45bf 100644
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_invalid_profile.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_invalid_profile.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="invalid"/>
</safety-sources-group>
diff --git a/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_id.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_id.xml
new file mode 100644
index 000000000..9419fa324
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_id.xml
@@ -0,0 +1,14 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_intent.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_intent.xml
new file mode 100644
index 000000000..c354e0e02
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_intent.xml
@@ -0,0 +1,14 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_profile.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_profile.xml
new file mode 100644
index 000000000..5bb4bb0c2
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_profile.xml
@@ -0,0 +1,14 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_summary.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_summary.xml
index fa92f0bd8..a79ce63f0 100644
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_summary.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_summary.xml
@@ -2,11 +2,11 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_title.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_title.xml
index 654a486a5..57e73fbdd 100644
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_title.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_no_title.xml
@@ -2,11 +2,11 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- summary="@string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_display.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_display.xml
index 69c9ca215..40abad35f 100644
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_display.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_display.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"
initialDisplayState="disabled"/>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_logging.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_logging.xml
index 090554b1e..25cff1e83 100644
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_logging.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_logging.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"
loggingAllowed="false"/>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_package.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_package.xml
index 2a982b4cc..079b29033 100644
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_package.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_package.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"
packageName="package"/>
diff --git a/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_primary_and_work.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_primary_and_work.xml
new file mode 100644
index 000000000..570cf0f81
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_primary_and_work.xml
@@ -0,0 +1,16 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ titleForWork="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="primary_profile_only"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_refresh.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_refresh.xml
index caaeee6fb..42114f7ff 100644
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_refresh.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_refresh.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"
refreshOnPageOpenAllowed="true"/>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_severity.xml b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_severity.xml
index a9f5d9b89..4fd4ad9fb 100644
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_severity.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_static_safety_source_with_severity.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="@string/reference"
- summary="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"
maxSeverityLevel="300"/>
diff --git a/tests/cts/safetycenter/res/xml/config_reference_invalid.xml b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_empty.xml
index 743172994..34884cae3 100644
--- a/tests/cts/safetycenter/res/xml/config_reference_invalid.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_empty.xml
@@ -2,12 +2,12 @@
<safety-sources-config>
<safety-sources-group
id="id"
- title="title"
- summary="@string/reference">
+ title=""
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="1"/>
</safety-sources-group>
diff --git a/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_at.xml b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_at.xml
new file mode 100644
index 000000000..51fb843a2
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_at.xml
@@ -0,0 +1,15 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="1"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_safety_sources_group_invalid_icon.xml b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_package.xml
index 42b4c47d6..724cb0461 100644
--- a/tests/cts/safetycenter/res/xml/config_safety_sources_group_invalid_icon.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_package.xml
@@ -3,14 +3,13 @@
<safety-sources-group
id="id"
title="@string/reference"
- summary="@string/reference"
- statelessIconType="invalid">
+ summary="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="id"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
- profile="primary_profile_only"/>
+ profile="1"/>
</safety-sources-group>
</safety-sources-config>
</safety-center-config>
diff --git a/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_type.xml b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_type.xml
new file mode 100644
index 000000000..e2b7d1a89
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_no_type.xml
@@ -0,0 +1,15 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:reference"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="1"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_wrong_type.xml b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_wrong_type.xml
new file mode 100644
index 000000000..4560d1af9
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_invalid_wrong_type.xml
@@ -0,0 +1,15 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:raw/config_string_resource_name_invalid_wrong_type"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="1"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/SafetyCenter/Config/tests/res/raw/config_string_resource_name_missing.xml b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_missing.xml
new file mode 100644
index 000000000..7be3e9e29
--- /dev/null
+++ b/SafetyCenter/Config/tests/res/raw/config_string_resource_name_missing.xml
@@ -0,0 +1,15 @@
+<safety-center-config>
+ <safety-sources-config>
+ <safety-sources-group
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/missing"
+ summary="@com.android.safetycenter.config.tests:string/reference">
+ <static-safety-source
+ id="id"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
+ intentAction="intent"
+ profile="1"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_valid.xml b/SafetyCenter/Config/tests/res/raw/config_valid.xml
index 578ea1b72..09c5b93ce 100644
--- a/tests/cts/safetycenter/res/xml/config_valid.xml
+++ b/SafetyCenter/Config/tests/res/raw/config_valid.xml
@@ -2,34 +2,34 @@
<safety-sources-config>
<safety-sources-group
id="dynamic"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
statelessIconType="privacy">
<dynamic-safety-source
id="dynamic_barebone"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
<dynamic-safety-source
id="dynamic_all_optional"
packageName="package"
- title="@string/reference"
- titleForWork="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ titleForWork="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="all_profiles"
initialDisplayState="disabled"
maxSeverityLevel="300"
- searchTerms="@string/reference"
+ searchTerms="@com.android.safetycenter.config.tests:string/reference"
loggingAllowed="false"
refreshOnPageOpenAllowed="true"/>
<dynamic-safety-source
id="dynamic_disabled"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
profile="primary_profile_only"
initialDisplayState="disabled"/>
<dynamic-safety-source
@@ -40,21 +40,21 @@
</safety-sources-group>
<safety-sources-group
id="static"
- title="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference">
<static-safety-source
id="static_barebone"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
<static-safety-source
id="static_all_optional"
- title="@string/reference"
- titleForWork="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ titleForWork="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="all_profiles"
- searchTerms="@string/reference"/>
+ searchTerms="@com.android.safetycenter.config.tests:string/reference"/>
</safety-sources-group>
<safety-sources-group
id="issue_only">
@@ -72,12 +72,12 @@
</safety-sources-group>
<safety-sources-group
id="mixed"
- title="@string/reference">
+ title="@com.android.safetycenter.config.tests:string/reference">
<dynamic-safety-source
id="mixed_dynamic_barebone"
packageName="package"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
<issue-only-safety-source
@@ -86,8 +86,8 @@
profile="primary_profile_only"/>
<static-safety-source
id="mixed_static_barebone"
- title="@string/reference"
- summary="@string/reference"
+ title="@com.android.safetycenter.config.tests:string/reference"
+ summary="@com.android.safetycenter.config.tests:string/reference"
intentAction="intent"
profile="primary_profile_only"/>
</safety-sources-group>
diff --git a/tests/cts/safetycenter/res/values/strings.xml b/SafetyCenter/Config/tests/res/values/strings.xml
index 8ba7f04a8..8ba7f04a8 100644
--- a/tests/cts/safetycenter/res/values/strings.xml
+++ b/SafetyCenter/Config/tests/res/values/strings.xml
diff --git a/SafetyCenter/Resources/res/raw/safety_center_config.xml b/SafetyCenter/Resources/res/raw/safety_center_config.xml
new file mode 100644
index 000000000..ad891ee48
--- /dev/null
+++ b/SafetyCenter/Resources/res/raw/safety_center_config.xml
@@ -0,0 +1,48 @@
+<!--
+ ~ Copyright (C) 2021 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<safety-center-config>
+ <safety-sources-config>
+ <!-- TODO(b/214567659): Finalize base XML config -->
+ <safety-sources-group
+ id="AndroidLockScreenSources"
+ title="@com.android.safetycenter.resources:string/lock_screen_sources_title"
+ summary="@com.android.safetycenter.resources:string/summary_placeholder">
+ <dynamic-safety-source
+ id="AndroidLockScreen"
+ packageName="com.android.settings"
+ profile="primary_profile_only"
+ title="@com.android.safetycenter.resources:string/lock_screen_title"
+ summary="@com.android.safetycenter.resources:string/lock_screen_summary_disabled"
+ initialDisplayState="disabled"/>
+ <dynamic-safety-source
+ id="AndroidBiometrics"
+ packageName="com.android.settings"
+ profile="primary_profile_only"
+ initialDisplayState="hidden"/>
+ </safety-sources-group>
+ <safety-sources-group
+ id="AndroidAdvancedSources"
+ title="@com.android.safetycenter.resources:string/advanced_title">
+ <static-safety-source
+ id="AndroidAdvancedSecurity"
+ profile="primary_profile_only"
+ intentAction="com.android.settings.security.SECURITY_ADVANCED_SETTINGS"
+ title="@com.android.safetycenter.resources:string/advanced_security_title"
+ summary="@com.android.safetycenter.resources:string/advanced_security_summary"/>
+ </safety-sources-group>
+ </safety-sources-config>
+</safety-center-config>
diff --git a/SafetyCenter/Resources/res/values/strings.xml b/SafetyCenter/Resources/res/values/strings.xml
index 19a2ccad0..c65313bca 100644
--- a/SafetyCenter/Resources/res/values/strings.xml
+++ b/SafetyCenter/Resources/res/values/strings.xml
@@ -26,5 +26,10 @@
<string name="lock_screen_title" description="The default title of the setting for managing the screen lock on the device">Screen lock</string>
<string name="lock_screen_summary_disabled" description="The default summary of the setting for managing screen lock on the device before the current state is known to safety center">Details available soon</string>
+ <!-- Advanced -->
+ <string name="advanced_title" description="TODO">Advanced</string>
+ <string name="advanced_security_title" description="TODO">Advanced security</string>
+ <string name="advanced_security_summary" description="TODO">Screen lock, connected apps</string>
+
<string name="summary_placeholder" description="DO NOT TRANSLATE" translatable="false">&#160;</string>
</resources>
diff --git a/SafetyCenter/Resources/res/xml/safety_center_config.xml b/SafetyCenter/Resources/res/xml/safety_center_config.xml
deleted file mode 100644
index ee555ed86..000000000
--- a/SafetyCenter/Resources/res/xml/safety_center_config.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- ~ Copyright (C) 2021 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<safety-center-config>
- <safety-sources-config>
- <!-- TODO(b/214567659): Finalize base XML config -->
- <safety-sources-group
- id="LockScreenSources"
- title="@string/lock_screen_sources_title"
- summary="@string/summary_placeholder">
- <dynamic-safety-source
- profile="primary_profile_only"
- title="@string/lock_screen_title"
- summary="@string/lock_screen_summary_disabled"
- initialDisplayState="disabled"
- packageName="com.android.settings"
- id="LockScreen"/>
- <dynamic-safety-source
- profile="primary_profile_only"
- packageName="com.android.settings"
- initialDisplayState="hidden"
- id="Biometrics"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java
index 03989efc4..2fa6a1c28 100644
--- a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java
+++ b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java
@@ -27,12 +27,12 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.AssetManager;
import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import java.io.File;
+import java.io.InputStream;
import java.util.List;
/**
@@ -152,22 +152,25 @@ public class SafetyCenterResourcesContext extends ContextWrapper {
return mResourcesApkPkgName;
}
- /** Get the Safety Center config XML parser interface from the Safety Center resources APK. */
+ /**
+ * Get the raw XML resource representing the Safety Center configuration from the Safety Center
+ * resources APK.
+ */
@Nullable
- public XmlResourceParser getSafetyCenterConfig() {
- String resoursePkgName = getResourcesApkPkgName();
- if (resoursePkgName == null) {
+ public InputStream getSafetyCenterConfig() {
+ String resourcePkgName = getResourcesApkPkgName();
+ if (resourcePkgName == null) {
return null;
}
Resources resources = getResources();
if (resources == null) {
return null;
}
- int id = resources.getIdentifier(mConfigName, "xml", resoursePkgName);
+ int id = resources.getIdentifier(mConfigName, "raw", resourcePkgName);
if (id == Resources.ID_NULL) {
return null;
}
- return resources.getXml(id);
+ return resources.openRawResource(id);
}
@Nullable
diff --git a/SafetyCenter/ResourcesLib/tests/AndroidManifest.xml b/SafetyCenter/ResourcesLib/tests/AndroidManifest.xml
index 505505751..471af8d28 100644
--- a/SafetyCenter/ResourcesLib/tests/AndroidManifest.xml
+++ b/SafetyCenter/ResourcesLib/tests/AndroidManifest.xml
@@ -18,13 +18,13 @@
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.safetycenter.tests.resourceslib.safetycenterresourceslib">
+ package="com.android.safetycenter.resourceslib.tests">
<application android:label="Safety Center ResourcesLib Tests">
<uses-library android:name="android.test.runner" />
</application>
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.safetycenter.tests.resourceslib.safetycenterresourceslib"
+ android:targetPackage="com.android.safetycenter.resourceslib.tests"
android:label="Tests for the Safety Center ResourcesLib library" />
</manifest>
diff --git a/SafetyCenter/ResourcesLib/tests/AndroidTest.xml b/SafetyCenter/ResourcesLib/tests/AndroidTest.xml
index 840f17d63..75aff0812 100644
--- a/SafetyCenter/ResourcesLib/tests/AndroidTest.xml
+++ b/SafetyCenter/ResourcesLib/tests/AndroidTest.xml
@@ -30,7 +30,7 @@
</target_preparer>
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
- <option name="package" value="com.android.safetycenter.tests.resourceslib.safetycenterresourceslib" />
+ <option name="package" value="com.android.safetycenter.resourceslib.tests" />
<option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
</test>
</configuration>
diff --git a/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/raw/test.txt b/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/raw/test.txt
new file mode 100644
index 000000000..3b1246497
--- /dev/null
+++ b/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/raw/test.txt
@@ -0,0 +1 @@
+TEST \ No newline at end of file
diff --git a/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/xml/test.xml b/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/xml/test.xml
deleted file mode 100644
index 52e0a2001..000000000
--- a/SafetyCenter/ResourcesLib/tests/SafetyCenterResourcesLibTestResources/res/xml/test.xml
+++ /dev/null
@@ -1 +0,0 @@
-<test/> \ No newline at end of file
diff --git a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt
index 65a3b72bf..b6fd732a6 100644
--- a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt
+++ b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt
@@ -25,10 +25,6 @@ import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Test
import org.junit.runner.RunWith
-import org.xmlpull.v1.XmlPullParser.END_DOCUMENT
-import org.xmlpull.v1.XmlPullParser.END_TAG
-import org.xmlpull.v1.XmlPullParser.START_DOCUMENT
-import org.xmlpull.v1.XmlPullParser.START_TAG
@RunWith(AndroidJUnit4::class)
class SafetyCenterResourcesContextTest {
@@ -46,17 +42,9 @@ class SafetyCenterResourcesContextTest {
assertThat(safetyCenterResourcesContext.resourcesApkPkgName).isEqualTo(
RESOURCES_APK_PKG_NAME
)
- val parser = safetyCenterResourcesContext.safetyCenterConfig
- assertNotNull(parser)
- parser?.next()
- assertThat(parser?.eventType).isEqualTo(START_DOCUMENT)
- parser?.next()
- assertThat(parser?.eventType).isEqualTo(START_TAG)
- assertThat(parser?.name).isEqualTo(CONFIG_TAG)
- parser?.next()
- assertThat(parser?.eventType).isEqualTo(END_TAG)
- parser?.next()
- assertThat(parser?.eventType).isEqualTo(END_DOCUMENT)
+ val configContent =
+ safetyCenterResourcesContext.safetyCenterConfig?.bufferedReader().use { it?.readText() }
+ assertThat(configContent).isEqualTo(CONFIG_CONTENT)
assertNotNull(safetyCenterResourcesContext.assets)
assertNotNull(safetyCenterResourcesContext.resources)
assertNotNull(safetyCenterResourcesContext.theme)
@@ -132,6 +120,6 @@ class SafetyCenterResourcesContextTest {
const val RESOURCES_APK_PKG_NAME =
"com.android.safetycenter.tests.config.safetycenterresourceslibtestresources"
const val CONFIG_NAME = "test"
- const val CONFIG_TAG = "test"
+ const val CONFIG_CONTENT = "TEST"
}
} \ No newline at end of file
diff --git a/framework-s/api/system-current.txt b/framework-s/api/system-current.txt
index 483e46165..db2d140ca 100644
--- a/framework-s/api/system-current.txt
+++ b/framework-s/api/system-current.txt
@@ -425,14 +425,8 @@ package android.safetycenter {
package android.safetycenter.config {
- public final class ParseException extends java.lang.Exception {
- ctor public ParseException(@NonNull String);
- ctor public ParseException(@NonNull String, @NonNull Throwable);
- }
-
public final class SafetyCenterConfig implements android.os.Parcelable {
method public int describeContents();
- method @NonNull public static android.safetycenter.config.SafetyCenterConfig fromXml(@NonNull android.content.res.XmlResourceParser) throws android.safetycenter.config.ParseException;
method @NonNull public java.util.List<android.safetycenter.config.SafetySourcesGroup> getSafetySourcesGroups();
method public void writeToParcel(@NonNull android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.safetycenter.config.SafetyCenterConfig> CREATOR;
diff --git a/framework-s/java/android/safetycenter/config/SafetyCenterConfig.java b/framework-s/java/android/safetycenter/config/SafetyCenterConfig.java
index 99544e600..e6ee68616 100644
--- a/framework-s/java/android/safetycenter/config/SafetyCenterConfig.java
+++ b/framework-s/java/android/safetycenter/config/SafetyCenterConfig.java
@@ -23,7 +23,6 @@ import static java.util.Objects.requireNonNull;
import android.annotation.NonNull;
import android.annotation.SystemApi;
-import android.content.res.XmlResourceParser;
import android.os.Parcel;
import android.os.Parcelable;
@@ -71,20 +70,6 @@ public final class SafetyCenterConfig implements Parcelable {
mSafetySourcesGroups = safetySourcesGroups;
}
- /**
- * Parses and validates the given XML resource into a {@link SafetyCenterConfig} object.
- *
- * <p>It throws a {@link ParseException} if the given XML resource does not comply with the
- * safety_center_config.xsd schema.
- *
- * @param parser the XML resource parsing interface
- */
- @NonNull
- public static SafetyCenterConfig fromXml(@NonNull XmlResourceParser parser)
- throws ParseException {
- return SafetyCenterConfigParser.parseXmlResource(parser);
- }
-
/** Returns the list of {@link SafetySourcesGroup}s in the configuration. */
@NonNull
public List<SafetySourcesGroup> getSafetySourcesGroups() {
diff --git a/service/Android.bp b/service/Android.bp
index 86e320418..73d240bab 100644
--- a/service/Android.bp
+++ b/service/Android.bp
@@ -111,6 +111,7 @@ java_sdk_library {
//"kotlin-stdlib",
"modules-utils-backgroundthread",
"modules-utils-os",
+ "safety-center-config",
"safety-center-resources-lib",
"service-permission-shared",
],
diff --git a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java
index 61315a125..109b4b0ac 100644
--- a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java
+++ b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java
@@ -23,15 +23,17 @@ import android.annotation.Nullable;
import android.annotation.StringRes;
import android.content.Context;
import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
-import android.safetycenter.config.ParseException;
import android.safetycenter.config.SafetyCenterConfig;
import android.util.Log;
import androidx.annotation.RequiresApi;
+import com.android.safetycenter.config.ParseException;
+import com.android.safetycenter.config.SafetyCenterConfigParser;
import com.android.safetycenter.resources.SafetyCenterResourcesContext;
+import java.io.InputStream;
+
/**
* A class that reads the {@link SafetyCenterConfig} from the associated {@link
* SafetyCenterResourcesContext}.
@@ -100,14 +102,21 @@ final class SafetyCenterConfigReader {
@Nullable
private SafetyCenterConfig readSafetyCenterConfig() {
- XmlResourceParser parser = mSafetyCenterResourcesContext.getSafetyCenterConfig();
- if (parser == null) {
+ InputStream in = mSafetyCenterResourcesContext.getSafetyCenterConfig();
+ if (in == null) {
Log.e(TAG, "Cannot get safety center config file");
return null;
}
+ Resources resources = mSafetyCenterResourcesContext.getResources();
+ if (resources == null) {
+ Log.e(TAG, "Cannot get safety center resources");
+ return null;
+ }
+
try {
- SafetyCenterConfig safetyCenterConfig = SafetyCenterConfig.fromXml(parser);
+ SafetyCenterConfig safetyCenterConfig =
+ SafetyCenterConfigParser.parseXmlResource(in, resources);
Log.i(TAG, "SafetyCenterConfig read successfully");
return safetyCenterConfig;
} catch (ParseException e) {
diff --git a/tests/cts/safetycenter/Android.bp b/tests/cts/safetycenter/Android.bp
index a19827075..82b6e76df 100644
--- a/tests/cts/safetycenter/Android.bp
+++ b/tests/cts/safetycenter/Android.bp
@@ -39,6 +39,7 @@ android_test {
"kotlin-stdlib",
"kotlinx-coroutines-android",
"kotlin-test",
+ "safety-center-config",
"safety-center-resources-lib",
"truth-prebuilt",
],
diff --git a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_primary_with_work.xml b/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_primary_with_work.xml
deleted file mode 100644
index 3ecf80264..000000000
--- a/tests/cts/safetycenter/res/xml/config_dynamic_safety_source_primary_with_work.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<safety-center-config>
- <safety-sources-config>
- <safety-sources-group
- id="id"
- title="@string/reference"
- summary="@string/reference">
- <dynamic-safety-source
- id="id"
- packageName="package"
- title="@string/reference"
- titleForWork="@string/reference"
- summary="@string/reference"
- intentAction="intent"
- profile="primary_profile_only"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_safety_sources_group_duplicate_id.xml b/tests/cts/safetycenter/res/xml/config_safety_sources_group_duplicate_id.xml
deleted file mode 100644
index 0ce73371e..000000000
--- a/tests/cts/safetycenter/res/xml/config_safety_sources_group_duplicate_id.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<safety-center-config>
- <safety-sources-config>
- <safety-sources-group
- id="id"
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- id="id1"
- title="@string/reference"
- summary="@string/reference"
- intentAction="intent"
- profile="primary_profile_only"/>
- </safety-sources-group>
- <safety-sources-group
- id="id"
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- id="id2"
- title="@string/reference"
- summary="@string/reference"
- intentAction="intent"
- profile="primary_profile_only"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_safety_sources_group_no_id.xml b/tests/cts/safetycenter/res/xml/config_safety_sources_group_no_id.xml
deleted file mode 100644
index eaee6731a..000000000
--- a/tests/cts/safetycenter/res/xml/config_safety_sources_group_no_id.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<safety-center-config>
- <safety-sources-config>
- <safety-sources-group
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- id="id"
- title="@string/reference"
- summary="@string/reference"
- intentAction="intent"
- profile="primary_profile_only"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_duplicate_key.xml b/tests/cts/safetycenter/res/xml/config_static_safety_source_duplicate_key.xml
deleted file mode 100644
index 4fe5e1e65..000000000
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_duplicate_key.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<safety-center-config>
- <safety-sources-config>
- <safety-sources-group
- id="id1"
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- id="id"
- title="@string/reference"
- summary="@string/reference"
- intentAction="intent"
- profile="primary_profile_only"/>
- </safety-sources-group>
- <safety-sources-group
- id="id2"
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- id="id"
- title="@string/reference"
- summary="@string/reference"
- intentAction="intent"
- profile="primary_profile_only"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_id.xml b/tests/cts/safetycenter/res/xml/config_static_safety_source_no_id.xml
deleted file mode 100644
index 7b919343b..000000000
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_id.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<safety-center-config>
- <safety-sources-config>
- <safety-sources-group
- id="id"
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- title="@string/reference"
- summary="@string/reference"
- intentAction="intent"
- profile="primary_profile_only"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_intent.xml b/tests/cts/safetycenter/res/xml/config_static_safety_source_no_intent.xml
deleted file mode 100644
index 9e97efbc9..000000000
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_intent.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<safety-center-config>
- <safety-sources-config>
- <safety-sources-group
- id="id"
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- id="id"
- title="@string/reference"
- summary="@string/reference"
- profile="primary_profile_only"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_profile.xml b/tests/cts/safetycenter/res/xml/config_static_safety_source_no_profile.xml
deleted file mode 100644
index 32d23c789..000000000
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_no_profile.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<safety-center-config>
- <safety-sources-config>
- <safety-sources-group
- id="id"
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- id="id"
- title="@string/reference"
- summary="@string/reference"
- intentAction="intent"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_primary_and_work.xml b/tests/cts/safetycenter/res/xml/config_static_safety_source_with_primary_and_work.xml
deleted file mode 100644
index 296e2bc4a..000000000
--- a/tests/cts/safetycenter/res/xml/config_static_safety_source_with_primary_and_work.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<safety-center-config>
- <safety-sources-config>
- <safety-sources-group
- id="id"
- title="@string/reference"
- summary="@string/reference">
- <static-safety-source
- id="id"
- title="@string/reference"
- titleForWork="@string/reference"
- summary="@string/reference"
- intentAction="intent"
- profile="primary_profile_only"/>
- </safety-sources-group>
- </safety-sources-config>
-</safety-center-config>
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt
index b3f6bfb12..2becb39f6 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/config/XmlConfigTest.kt
@@ -17,10 +17,10 @@
package android.safetycenter.cts.config
import android.os.Build.VERSION_CODES.TIRAMISU
-import android.safetycenter.config.SafetyCenterConfig
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
+import com.android.safetycenter.config.SafetyCenterConfigParser
import com.android.safetycenter.resources.SafetyCenterResourcesContext
import com.google.common.truth.Truth.assertThat
import org.junit.Test
@@ -34,6 +34,9 @@ class XmlConfigTest {
@Test
fun safetyCenterConfigResource_validConfig() {
// Assert that the parser validates the Safety Center config without throwing any exception
- assertThat(SafetyCenterConfig.fromXml(safetyCenterContext.safetyCenterConfig!!)).isNotNull()
+ assertThat(SafetyCenterConfigParser.parseXmlResource(
+ safetyCenterContext.safetyCenterConfig!!,
+ safetyCenterContext.resources!!
+ )).isNotNull()
}
}