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

Commit 493fd4e6 authored by Doris Ling's avatar Doris Ling
Browse files

Recursively find preference in progressive disclosure.

Add handling to check for nested preference when finding preference
in the collapsed list.

Change-Id: I830bdd5fd99f09c505f41fd3bb2fa968eb9b13cf
Fix: 35363405
Test: make RunSettingsRoboTests
parent db59347c
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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;
+19 −0
Original line number Diff line number Diff line
@@ -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);