Instantiate pref controllers from xml if it's defined.
- If a <preference> tag also defines a controller, we will try to instantiate it before displaying the UI. The same logic is shared by BaseSearchIndexProvider so it also drives search suppression. - If user also defines a list of controllers programatically, the programatically created ones takes precedence. Bug: 73668763 Test: WIP Change-Id: I7aecec270bcd3af261e012ef1f6995d2a523cfa1
This commit is contained in:
@@ -28,6 +28,7 @@ import android.util.Log;
|
||||
import android.util.Xml;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.core.PreferenceControllerListHelper;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settings.core.PreferenceXmlParserUtils;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
@@ -66,7 +67,7 @@ public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider {
|
||||
// Entire page should be suppressed, mark all keys from this page as non-indexable.
|
||||
return getNonIndexableKeysFromXml(context);
|
||||
}
|
||||
final List<AbstractPreferenceController> controllers = getPreferenceControllers(context);
|
||||
final List<AbstractPreferenceController> controllers = getAllPreferenceControllers(context);
|
||||
if (controllers != null && !controllers.isEmpty()) {
|
||||
final List<String> nonIndexableKeys = new ArrayList<>();
|
||||
for (AbstractPreferenceController controller : controllers) {
|
||||
@@ -88,6 +89,28 @@ public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AbstractPreferenceController> getAllPreferenceControllers(Context context) {
|
||||
final List<AbstractPreferenceController> controllersFromCode =
|
||||
getPreferenceControllers(context);
|
||||
final List<SearchIndexableResource> res = getXmlResourcesToIndex(context, true);
|
||||
if (res == null || res.isEmpty()) {
|
||||
return controllersFromCode;
|
||||
}
|
||||
List<BasePreferenceController> controllersFromXml = new ArrayList<>();
|
||||
for (SearchIndexableResource sir : res) {
|
||||
controllersFromXml.addAll(PreferenceControllerListHelper
|
||||
.getPreferenceControllersFromXml(context, sir.xmlResId));
|
||||
}
|
||||
controllersFromXml = PreferenceControllerListHelper.filterControllers(controllersFromXml,
|
||||
controllersFromCode);
|
||||
final List<AbstractPreferenceController> allControllers = new ArrayList<>();
|
||||
if (controllersFromCode != null) {
|
||||
allControllers.addAll(controllersFromCode);
|
||||
}
|
||||
allControllers.addAll(controllersFromXml);
|
||||
return allControllers;
|
||||
}
|
||||
|
||||
public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
|
||||
return null;
|
||||
}
|
||||
|
Reference in New Issue
Block a user