Loading src/com/android/documentsui/BaseActivity.java +3 −0 Original line number Diff line number Diff line Loading @@ -199,6 +199,9 @@ public abstract class BaseActivity ViewGroup chipGroup = findViewById(R.id.search_chip_group); mSearchManager = new SearchViewManager(searchListener, queryInterceptor, chipGroup, icicle); // initialize the chip sets by accept mime types mSearchManager.initChipSets(mState.acceptMimes); // update the chip items by the mime types of the root mSearchManager.updateChips(getCurrentRoot().derivedMimeTypes); // parse the query content from intent when launch the // activity at the first time Loading src/com/android/documentsui/queries/SearchChipViewManager.java +19 −1 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ public class SearchChipViewManager { private static final Map<Integer, SearchChipData> sChipItems = new HashMap<>(); private final ViewGroup mChipGroup; private final List<Integer> mDefaultChipTypes = new ArrayList<>(); private SearchChipViewManagerListener mListener; @VisibleForTesting Loading Loading @@ -171,6 +172,22 @@ public class SearchChipViewManager { } } /** * Initialize the search chips base on the mime types. * * @param acceptMimeTypes use this values to filter chips */ public void initChipSets(String[] acceptMimeTypes) { mDefaultChipTypes.clear(); for (SearchChipData chipData : sChipItems.values()) { final String[] mimeTypes = chipData.getMimeTypes(); final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); if (isMatched) { mDefaultChipTypes.add(chipData.getChipType()); } } } /** * Update the search chips base on the mime types. * Loading @@ -181,7 +198,8 @@ public class SearchChipViewManager { mChipGroup.removeAllViews(); final LayoutInflater inflater = LayoutInflater.from(context); for (SearchChipData chipData : sChipItems.values()) { for (Integer chipType : mDefaultChipTypes) { final SearchChipData chipData = sChipItems.get(chipType); final String[] mimeTypes = chipData.getMimeTypes(); final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); if (isMatched) { Loading src/com/android/documentsui/queries/SearchViewManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,15 @@ public class SearchViewManager implements return queryArgs; } /** * Initialize the search chips base on the acceptMimeTypes. * * @param acceptMimeTypes use to filter chips */ public void initChipSets(String[] acceptMimeTypes) { mChipViewManager.initChipSets(acceptMimeTypes); } /** * Update the search chips base on the acceptMimeTypes. * If the count of matched chips is less than two, we will Loading tests/unit/com/android/documentsui/queries/SearchChipViewManagerTest.java +39 −14 Original line number Diff line number Diff line Loading @@ -16,15 +16,16 @@ package com.android.documentsui.queries; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import android.content.Context; import android.os.Bundle; import android.view.ViewGroup; import android.widget.LinearLayout; import androidx.test.filters.SmallTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.documentsui.base.MimeTypes; Loading @@ -42,49 +43,73 @@ import java.util.Set; @SmallTest public final class SearchChipViewManagerTest { private static final String[] TEST_MIMETYPES = new String[]{"image/png", "video/mpeg"}; private static final String[] TEST_MIME_TYPES = new String[]{"image/*", "video/*"}; private static int CHIP_TYPE = 1000; private SearchChipViewManager mSearchChipViewManager; private LinearLayout mChipGroup; @Before public void setUp() { ViewGroup chipGroup = mock(ViewGroup.class); mSearchChipViewManager = new SearchChipViewManager(chipGroup); final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); context.setTheme(com.android.documentsui.R.style.DocumentsTheme); mChipGroup = spy(new LinearLayout(context)); mSearchChipViewManager = new SearchChipViewManager(mChipGroup); mSearchChipViewManager.initChipSets(new String[] {"*/*"}); } @Test public void testInitChipSets_HasCorrectValue() throws Exception { mSearchChipViewManager.initChipSets(TEST_MIME_TYPES); mSearchChipViewManager.updateChips(new String[] {"*/*"}); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_MIME_TYPES.length); } @Test public void testUpdateChips_HasCorrectValue() throws Exception { mSearchChipViewManager.updateChips(TEST_MIME_TYPES); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_MIME_TYPES.length); } @Test public void testGetCheckedChipMimeTypes_HasCorrectValue() throws Exception { mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); final String[] checkedMimeTypes = mSearchChipViewManager.getCheckedMimeTypes(); assertTrue(MimeTypes.mimeMatches(TEST_MIMETYPES, checkedMimeTypes[0])); assertTrue(MimeTypes.mimeMatches(TEST_MIMETYPES, checkedMimeTypes[1])); assertThat(MimeTypes.mimeMatches(TEST_MIME_TYPES, checkedMimeTypes[0])).isTrue(); assertThat(MimeTypes.mimeMatches(TEST_MIME_TYPES, checkedMimeTypes[1])).isTrue(); } @Test public void testRestoreCheckedChipItems_HasCorrectValue() throws Exception { Bundle bundle = new Bundle(); bundle.putIntArray(Shared.EXTRA_QUERY_CHIPS, new int[]{2}); mSearchChipViewManager.restoreCheckedChipItems(bundle); assertEquals(1, mSearchChipViewManager.mCheckedChipItems.size()); assertThat(mSearchChipViewManager.mCheckedChipItems.size()).isEqualTo(1); Iterator<SearchChipData> iterator = mSearchChipViewManager.mCheckedChipItems.iterator(); assertEquals(2, iterator.next().getChipType()); assertThat(iterator.next().getChipType()).isEqualTo(2); } @Test public void testSaveInstanceState_HasCorrectValue() throws Exception { mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); Bundle bundle = new Bundle(); mSearchChipViewManager.onSaveInstanceState(bundle); final int[] chipTypes = bundle.getIntArray(Shared.EXTRA_QUERY_CHIPS); assertEquals(1, chipTypes.length); assertEquals(CHIP_TYPE, chipTypes[0]); assertThat(chipTypes.length).isEqualTo(1); assertThat(chipTypes[0]).isEqualTo(CHIP_TYPE); } private static Set<SearchChipData> getFakeSearchChipDataList() { final Set<SearchChipData> chipDataList = new HashSet<>(); chipDataList.add(new SearchChipData(CHIP_TYPE, 0, TEST_MIMETYPES)); chipDataList.add(new SearchChipData(CHIP_TYPE, 0, TEST_MIME_TYPES)); return chipDataList; } } Loading
src/com/android/documentsui/BaseActivity.java +3 −0 Original line number Diff line number Diff line Loading @@ -199,6 +199,9 @@ public abstract class BaseActivity ViewGroup chipGroup = findViewById(R.id.search_chip_group); mSearchManager = new SearchViewManager(searchListener, queryInterceptor, chipGroup, icicle); // initialize the chip sets by accept mime types mSearchManager.initChipSets(mState.acceptMimes); // update the chip items by the mime types of the root mSearchManager.updateChips(getCurrentRoot().derivedMimeTypes); // parse the query content from intent when launch the // activity at the first time Loading
src/com/android/documentsui/queries/SearchChipViewManager.java +19 −1 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ public class SearchChipViewManager { private static final Map<Integer, SearchChipData> sChipItems = new HashMap<>(); private final ViewGroup mChipGroup; private final List<Integer> mDefaultChipTypes = new ArrayList<>(); private SearchChipViewManagerListener mListener; @VisibleForTesting Loading Loading @@ -171,6 +172,22 @@ public class SearchChipViewManager { } } /** * Initialize the search chips base on the mime types. * * @param acceptMimeTypes use this values to filter chips */ public void initChipSets(String[] acceptMimeTypes) { mDefaultChipTypes.clear(); for (SearchChipData chipData : sChipItems.values()) { final String[] mimeTypes = chipData.getMimeTypes(); final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); if (isMatched) { mDefaultChipTypes.add(chipData.getChipType()); } } } /** * Update the search chips base on the mime types. * Loading @@ -181,7 +198,8 @@ public class SearchChipViewManager { mChipGroup.removeAllViews(); final LayoutInflater inflater = LayoutInflater.from(context); for (SearchChipData chipData : sChipItems.values()) { for (Integer chipType : mDefaultChipTypes) { final SearchChipData chipData = sChipItems.get(chipType); final String[] mimeTypes = chipData.getMimeTypes(); final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); if (isMatched) { Loading
src/com/android/documentsui/queries/SearchViewManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,15 @@ public class SearchViewManager implements return queryArgs; } /** * Initialize the search chips base on the acceptMimeTypes. * * @param acceptMimeTypes use to filter chips */ public void initChipSets(String[] acceptMimeTypes) { mChipViewManager.initChipSets(acceptMimeTypes); } /** * Update the search chips base on the acceptMimeTypes. * If the count of matched chips is less than two, we will Loading
tests/unit/com/android/documentsui/queries/SearchChipViewManagerTest.java +39 −14 Original line number Diff line number Diff line Loading @@ -16,15 +16,16 @@ package com.android.documentsui.queries; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import android.content.Context; import android.os.Bundle; import android.view.ViewGroup; import android.widget.LinearLayout; import androidx.test.filters.SmallTest; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.documentsui.base.MimeTypes; Loading @@ -42,49 +43,73 @@ import java.util.Set; @SmallTest public final class SearchChipViewManagerTest { private static final String[] TEST_MIMETYPES = new String[]{"image/png", "video/mpeg"}; private static final String[] TEST_MIME_TYPES = new String[]{"image/*", "video/*"}; private static int CHIP_TYPE = 1000; private SearchChipViewManager mSearchChipViewManager; private LinearLayout mChipGroup; @Before public void setUp() { ViewGroup chipGroup = mock(ViewGroup.class); mSearchChipViewManager = new SearchChipViewManager(chipGroup); final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); context.setTheme(com.android.documentsui.R.style.DocumentsTheme); mChipGroup = spy(new LinearLayout(context)); mSearchChipViewManager = new SearchChipViewManager(mChipGroup); mSearchChipViewManager.initChipSets(new String[] {"*/*"}); } @Test public void testInitChipSets_HasCorrectValue() throws Exception { mSearchChipViewManager.initChipSets(TEST_MIME_TYPES); mSearchChipViewManager.updateChips(new String[] {"*/*"}); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_MIME_TYPES.length); } @Test public void testUpdateChips_HasCorrectValue() throws Exception { mSearchChipViewManager.updateChips(TEST_MIME_TYPES); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_MIME_TYPES.length); } @Test public void testGetCheckedChipMimeTypes_HasCorrectValue() throws Exception { mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); final String[] checkedMimeTypes = mSearchChipViewManager.getCheckedMimeTypes(); assertTrue(MimeTypes.mimeMatches(TEST_MIMETYPES, checkedMimeTypes[0])); assertTrue(MimeTypes.mimeMatches(TEST_MIMETYPES, checkedMimeTypes[1])); assertThat(MimeTypes.mimeMatches(TEST_MIME_TYPES, checkedMimeTypes[0])).isTrue(); assertThat(MimeTypes.mimeMatches(TEST_MIME_TYPES, checkedMimeTypes[1])).isTrue(); } @Test public void testRestoreCheckedChipItems_HasCorrectValue() throws Exception { Bundle bundle = new Bundle(); bundle.putIntArray(Shared.EXTRA_QUERY_CHIPS, new int[]{2}); mSearchChipViewManager.restoreCheckedChipItems(bundle); assertEquals(1, mSearchChipViewManager.mCheckedChipItems.size()); assertThat(mSearchChipViewManager.mCheckedChipItems.size()).isEqualTo(1); Iterator<SearchChipData> iterator = mSearchChipViewManager.mCheckedChipItems.iterator(); assertEquals(2, iterator.next().getChipType()); assertThat(iterator.next().getChipType()).isEqualTo(2); } @Test public void testSaveInstanceState_HasCorrectValue() throws Exception { mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); Bundle bundle = new Bundle(); mSearchChipViewManager.onSaveInstanceState(bundle); final int[] chipTypes = bundle.getIntArray(Shared.EXTRA_QUERY_CHIPS); assertEquals(1, chipTypes.length); assertEquals(CHIP_TYPE, chipTypes[0]); assertThat(chipTypes.length).isEqualTo(1); assertThat(chipTypes[0]).isEqualTo(CHIP_TYPE); } private static Set<SearchChipData> getFakeSearchChipDataList() { final Set<SearchChipData> chipDataList = new HashSet<>(); chipDataList.add(new SearchChipData(CHIP_TYPE, 0, TEST_MIMETYPES)); chipDataList.add(new SearchChipData(CHIP_TYPE, 0, TEST_MIME_TYPES)); return chipDataList; } }