Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7c15281 authored by Chaohui Wang's avatar Chaohui Wang
Browse files

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
parent b6e0cd99
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -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());
            Log.w(TAG, "Skipping updateNonIndexableKeys due to empty key " + this);
            return;
        }
        if (!keys.contains(key) && !isAvailableForSearch()) {
            keys.add(key);
        }
    }