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

Commit d1a7a561 authored by Stanley Wang's avatar Stanley Wang
Browse files

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
parent a44860c8
Loading
Loading
Loading
Loading
+48 −13
Original line number Diff line number Diff line
@@ -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<SearchIndexableRaw> rawData) {
        if (!isAvailable()) {
            return;
        }

        final List<TrustAgentManager.TrustAgentComponentInfo> 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<TrustAgentManager.TrustAgentComponentInfo> 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<TrustAgentManager.TrustAgentComponentInfo> 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<TrustAgentManager.TrustAgentComponentInfo> 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.
+33 −2
Original line number Diff line number Diff line
@@ -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<TrustAgentManager.TrustAgentComponentInfo> 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<TrustAgentManager.TrustAgentComponentInfo> 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<SearchIndexableRaw> indexRaws = new ArrayList<>();

        mController.updateDynamicRawDataToIndex(indexRaws);

        assertThat(indexRaws).hasSize(1);
    }

}