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