diff --git a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java index 77bd253e9aa..90c3d250b32 100644 --- a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java +++ b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java @@ -21,6 +21,7 @@ import android.os.Bundle; import android.support.annotation.VisibleForTesting; import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.util.Log; @@ -219,6 +220,12 @@ public class ProgressiveDisclosureMixin implements Preference.OnPreferenceClickL if (TextUtils.equals(key, pref.getKey())) { return pref; } + if (pref instanceof PreferenceGroup) { + final Preference returnedPreference = ((PreferenceGroup)pref).findPreference(key); + if (returnedPreference != null) { + return returnedPreference; + } + } } Log.d(TAG, "Cannot find preference with key " + key); return null; diff --git a/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java b/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java index 573b2b5ccae..e7f97c3a6cb 100644 --- a/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java @@ -19,6 +19,7 @@ package com.android.settings.dashboard; import android.content.Context; import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; @@ -44,7 +45,9 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -141,6 +144,22 @@ public class ProgressiveDisclosureTest { assertThat(pref).isNull(); } + @Test + public void findPreference_nestedPrefInCollapsedList_shouldFindIt() { + when(mScreen.findPreference(anyString())).thenReturn(null); + final PreferenceScreen prefGroup = spy(new PreferenceScreen(mAppContext, null)); + when(prefGroup.getPreferenceManager()).thenReturn(mock(PreferenceManager.class)); + final Preference preference = mock(Preference.class); + when(preference.getKey()).thenReturn("TestKey"); + prefGroup.addPreference(preference); + mMixin.addToCollapsedList(prefGroup); + + Preference pref = mMixin.findPreference(mScreen, "TestKey"); + + assertThat(pref).isNotNull(); + assertThat(pref).isSameAs(preference); + } + @Test public void removePreference_shouldRemoveOnScreenPreference() { when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);