From f1a0801c00e57407a8d7eacdac72905cdbe0ceee Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Mon, 22 Jun 2020 14:38:37 +0800 Subject: [PATCH] Fix the bug of not showing lock screen before entering Smart Lock page. Controller can't find the target preference to handle the click event. Store the preference keys to match the clicked item. Fixes: 158716163 Test: run robotest and manually test the click behavior Change-Id: Ie243206ceffef013c56c4ea29c14fe56da510fb6 --- .../TrustAgentListPreferenceController.java | 10 +++++-- ...rustAgentListPreferenceControllerTest.java | 27 +++++++++++++++---- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java index 6067b77e59f..19e25fc5882 100644 --- a/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java +++ b/src/com/android/settings/security/trustagent/TrustAgentListPreferenceController.java @@ -23,7 +23,6 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.UserHandle; -import android.text.TextUtils; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; @@ -46,6 +45,7 @@ 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.ArrayList; import java.util.List; public class TrustAgentListPreferenceController extends AbstractPreferenceController @@ -66,6 +66,9 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro private Intent mTrustAgentClickIntent; private PreferenceCategory mSecurityCategory; + @VisibleForTesting + final List mTrustAgentsKeyList; + public TrustAgentListPreferenceController(Context context, SecuritySettings host, Lifecycle lifecycle) { super(context); @@ -74,6 +77,7 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro mHost = host; mLockPatternUtils = provider.getLockPatternUtils(context); mTrustAgentManager = provider.getTrustAgentManager(); + mTrustAgentsKeyList = new ArrayList(); if (lifecycle != null) { lifecycle.addObserver(this); } @@ -113,7 +117,7 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro @Override public boolean handlePreferenceTreeClick(Preference preference) { - if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { + if (!mTrustAgentsKeyList.contains(preference.getKey())) { return super.handlePreferenceTreeClick(preference); } final ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper( @@ -189,6 +193,7 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro mSecurityCategory.removePreference(oldAgent); } } + mTrustAgentsKeyList.clear(); // Then add new ones. final boolean hasSecurity = mLockPatternUtils.isSecure(MY_USER_ID); @@ -196,6 +201,7 @@ public class TrustAgentListPreferenceController extends AbstractPreferenceContro final RestrictedPreference trustAgentPreference = new RestrictedPreference(mSecurityCategory.getContext()); TrustAgentManager.TrustAgentComponentInfo agent = agents.get(i); + mTrustAgentsKeyList.add(PREF_KEY_TRUST_AGENT + i); trustAgentPreference.setKey(PREF_KEY_TRUST_AGENT + i); trustAgentPreference.setTitle(agent.title); trustAgentPreference.setSummary(agent.summary); 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 c0fbff79358..0463e003ae2 100644 --- a/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/trustagent/TrustAgentListPreferenceControllerTest.java @@ -16,10 +16,8 @@ package com.android.settings.security.trustagent; -import static com.android.settings.security.trustagent.TrustAgentListPreferenceController - .PREF_KEY_SECURITY_CATEGORY; -import static com.android.settings.security.trustagent.TrustAgentListPreferenceController - .PREF_KEY_TRUST_AGENT; +import static com.android.settings.security.trustagent.TrustAgentListPreferenceController.PREF_KEY_SECURITY_CATEGORY; +import static com.android.settings.security.trustagent.TrustAgentListPreferenceController.PREF_KEY_TRUST_AGENT; import static com.google.common.truth.Truth.assertThat; @@ -172,6 +170,26 @@ public class TrustAgentListPreferenceControllerTest { verify(mCategory, never()).addPreference(any(Preference.class)); } + @Test + public void onResume_controllerShouldHasKey() { + 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 String key = PREF_KEY_TRUST_AGENT + 0; + + mController.displayPreference(mScreen); + mController.onResume(); + + assertThat(mController.mTrustAgentsKeyList).containsExactly(key); + } + @Test public void updateDynamicRawDataToIndex_shouldIndexAgents() { final List agents = new ArrayList<>(); @@ -190,5 +208,4 @@ public class TrustAgentListPreferenceControllerTest { assertThat(indexRaws).hasSize(1); } - }