PreferenceGroupInitialExpandedChildrenCountTest.java revision 4af60aaa5e9f5375373e40669bd4d20ac9ebf80f
1f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling/*
2f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * Copyright (C) 2017 The Android Open Source Project
3f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling *
4f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * Licensed under the Apache License, Version 2.0 (the "License");
5f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * you may not use this file except in compliance with the License.
6f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * You may obtain a copy of the License at
7f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling *
8f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling *      http://www.apache.org/licenses/LICENSE-2.0
9f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling *
10f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * Unless required by applicable law or agreed to in writing, software
11f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * distributed under the License is distributed on an "AS IS" BASIS,
12f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * See the License for the specific language governing permissions and
14f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling * limitations under the License.
15f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling */
16f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
17f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingpackage android.support.v7.preference;
18f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
19f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static junit.framework.Assert.assertEquals;
20f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static junit.framework.Assert.assertNotNull;
21f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
22f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static org.mockito.Mockito.any;
23f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static org.mockito.Mockito.anyLong;
24f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static org.mockito.Mockito.doAnswer;
25f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static org.mockito.Mockito.never;
26f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static org.mockito.Mockito.reset;
27f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static org.mockito.Mockito.spy;
28f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport static org.mockito.Mockito.verify;
29f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
30f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport android.content.Context;
31f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport android.os.Handler;
32f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport android.os.Message;
33f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport android.os.Parcelable;
34f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport android.support.test.InstrumentationRegistry;
35f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport android.support.test.annotation.UiThreadTest;
36f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport android.support.test.filters.SmallTest;
37f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport android.support.test.runner.AndroidJUnit4;
38f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
39f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport org.junit.Before;
40f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport org.junit.Test;
41f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport org.junit.runner.RunWith;
42f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport org.mockito.MockitoAnnotations;
43f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport org.mockito.invocation.InvocationOnMock;
44f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport org.mockito.stubbing.Answer;
45f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
46f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport java.util.ArrayList;
47f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingimport java.util.List;
48f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
49f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling@RunWith(AndroidJUnit4.class)
50f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling@SmallTest
51f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Lingpublic class PreferenceGroupInitialExpandedChildrenCountTest {
52f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
53f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private static final int INITIAL_EXPANDED_COUNT = 5;
54f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private static final int TOTAL_PREFERENCE = 10;
55f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private static final String PREFERENCE_TITLE_PREFIX = "Preference_";
56f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
57f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private Context mContext;
58f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private PreferenceManager mPreferenceManager;
59f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private PreferenceScreen mScreen;
60f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private Handler mHandler;
61f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private List<Preference> mPreferenceList;
62f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
63f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Before
64f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
65f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void setup() throws Exception {
66f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        MockitoAnnotations.initMocks(this);
67f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mContext = InstrumentationRegistry.getTargetContext();
68f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mPreferenceManager = new PreferenceManager(mContext);
69f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen = mPreferenceManager.createPreferenceScreen(mContext);
70f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
71f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Add 10 preferences to the screen and to the cache
72f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mPreferenceList = new ArrayList<>();
73f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        createTestPreferences(mScreen, mPreferenceList, TOTAL_PREFERENCE);
74f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
75f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Execute the handler task immediately
76f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mHandler = spy(new Handler());
77f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        doAnswer(new Answer<Void>() {
78f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            @Override
79f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            public Void answer(InvocationOnMock invocation) throws Throwable {
80f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                Object[] args = invocation.getArguments();
81f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                Message message = (Message) args[0];
82f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                mHandler.dispatchMessage(message);
83f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                return null;
84f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            }
85f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        }).when(mHandler).sendMessageDelayed(any(Message.class), anyLong());
86f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
87f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
88f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
89f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that when PreferenceGroupAdapter is created, the PreferenceInstanceStateCallback
90f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * is set on the PreferenceGroup.
91f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
92f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
93f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
94f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void createPreferenceGroupAdapter_setPreferenceInstanceStateCallback() {
95f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
96f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertNotNull(mScreen.getPreferenceInstanceStateCallback());
97f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
98f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
99f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
100f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that PreferenceGroupAdapter is showing the preferences on the screen correctly with
101f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * and without the collapsed child count set.
102f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
103f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
104f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
105f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void createPreferenceGroupAdapter_displayTopLevelPreferences() {
106f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // No limit, should display all 10 preferences
107f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
108f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreExpanded(preferenceGroupAdapter);
109f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
110f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Limit > child count, should display all 10 preferences
111f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(TOTAL_PREFERENCE + 4);
112f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
113f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreExpanded(preferenceGroupAdapter);
114f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
115f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Limit = child count, should display all 10 preferences
116f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(TOTAL_PREFERENCE);
117f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
118f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreExpanded(preferenceGroupAdapter);
119f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
120f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Limit < child count, should display up to the limit + expand button
121f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
122f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
123f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreCollapsed(preferenceGroupAdapter);
124f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        for (int i = 0; i < INITIAL_EXPANDED_COUNT; i++) {
125f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            assertEquals(mPreferenceList.get(i), preferenceGroupAdapter.getItem(i));
126f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        }
127f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(CollapsiblePreferenceGroupController.ExpandButton.class,
128f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                preferenceGroupAdapter.getItem(INITIAL_EXPANDED_COUNT).getClass());
129f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
130f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
131f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
132f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that PreferenceGroupAdapter is showing nested preferences on the screen correctly
133f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * with and without the collapsed child count set.
134f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
135f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
136f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
137f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void createPreferenceGroupAdapter_displayNestedPreferences() {
138f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        final PreferenceScreen screen = mPreferenceManager.createPreferenceScreen(mContext);
139f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        final List<Preference> preferenceList = new ArrayList<>();
140f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
141f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Add 2 preferences and 2 categories to screen
142f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        createTestPreferences(screen, preferenceList, 2);
143f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        createTestPreferencesCategory(screen, preferenceList, 4);
144f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        createTestPreferencesCategory(screen, preferenceList, 4);
145f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
146f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // No limit, should display all 10 preferences + 2 categories
147f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter = new PreferenceGroupAdapter(screen);
148f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(TOTAL_PREFERENCE + 2, preferenceGroupAdapter.getItemCount());
149f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
150f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Limit > child count, should display all 10 preferences + 2 categories
151f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        screen.setInitialExpandedChildrenCount(TOTAL_PREFERENCE + 4);
152f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter = new PreferenceGroupAdapter(screen);
153f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(TOTAL_PREFERENCE + 2, preferenceGroupAdapter.getItemCount());
154f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
155f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Limit = child count, should display all 10 preferences + 2 categories
156f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        screen.setInitialExpandedChildrenCount(TOTAL_PREFERENCE);
157f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter = new PreferenceGroupAdapter(screen);
158f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(TOTAL_PREFERENCE + 2, preferenceGroupAdapter.getItemCount());
159f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
160f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Limit < child count, should display 2 preferences and the first 3 preference in the
161f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // category + expand button
162f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        screen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
163f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter = new PreferenceGroupAdapter(screen);
164f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(INITIAL_EXPANDED_COUNT + 2, preferenceGroupAdapter.getItemCount());
165f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        for (int i = 0; i <= INITIAL_EXPANDED_COUNT; i++) {
166f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            assertEquals(preferenceList.get(i), preferenceGroupAdapter.getItem(i));
167f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        }
168f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(CollapsiblePreferenceGroupController.ExpandButton.class,
169f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                preferenceGroupAdapter.getItem(INITIAL_EXPANDED_COUNT + 1).getClass());
170f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
171f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
172f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
173f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that correct summary is set for the expand button.
174f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
175f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
176f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
177f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void createPreferenceGroupAdapter_setExpandButtonSummary() {
178f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
179f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
180f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Preference 5 to Preference 9 are collapsed
181f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        CharSequence summary = mPreferenceList.get(INITIAL_EXPANDED_COUNT).getTitle();
182f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        for (int i = INITIAL_EXPANDED_COUNT + 1; i < TOTAL_PREFERENCE; i++) {
183f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            summary = mContext.getString(R.string.summary_collapsed_preference_list,
184f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                    summary, mPreferenceList.get(i).getTitle());
185f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        }
186f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        final Preference expandButton = preferenceGroupAdapter.getItem(INITIAL_EXPANDED_COUNT);
187f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(summary, expandButton.getSummary());
188f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
189f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
190f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
1914af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling     * Verifies that summary for the expand button only lists visible preferences.
1924af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling     */
1934af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling    @Test
1944af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling    @UiThreadTest
1954af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling    public void createPreferenceGroupAdapter_expandButtonSummaryShouldListVisiblePreferencesOnly() {
1964af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
1974af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        mPreferenceList.get(INITIAL_EXPANDED_COUNT + 1).setVisible(false);
1984af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        mPreferenceList.get(INITIAL_EXPANDED_COUNT + 4).setVisible(false);
1994af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        PreferenceGroupAdapter preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
2004af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        // Preference 5 to Preference 9 are collapsed, only preferences 5, 7, 8 are visible
2014af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        CharSequence summary = mPreferenceList.get(INITIAL_EXPANDED_COUNT).getTitle();
2024af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        summary = mContext.getString(R.string.summary_collapsed_preference_list,
2034af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling                summary, mPreferenceList.get(INITIAL_EXPANDED_COUNT + 2).getTitle());
2044af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        summary = mContext.getString(R.string.summary_collapsed_preference_list,
2054af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling                summary, mPreferenceList.get(INITIAL_EXPANDED_COUNT + 3).getTitle());
2064af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        final Preference expandButton = preferenceGroupAdapter.getItem(INITIAL_EXPANDED_COUNT);
2074af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling        assertEquals(summary, expandButton.getSummary());
2084af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling    }
2094af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling
2104af60aaa5e9f5375373e40669bd4d20ac9ebf80fDoris Ling    /**
211f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that clicking the expand button will show all preferences.
212f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
213f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
214f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
215f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void clickExpandButton_shouldShowAllPreferences() {
216f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
217f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
218f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // First showing 5 preference with expand button
219f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter =
220f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
221f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreCollapsed(preferenceGroupAdapter);
222f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
223f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Click the expand button, should review all preferences
224f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        final Preference expandButton = preferenceGroupAdapter.getItem(INITIAL_EXPANDED_COUNT);
225f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        expandButton.performClick();
226f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreExpanded(preferenceGroupAdapter);
227f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
228f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
229f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
230f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that when preference visibility changes, it will sync the preferences only if some
231f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * preferences are collapsed.
232f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
233f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
234f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
235f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void onPreferenceVisibilityChange_shouldSyncPreferencesIfCollapsed() {
236f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // No limit set, should not sync preference
237f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter =
238f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
239f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter.onPreferenceVisibilityChange(mPreferenceList.get(3));
240f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler, never()).sendMessageDelayed(any(Message.class), anyLong());
241f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
242f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Has limit set, should sync preference
243f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
244f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter =
245f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
246f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter.onPreferenceVisibilityChange(mPreferenceList.get(3));
247f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler).sendMessageDelayed(any(Message.class), anyLong());
248f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
249f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Preferences expanded already, should not sync preference
250f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        final Preference expandButton = preferenceGroupAdapter.getItem(INITIAL_EXPANDED_COUNT);
251f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        expandButton.performClick();
252f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        reset(mHandler);
253f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter.onPreferenceVisibilityChange(mPreferenceList.get(3));
254f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler, never()).sendMessageDelayed(any(Message.class), anyLong());
255f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
256f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
257f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
258f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that the correct maximum number of preferences to show is being saved in the
259f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * instance state.
260f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
261f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
262f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
263f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void saveInstanceState_shouldSaveMaxNumberOfChildrenToShow() {
264f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // No limit set, should save max value
265f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
266f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        Parcelable state = mScreen.onSaveInstanceState();
267f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(CollapsiblePreferenceGroupController.SavedState.class, state.getClass());
268f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(Integer.MAX_VALUE,
269f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                ((CollapsiblePreferenceGroupController.SavedState) state).mMaxPreferenceToShow);
270f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
271f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Has limit set, should save limit
272f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
273f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter = new PreferenceGroupAdapter(mScreen);
274f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        state = mScreen.onSaveInstanceState();
275f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(CollapsiblePreferenceGroupController.SavedState.class, state.getClass());
276f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(INITIAL_EXPANDED_COUNT,
277f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                ((CollapsiblePreferenceGroupController.SavedState) state).mMaxPreferenceToShow);
278f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
279f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Preferences expanded already, should save max value
280f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        final Preference expandButton = preferenceGroupAdapter.getItem(INITIAL_EXPANDED_COUNT);
281f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        expandButton.performClick();
282f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        state = mScreen.onSaveInstanceState();
283f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(CollapsiblePreferenceGroupController.SavedState.class, state.getClass());
284f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(Integer.MAX_VALUE,
285f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                ((CollapsiblePreferenceGroupController.SavedState) state).mMaxPreferenceToShow);
286f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
287f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
288f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
289f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that if we restore to the same number of preferences to show, it will not update
290f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * anything.
291f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
292f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
293f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
294f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void restoreInstanceState_noChange_shouldDoNothing() {
295f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        Parcelable baseState = Preference.BaseSavedState.EMPTY_STATE;
296f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Initialized as expanded, restore with no saved data, should remain expanded
297f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter =
298f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
299f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.onRestoreInstanceState(baseState);
300f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreExpanded(preferenceGroupAdapter);
301f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler, never()).sendMessageDelayed(any(Message.class), anyLong());
302f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
303f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Initialized as collapsed, restore with no saved data, should remain collapsed
304f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
305f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter =
306f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
307f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.onRestoreInstanceState(baseState);
308f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreCollapsed(preferenceGroupAdapter);
309f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler, never()).sendMessageDelayed(any(Message.class), anyLong());
310f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
311f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        CollapsiblePreferenceGroupController.SavedState state =
312f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                new CollapsiblePreferenceGroupController.SavedState(baseState);
313f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Initialized as expanded, restore as expanded, should remain expanded
314f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        state.mMaxPreferenceToShow = Integer.MAX_VALUE;
315f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(Integer.MAX_VALUE);
316f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter =
317f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
318f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.onRestoreInstanceState(state);
319f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreExpanded(preferenceGroupAdapter);
320f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler, never()).sendMessageDelayed(any(Message.class), anyLong());
321f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
322f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Initialized as collapsed, restore as collapsed, should remain collapsed
323f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        state.mMaxPreferenceToShow = INITIAL_EXPANDED_COUNT;
324f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
325f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroupAdapter =
326f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
327f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.onRestoreInstanceState(state);
328f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreCollapsed(preferenceGroupAdapter);
329f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler, never()).sendMessageDelayed(any(Message.class), anyLong());
330f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
331f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
332f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
333f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that if the children is collapsed previously, they should be collapsed after the
334f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * state is being restored.
335f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
336f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
337f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
338f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void restoreHierarchyState_previouslyCollapsed_shouldRestoreToCollapsedState() {
339f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        CollapsiblePreferenceGroupController.SavedState state =
340f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                new CollapsiblePreferenceGroupController.SavedState(
341f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                        Preference.BaseSavedState.EMPTY_STATE);
342f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Initialized as expanded, restore as collapsed, should collapse
343f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        state.mMaxPreferenceToShow = INITIAL_EXPANDED_COUNT;
344f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(Integer.MAX_VALUE);
345f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter =
346f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
347f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.onRestoreInstanceState(state);
348f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler).sendMessageDelayed(any(Message.class), anyLong());
349f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreCollapsed(preferenceGroupAdapter);
350f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
351f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
352f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    /**
353f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * Verifies that if the children is expanded previously, they should be expanded after the
354f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     * state is being restored.
355f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling     */
356f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @Test
357f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    @UiThreadTest
358f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    public void restoreHierarchyState_previouslyExpanded_shouldRestoreToExpandedState() {
359f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        CollapsiblePreferenceGroupController.SavedState state =
360f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                new CollapsiblePreferenceGroupController.SavedState(
361f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                        Preference.BaseSavedState.EMPTY_STATE);
362f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // Initialized as collapsed, restore as expanded, should expand
363f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        state.mMaxPreferenceToShow = Integer.MAX_VALUE;
364f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.setInitialExpandedChildrenCount(INITIAL_EXPANDED_COUNT);
365f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceGroupAdapter preferenceGroupAdapter =
366f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling                PreferenceGroupAdapter.createInstanceWithCustomHandler(mScreen, mHandler);
367f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        mScreen.onRestoreInstanceState(state);
368f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        verify(mHandler).sendMessageDelayed(any(Message.class), anyLong());
369f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertPreferencesAreExpanded(preferenceGroupAdapter);
370f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
371f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
372f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    // assert that the preferences are all expanded
373f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private void assertPreferencesAreExpanded(PreferenceGroupAdapter adapter) {
374f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(TOTAL_PREFERENCE, adapter.getItemCount());
375f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
376f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
377f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    // assert that the preferences exceeding the limit are collapsed
378f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private void assertPreferencesAreCollapsed(PreferenceGroupAdapter adapter) {
379f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        // list shows preferences up to the limit and the expand button
380f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        assertEquals(INITIAL_EXPANDED_COUNT + 1, adapter.getItemCount());
381f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
382f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
383f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    // create the number of preference in the corresponding preference group and add it to the cache
384f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private void createTestPreferences(PreferenceGroup preferenceGroup,
385f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            List<Preference> preferenceList, int numPreference) {
386f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        for (int i = 0; i < numPreference; i++) {
387f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            final Preference preference = new Preference(mContext);
388f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            preference.setTitle(PREFERENCE_TITLE_PREFIX + i);
389f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            preferenceGroup.addPreference(preference);
390f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            preferenceList.add(preference);
391f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        }
392f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
393f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
394f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    // add a preference category and add the number of preference to it and the cache
395f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    private void createTestPreferencesCategory(PreferenceGroup preferenceGroup,
396f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling            List<Preference> preferenceList, int numPreference) {
397f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        PreferenceCategory category = new PreferenceCategory(mContext);
398f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceGroup.addPreference(category);
399f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        preferenceList.add(category);
400f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling        createTestPreferences(category, preferenceList, numPreference);
401f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling    }
402f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling
403f42206d6b02fd928b1975f9a6f0b380abcc864d0Doris Ling}
404