mode) {
+ mProducers.add(new FeatureItem<>(feature, mode));
+ }
+
private class PluginItem implements Item, PluginListener {
private final PluginConverter mConverter;
private T mItem;
@@ -305,6 +318,32 @@ public class ExtensionControllerImpl implements ExtensionController {
}
}
+ private class FeatureItem implements Item {
+ private final String mFeature;
+ private final Supplier mSupplier;
+
+ public FeatureItem(String feature, Supplier supplier) {
+ mSupplier = supplier;
+ mFeature = feature;
+ }
+
+ @Override
+ public T get() {
+ return mDefaultContext.getPackageManager().hasSystemFeature(mFeature)
+ ? mSupplier.get() : null;
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+
+ @Override
+ public int sortOrder() {
+ return SORT_ORDER_FEATURE;
+ }
+ }
+
private class Default implements Item {
private final Supplier mSupplier;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java
index 586a424cb8160..ab16e3bd163e9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeExtensionController.java
@@ -80,6 +80,11 @@ public class FakeExtensionController implements ExtensionController {
return null;
}
+ @Override
+ public ExtensionBuilder withFeature(String feature, Supplier def) {
+ return null;
+ }
+
@Override
public Extension build() {
return new FakeExtension(mAllocation);