diff options
| author | 2024-11-27 08:11:40 +0000 | |
|---|---|---|
| committer | 2024-11-27 08:11:40 +0000 | |
| commit | 328b1a66a2d930ebf73cb1bbb010b893640d8bd8 (patch) | |
| tree | b387bdd4a2bb53ae4f28c4cf023699f37ba54a2b | |
| parent | b3da0fd6587b7b17d8eec270c83259aca8428614 (diff) | |
| parent | 93b436df329c00675cf085b10418e2bfdffcb8bd (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.bp | 1 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 10 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/content/pm/PackageManagerTest.java | 24 |
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(); + } } |