summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-11-27 08:11:40 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2024-11-27 08:11:40 +0000
commit328b1a66a2d930ebf73cb1bbb010b893640d8bd8 (patch)
treeb387bdd4a2bb53ae4f28c4cf023699f37ba54a2b
parentb3da0fd6587b7b17d8eec270c83259aca8428614 (diff)
parent93b436df329c00675cf085b10418e2bfdffcb8bd (diff)
Merge "Add SystemFeaturesMetadata to framework" into main am: 93b436df32
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3368824 Change-Id: Icdd22cc44949fc7e621b2a0c2fbdcded302a63b5 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--Android.bp1
-rw-r--r--core/java/android/content/pm/PackageManager.java10
-rw-r--r--core/tests/coretests/src/android/content/pm/PackageManagerTest.java24
3 files changed, 35 insertions, 0 deletions
diff --git a/Android.bp b/Android.bp
index dbed474a639c..7a3fe6719bba 100644
--- a/Android.bp
+++ b/Android.bp
@@ -370,6 +370,7 @@ java_defaults {
"view-inspector-annotation-processor",
"staledataclass-annotation-processor",
"error_prone_android_framework",
+ "systemfeatures-metadata-processor",
],
// Exports needed for staledataclass-annotation-processor, see b/139342589.
javacflags: [
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 150890be283c..6be26a434b19 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -3116,6 +3116,16 @@ public abstract class PackageManager {
public static final long MAXIMUM_VERIFICATION_TIMEOUT = 60*60*1000;
/**
+ * As the generated feature count is useful for classes that may not be compiled in the same
+ * annotation processing unit as PackageManager, we redeclare it here for visibility.
+ *
+ * @hide
+ */
+ @VisibleForTesting
+ public static final int SDK_FEATURE_COUNT =
+ com.android.internal.pm.SystemFeaturesMetadata.SDK_FEATURE_COUNT;
+
+ /**
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device's
* audio pipeline is low-latency, more suitable for audio applications sensitive to delays or
* lag in sound input or output.
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTest.java b/core/tests/coretests/src/android/content/pm/PackageManagerTest.java
index b60d61408054..c55008e4aba5 100644
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTest.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTest.java
@@ -24,6 +24,9 @@ import androidx.test.filters.SmallTest;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+
@RunWith(AndroidJUnit4.class)
@SmallTest
public class PackageManagerTest {
@@ -46,4 +49,25 @@ public class PackageManagerTest {
public void testResolveInfoFlags() throws Exception {
assertThat(PackageManager.ResolveInfoFlags.of(42L).getValue()).isEqualTo(42L);
}
+
+ @Test
+ public void testSdkFeatureCount() throws Exception {
+ // Check to make sure the system feature `SdkConst` annotation processor yields sensible
+ // results. We don't care about the exactness, just that it's not pathologically wrong.
+ assertThat(PackageManager.SDK_FEATURE_COUNT).isGreaterThan(150);
+ assertThat(PackageManager.SDK_FEATURE_COUNT).isLessThan(500);
+ assertThat(PackageManager.SDK_FEATURE_COUNT)
+ .isWithin(50)
+ .of(getApproximateFeatureCountUsingReflection());
+ }
+
+ /* Return a ballpark estimate of the feature count using FEATURE_ field names. */
+ private static int getApproximateFeatureCountUsingReflection() {
+ return (int)
+ Arrays.stream(PackageManager.class.getFields())
+ .filter(field -> Modifier.isStatic(field.getModifiers()))
+ .filter(field -> Modifier.isFinal(field.getModifiers()))
+ .filter(field -> field.getName().startsWith("FEATURE_"))
+ .count();
+ }
}