Speed up BasePreferenceController.updateNonIndexableKeys

By avoid unnecessary calls to getAvailabilityStatus(), which also avoid
unnecessary crash potential.
- When key already marked searchable="false" in xml, no need to check
  getAvailabilityStatus() again.
- When getAvailabilityStatus() return AVAILABLE, no need to call it
  again to check it not equals to AVAILABLE_UNSEARCHABLE.

Bug: 352455031
Flag: EXEMPT refactor
Test: redo search index - by changing locale
Change-Id: Ic0c43b9bcd5974907b3a7d4aba73d4c7203f8af4
This commit is contained in:
Chaohui Wang
2024-08-02 13:35:42 +08:00
parent b6e0cd99c1
commit a7c152816d

View File

@@ -263,6 +263,16 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
|| availabilityStatus == DISABLED_DEPENDENT_SETTING);
}
private boolean isAvailableForSearch() {
if (mIsForWork && mWorkProfileUser == null) {
return false;
}
final int availabilityStatus = getAvailabilityStatus();
return (availabilityStatus == AVAILABLE
|| availabilityStatus == DISABLED_DEPENDENT_SETTING);
}
/**
* @return {@code false} if the setting is not applicable to the device. This covers both
* settings which were only introduced in future versions of android, or settings that have
@@ -303,18 +313,12 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
* Called by SearchIndexProvider#getNonIndexableKeys
*/
public void updateNonIndexableKeys(List<String> keys) {
final boolean shouldSuppressFromSearch = !isAvailable()
|| getAvailabilityStatus() == AVAILABLE_UNSEARCHABLE;
if (shouldSuppressFromSearch) {
final String key = getPreferenceKey();
if (TextUtils.isEmpty(key)) {
Log.w(TAG, "Skipping updateNonIndexableKeys due to empty key " + toString());
return;
}
if (keys.contains(key)) {
Log.w(TAG, "Skipping updateNonIndexableKeys, key already in list. " + toString());
return;
}
final String key = getPreferenceKey();
if (TextUtils.isEmpty(key)) {
Log.w(TAG, "Skipping updateNonIndexableKeys due to empty key " + this);
return;
}
if (!keys.contains(key) && !isAvailableForSearch()) {
keys.add(key);
}
}