summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Edward Savage-Jones <edward.savage-jones@sony.com> 2024-10-09 09:20:09 +0200
committer Yurii Zubrytskyi <zyy@google.com> 2024-11-05 20:05:20 +0000
commit0c3ad80f2de7bfd6d8fb9bda73e96fd4026401b3 (patch)
tree25b80ec814d59896bef0ddad4e808c6de1ee2e5a
parent238801c3ab0ec5896bf8d7e2f2fc3cf03880c32b (diff)
Allow packages to be enabled depending on sku value
This change allows packages to be enabled on boot depending on the sku of the device. This enables the same product image to be used on different skus. Example: Packages are listed here in a disabled state: /product/etc/sysconfig/disabled-in-sku.xml <?xml version="1.0" encoding="utf-8"?> <config> <disabled-in-sku package="com.sony.product1.app"/> <disabled-in-sku package="com.sony.product2.app"/> </config> Then enabled depending on the sku values read from "ro.boot.hardware.sku" e.g. an sku of '00001': /product/etc/sysconfig/sku_00001/enabled-in-sku-override.xml <?xml version="1.0" encoding="utf-8"?> <config> <enabled-in-sku-override package="com.sony.product2.app"/> </config> Status of apps after customisation: product2 app - enabled product1 app - disabled and not visible to PackageManager Bug: 376275452 Test: atest FrameworksServicesTests:com.android.server.systemconfig.SystemConfigTest Change-Id: Id1418beda7e264cab90086836c32785341fb5aac
-rw-r--r--services/core/java/com/android/server/SystemConfig.java19
-rw-r--r--services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java34
2 files changed, 53 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java
index 9b987e9850c4..8c83ad70625a 100644
--- a/services/core/java/com/android/server/SystemConfig.java
+++ b/services/core/java/com/android/server/SystemConfig.java
@@ -1319,6 +1319,7 @@ public class SystemConfig {
}
XmlUtils.skipCurrentTag(parser);
} break;
+ case "disabled-in-sku":
case "disabled-until-used-preinstalled-carrier-app": {
if (allowAppConfigs) {
String pkgname = parser.getAttributeValue(null, "package");
@@ -1335,6 +1336,24 @@ public class SystemConfig {
}
XmlUtils.skipCurrentTag(parser);
} break;
+ case "enabled-in-sku-override": {
+ if (allowAppConfigs) {
+ String pkgname = parser.getAttributeValue(null, "package");
+ if (pkgname == null) {
+ Slog.w(TAG,
+ "<" + name + "> without "
+ + "package in " + permFile + " at "
+ + parser.getPositionDescription());
+ } else if (!mDisabledUntilUsedPreinstalledCarrierApps.remove(pkgname)) {
+ Slog.w(TAG,
+ "<" + name + "> packagename:" + pkgname + " not included"
+ + "in disabled-in-sku");
+ }
+ } else {
+ logNotAllowedInPartition(name, permFile, parser);
+ }
+ XmlUtils.skipCurrentTag(parser);
+ } break;
case "privapp-permissions": {
if (allowPrivappPermissions) {
// privapp permissions from system, apex, vendor, product and
diff --git a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
index 3bc089fb3f5d..842c441e09f2 100644
--- a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java
@@ -691,6 +691,40 @@ public class SystemConfigTest {
assertThat(actual).isEqualTo(expected);
}
+ /**
+ * Tests that readPermissions works correctly for the tags:
+ * disabled-in-sku, enabled-in-sku-override.
+ * I.e. that disabled-in-sku add package to block list and
+ * enabled-in-sku-override removes package from the list.
+ */
+ @Test
+ public void testDisablePackageInSku() throws Exception {
+ final String disable_in_sku =
+ "<config>\n"
+ + " <disabled-in-sku package=\"com.sony.product1.app\"/>\n"
+ + " <disabled-in-sku package=\"com.sony.product2.app\"/>\n"
+ + "</config>\n";
+
+ final String enable_in_sku_override =
+ "<config>\n"
+ + " <enabled-in-sku-override package=\"com.sony.product2.app\"/>\n"
+ + "</config>\n";
+
+ final File folder1 = createTempSubfolder("folder1");
+ createTempFile(folder1, "permissionFile1.xml", disable_in_sku);
+
+ final File folder2 = createTempSubfolder("folder2");
+ createTempFile(folder2, "permissionFile2.xml", enable_in_sku_override);
+
+ readPermissions(folder1, /* Grant all permission flags */ ~0);
+ readPermissions(folder2, /* Grant all permission flags */ ~0);
+
+ final ArraySet<String> blocklist = mSysConfig.getDisabledUntilUsedPreinstalledCarrierApps();
+
+ assertThat(blocklist).contains("com.sony.product1.app");
+ assertThat(blocklist).doesNotContain("com.sony.product2.app");
+ }
+
private void parseSharedLibraries(String contents) throws IOException {
File folder = createTempSubfolder("permissions_folder");
createTempFile(folder, "permissions.xml", contents);