From 4a08fc1c59210d66629749f99d1f6dd749729a8c Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Mon, 18 Nov 2019 16:11:53 +0800 Subject: [PATCH] Add new method to preference controller base for dynamic index. - Add updateDynamicRawDataToIndex method. - Implement preference controller index in BaseSearchIndexProvider. Fixes: 144545478 Test: make RunSettingsGoogleRoboTests -j make RunSettingsRoboTests ROBOTEST_FILTER= com.android.settings.search.BaseSearchIndexProviderTest Change-Id: Ibb11002227b280102b45d7c0610eae48ecf4c0f3 --- .../core/BasePreferenceController.java | 10 ++++++++- .../core/PreferenceControllerMixin.java | 10 ++++++++- .../search/BaseSearchIndexProvider.java | 19 ++++++++++++++++- .../search/BaseSearchIndexProviderTest.java | 21 +++++++++++++++++++ 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/core/BasePreferenceController.java b/src/com/android/settings/core/BasePreferenceController.java index cef372e80e6..eeb77ad131e 100644 --- a/src/com/android/settings/core/BasePreferenceController.java +++ b/src/com/android/settings/core/BasePreferenceController.java @@ -274,6 +274,14 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl public void updateRawDataToIndex(List rawData) { } + /** + * Updates dynamic raw data for search provider. + * + * Called by SearchIndexProvider#getDynamicRawDataToIndex + */ + public void updateDynamicRawDataToIndex(List rawData) { + } + /** * Set {@link UiBlockListener} * @@ -308,4 +316,4 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl */ public interface UiBlocker { } -} \ No newline at end of file +} diff --git a/src/com/android/settings/core/PreferenceControllerMixin.java b/src/com/android/settings/core/PreferenceControllerMixin.java index fa615523b92..6ddea3dad1b 100644 --- a/src/com/android/settings/core/PreferenceControllerMixin.java +++ b/src/com/android/settings/core/PreferenceControllerMixin.java @@ -18,8 +18,8 @@ package com.android.settings.core; import android.text.TextUtils; import android.util.Log; -import com.android.settingslib.search.SearchIndexableRaw; import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.search.SearchIndexableRaw; import java.util.List; @@ -62,4 +62,12 @@ public interface PreferenceControllerMixin { */ default void updateRawDataToIndex(List rawData) { } + + /** + * Updates dynamic raw data for search provider. + * + * Called by SearchIndexProvider#getDynamicRawDataToIndex + */ + default void updateDynamicRawDataToIndex(List rawData) { + } } diff --git a/src/com/android/settings/search/BaseSearchIndexProvider.java b/src/com/android/settings/search/BaseSearchIndexProvider.java index abf1c997869..da890622bee 100644 --- a/src/com/android/settings/search/BaseSearchIndexProvider.java +++ b/src/com/android/settings/search/BaseSearchIndexProvider.java @@ -77,8 +77,25 @@ public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider { } @Override + @CallSuper public List getDynamicRawDataToIndex(Context context, boolean enabled) { - return null; + final List dynamicRaws = new ArrayList<>(); + final List controllers = getPreferenceControllers(context); + if (controllers == null || controllers.isEmpty()) { + return dynamicRaws; + } + for (AbstractPreferenceController controller : controllers) { + if (controller instanceof PreferenceControllerMixin) { + ((PreferenceControllerMixin) controller).updateDynamicRawDataToIndex(dynamicRaws); + } else if (controller instanceof BasePreferenceController) { + ((BasePreferenceController) controller).updateDynamicRawDataToIndex(dynamicRaws); + } else { + Log.e(TAG, controller.getClass().getName() + + " must implement " + PreferenceControllerMixin.class.getName() + + " treating the dynamic indexable"); + } + } + return dynamicRaws; } @Override diff --git a/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java b/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java index 5e5e5731758..522163079f2 100644 --- a/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java +++ b/tests/robotests/src/com/android/settings/search/BaseSearchIndexProviderTest.java @@ -28,6 +28,7 @@ import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.search.SearchIndexableRaw; import org.junit.Before; import org.junit.Test; @@ -77,6 +78,12 @@ public class BaseSearchIndexProviderTest { public String getPreferenceKey() { return TEST_PREF_KEY; } + + @Override + public void updateDynamicRawDataToIndex(List rawData) { + final SearchIndexableRaw raw = new SearchIndexableRaw(this.mContext); + rawData.add(raw); + } } @Test @@ -190,4 +197,18 @@ public class BaseSearchIndexProviderTest { assertThat(nonIndexableKeys).contains("pref_key_5"); } + + @Test + public void getDynamicRawDataToIndex_noPreferenceController_shouldReturnEmptyList() { + assertThat(mIndexProvider.getDynamicRawDataToIndex(mContext, true)).isEmpty(); + } + + @Test + public void getDynamicRawDataToIndex_hasDynamicRaw_shouldNotEmpty() { + List controllers = new ArrayList<>(); + controllers.add(new AvailablePreferenceController(mContext)); + doReturn(controllers).when(mIndexProvider).createPreferenceControllers(mContext); + + assertThat(mIndexProvider.getDynamicRawDataToIndex(mContext, true)).isNotEmpty(); + } }