From d1a7a5618ef86588c6a5c05ae4604b97c11b755e Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Wed, 20 May 2020 20:55:11 +0800 Subject: [PATCH] Add the "Smart Lock" item to dynamic index. - The "Smart Lock" item is a trust agent which comes from TrustAgentManager, so add it to dynamic index. Fixes: 148867137 Test: manual test the search result and run Settings robotest Change-Id: I7cd3a9df89a9b9378fa49cc2cb2127c778b795f2 --- .../TrustAgentListPreferenceController.java | 61 +++++++++++++++---- ...rustAgentListPreferenceControllerTest.java | 35 ++++++++++- 2 files changed, 81 insertions(+), 15 deletions(-) diff --git a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java index eb50b7c0b37..6067b77e59f 100644 --- a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java +++ b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java @@ -44,6 +44,7 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; +import com.android.settingslib.search.SearchIndexableRaw; import java.util.List; @@ -134,34 +135,68 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro updateTrustAgents(); } + + @Override + public void updateDynamicRawDataToIndex(List rawData) { + if (!isAvailable()) { + return; + } + + final List agents = getActiveTrustAgents( + mContext); + if (agents == null) { + return; + } + + for (int i = 0, size = agents.size(); i < size; i++) { + final SearchIndexableRaw raw = new SearchIndexableRaw(mContext); + final TrustAgentManager.TrustAgentComponentInfo agent = agents.get(i); + + raw.key = PREF_KEY_TRUST_AGENT + i; + raw.title = agent.title; + rawData.add(raw); + } + } + + /** + * @return The active trust agents from TrustAgentManager. + */ + private List getActiveTrustAgents(Context context) { + return mTrustAgentManager.getActiveTrustAgents(context, mLockPatternUtils); + } + private void updateTrustAgents() { if (mSecurityCategory == null) { return; } + // If for some reason the preference is no longer available, don't proceed to add. + if (!isAvailable()) { + return; + } + final List agents = getActiveTrustAgents( + mContext); + if (agents == null) { + return; + } + // First remove all old trust agents. - while (true) { - final Preference oldAgent = mSecurityCategory.findPreference(PREF_KEY_TRUST_AGENT); + for (int i = 0, size = agents.size(); i < size; i++) { + String key = PREF_KEY_TRUST_AGENT + i; + final Preference oldAgent = mSecurityCategory.findPreference(key); if (oldAgent == null) { break; } else { mSecurityCategory.removePreference(oldAgent); } } - // If for some reason the preference is no longer available, don't proceed to add. - if (!isAvailable()) { - return; - } + // Then add new ones. final boolean hasSecurity = mLockPatternUtils.isSecure(MY_USER_ID); - final List agents = - mTrustAgentManager.getActiveTrustAgents(mContext, mLockPatternUtils); - if (agents == null) { - return; - } - for (TrustAgentManager.TrustAgentComponentInfo agent : agents) { + for (int i = 0, size = agents.size(); i < size; i++) { final RestrictedPreference trustAgentPreference = new RestrictedPreference(mSecurityCategory.getContext()); - trustAgentPreference.setKey(PREF_KEY_TRUST_AGENT); + TrustAgentManager.TrustAgentComponentInfo agent = agents.get(i); + trustAgentPreference.setKey(PREF_KEY_TRUST_AGENT + i); trustAgentPreference.setTitle(agent.title); trustAgentPreference.setSummary(agent.summary); // Create intent for this preference. diff --git a/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java index d9202d437f5..c0fbff79358 100644 --- a/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java @@ -44,6 +44,7 @@ import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.security.SecuritySettings; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settingslib.search.SearchIndexableRaw; import org.junit.Before; import org.junit.Test; @@ -111,10 +112,20 @@ public class TrustAgentListPreferenceControllerTest { @Test public void onResume_shouldClearOldAgents() { final Preference oldAgent = new Preference(mActivity); - oldAgent.setKey(PREF_KEY_TRUST_AGENT); - when(mCategory.findPreference(PREF_KEY_TRUST_AGENT)) + oldAgent.setKey(PREF_KEY_TRUST_AGENT + 0); + when(mCategory.findPreference(PREF_KEY_TRUST_AGENT + 0)) .thenReturn(oldAgent) .thenReturn(null); + final List agents = new ArrayList<>(); + final TrustAgentManager.TrustAgentComponentInfo agent = + mock(TrustAgentManager.TrustAgentComponentInfo.class); + agent.title = "Test_title"; + agent.summary = "test summary"; + agent.componentName = new ComponentName("pkg", "agent"); + agent.admin = null; + agents.add(agent); + when(mTrustAgentManager.getActiveTrustAgents(mActivity, mLockPatternUtils)) + .thenReturn(agents); mController.displayPreference(mScreen); mController.onResume(); @@ -160,4 +171,24 @@ public class TrustAgentListPreferenceControllerTest { verify(mCategory, never()).addPreference(any(Preference.class)); } + + @Test + public void updateDynamicRawDataToIndex_shouldIndexAgents() { + final List agents = new ArrayList<>(); + final TrustAgentManager.TrustAgentComponentInfo agent = + mock(TrustAgentManager.TrustAgentComponentInfo.class); + agent.title = "Test_title"; + agent.summary = "test summary"; + agent.componentName = new ComponentName("pkg", "agent"); + agent.admin = null; + agents.add(agent); + when(mTrustAgentManager.getActiveTrustAgents(mActivity, mLockPatternUtils)) + .thenReturn(agents); + final List indexRaws = new ArrayList<>(); + + mController.updateDynamicRawDataToIndex(indexRaws); + + assertThat(indexRaws).hasSize(1); + } + }