Loading src/com/android/documentsui/queries/SearchChipViewManager.java +33 −16 Original line number Diff line number Diff line Loading @@ -81,7 +81,8 @@ public class SearchChipViewManager { private static final String[] DOCUMENTS_MIMETYPES = new String[]{"application/*", "text/*"}; private static final String[] EMPTY_MIMETYPES = new String[]{""}; private static final Map<Integer, SearchChipData> sChipItems = new HashMap<>(); private static final Map<Integer, SearchChipData> sMimeTypesChipItems = new HashMap<>(); private static final Map<Integer, SearchChipData> sDefaultChipItems = new HashMap<>(); private final ViewGroup mChipGroup; private final List<Integer> mDefaultChipTypes = new ArrayList<>(); Loading @@ -93,20 +94,20 @@ public class SearchChipViewManager { Set<SearchChipData> mCheckedChipItems = new HashSet<>(); static { sChipItems.put(TYPE_IMAGES, sMimeTypesChipItems.put(TYPE_IMAGES, new SearchChipData(TYPE_IMAGES, R.string.chip_title_images, IMAGES_MIMETYPES)); sChipItems.put(TYPE_DOCUMENTS, sMimeTypesChipItems.put(TYPE_DOCUMENTS, new SearchChipData(TYPE_DOCUMENTS, R.string.chip_title_documents, DOCUMENTS_MIMETYPES)); sChipItems.put(TYPE_AUDIO, sMimeTypesChipItems.put(TYPE_AUDIO, new SearchChipData(TYPE_AUDIO, R.string.chip_title_audio, AUDIO_MIMETYPES)); sChipItems.put(TYPE_VIDEOS, sMimeTypesChipItems.put(TYPE_VIDEOS, new SearchChipData(TYPE_VIDEOS, R.string.chip_title_videos, VIDEOS_MIMETYPES)); sChipItems.put(TYPE_LARGE_FILES, sDefaultChipItems.put(TYPE_LARGE_FILES, new SearchChipData(TYPE_LARGE_FILES, R.string.chip_title_large_files, EMPTY_MIMETYPES)); sChipItems.put(TYPE_FROM_THIS_WEEK, sDefaultChipItems.put(TYPE_FROM_THIS_WEEK, new SearchChipData(TYPE_FROM_THIS_WEEK, R.string.chip_title_from_this_week, EMPTY_MIMETYPES)); Loading @@ -126,7 +127,13 @@ public class SearchChipViewManager { if (chipTypes != null) { clearCheckedChips(); for (int chipType : chipTypes) { final SearchChipData chipData = sChipItems.get(chipType); SearchChipData chipData = null; if (sMimeTypesChipItems.containsKey(chipType)) { chipData = sMimeTypesChipItems.get(chipType); } else { chipData = sDefaultChipItems.get(chipType); } mCheckedChipItems.add(chipData); setCheckedChip(chipData.getChipType()); } Loading Loading @@ -219,7 +226,7 @@ public class SearchChipViewManager { */ public void initChipSets(String[] acceptMimeTypes) { mDefaultChipTypes.clear(); for (SearchChipData chipData : sChipItems.values()) { for (SearchChipData chipData : sMimeTypesChipItems.values()) { final String[] mimeTypes = chipData.getMimeTypes(); final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); if (isMatched) { Loading @@ -241,17 +248,27 @@ public class SearchChipViewManager { final Context context = mChipGroup.getContext(); mChipGroup.removeAllViews(); final LayoutInflater inflater = LayoutInflater.from(context); for (Integer chipType : mDefaultChipTypes) { final SearchChipData chipData = sChipItems.get(chipType); final List<SearchChipData> mimeChipDataList = new ArrayList<>(); for (int i = 0; i < mDefaultChipTypes.size(); i++) { final SearchChipData chipData = sMimeTypesChipItems.get(mDefaultChipTypes.get(i)); final String[] mimeTypes = chipData.getMimeTypes(); final boolean isMatched = (chipType == MetricConsts.TYPE_CHIP_LARGE_FILES || chipType == MetricConsts.TYPE_CHIP_FROM_THIS_WEEK) || MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); if (isMatched) { addChipToGroup(mChipGroup, chipData, inflater); mimeChipDataList.add(chipData); } } final LayoutInflater inflater = LayoutInflater.from(context); if (mimeChipDataList.size() > 1) { for (int i = 0; i < mimeChipDataList.size(); i++) { addChipToGroup(mChipGroup, mimeChipDataList.get(i), inflater); } } for (SearchChipData chipData : sDefaultChipItems.values()) { addChipToGroup(mChipGroup, chipData, inflater); } reorderCheckedChips(null /* clickedChip */, false /* hasAnim */); mIsFirstUpdateChipsReady = true; mCurrentUpdateMimeTypes = acceptMimeTypes; Loading tests/unit/com/android/documentsui/queries/SearchChipViewManagerTest.java +19 −9 Original line number Diff line number Diff line Loading @@ -50,8 +50,9 @@ public final class SearchChipViewManagerTest { private static final String LARGE_FILES_CHIP_MIME_TYPE = ""; private static final String FROM_THIS_WEEK_CHIP_MIME_TYPE = ""; private static final String[] TEST_MIME_TYPES = new String[]{"image/*", "video/*", LARGE_FILES_CHIP_MIME_TYPE, FROM_THIS_WEEK_CHIP_MIME_TYPE}; new String[]{"image/*", "video/*"}; private static final String[] TEST_OTHER_TYPES = new String[]{LARGE_FILES_CHIP_MIME_TYPE, FROM_THIS_WEEK_CHIP_MIME_TYPE}; private static int CHIP_TYPE = 1000; private Context mContext; Loading @@ -70,22 +71,31 @@ public final class SearchChipViewManagerTest { } @Test public void testInitChipSets_HasCorrectChipCount() throws Exception { public void testInitChipSets_hasCorrectChipCount() throws Exception { mSearchChipViewManager.initChipSets(TEST_MIME_TYPES); mSearchChipViewManager.updateChips(new String[] {"*/*"}); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_MIME_TYPES.length); int totalChipLength = TEST_MIME_TYPES.length + TEST_OTHER_TYPES.length; assertThat(mChipGroup.getChildCount()).isEqualTo(totalChipLength); } @Test public void testUpdateChips_HasCorrectChipCount() throws Exception { public void testUpdateChips_hasCorrectChipCount() throws Exception { mSearchChipViewManager.updateChips(TEST_MIME_TYPES); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_MIME_TYPES.length); int totalChipLength = TEST_MIME_TYPES.length + TEST_OTHER_TYPES.length; assertThat(mChipGroup.getChildCount()).isEqualTo(totalChipLength); } @Test public void testGetCheckedChipMimeTypes_HasCorrectValue() throws Exception { public void testUpdateChips_withSingleMimeType_hasCorrectChipCount() throws Exception { mSearchChipViewManager.updateChips(new String[]{"image/*"}); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_OTHER_TYPES.length); } @Test public void testGetCheckedChipMimeTypes_hasCorrectValue() throws Exception { mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); String[] checkedMimeTypes = Loading @@ -97,7 +107,7 @@ public final class SearchChipViewManagerTest { } @Test public void testRestoreCheckedChipItems_HasCorrectValue() throws Exception { public void testRestoreCheckedChipItems_hasCorrectValue() throws Exception { Bundle bundle = new Bundle(); bundle.putIntArray(Shared.EXTRA_QUERY_CHIPS, new int[]{2}); Loading @@ -109,7 +119,7 @@ public final class SearchChipViewManagerTest { } @Test public void testSaveInstanceState_HasCorrectValue() throws Exception { public void testSaveInstanceState_hasCorrectValue() throws Exception { mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); Bundle bundle = new Bundle(); Loading Loading
src/com/android/documentsui/queries/SearchChipViewManager.java +33 −16 Original line number Diff line number Diff line Loading @@ -81,7 +81,8 @@ public class SearchChipViewManager { private static final String[] DOCUMENTS_MIMETYPES = new String[]{"application/*", "text/*"}; private static final String[] EMPTY_MIMETYPES = new String[]{""}; private static final Map<Integer, SearchChipData> sChipItems = new HashMap<>(); private static final Map<Integer, SearchChipData> sMimeTypesChipItems = new HashMap<>(); private static final Map<Integer, SearchChipData> sDefaultChipItems = new HashMap<>(); private final ViewGroup mChipGroup; private final List<Integer> mDefaultChipTypes = new ArrayList<>(); Loading @@ -93,20 +94,20 @@ public class SearchChipViewManager { Set<SearchChipData> mCheckedChipItems = new HashSet<>(); static { sChipItems.put(TYPE_IMAGES, sMimeTypesChipItems.put(TYPE_IMAGES, new SearchChipData(TYPE_IMAGES, R.string.chip_title_images, IMAGES_MIMETYPES)); sChipItems.put(TYPE_DOCUMENTS, sMimeTypesChipItems.put(TYPE_DOCUMENTS, new SearchChipData(TYPE_DOCUMENTS, R.string.chip_title_documents, DOCUMENTS_MIMETYPES)); sChipItems.put(TYPE_AUDIO, sMimeTypesChipItems.put(TYPE_AUDIO, new SearchChipData(TYPE_AUDIO, R.string.chip_title_audio, AUDIO_MIMETYPES)); sChipItems.put(TYPE_VIDEOS, sMimeTypesChipItems.put(TYPE_VIDEOS, new SearchChipData(TYPE_VIDEOS, R.string.chip_title_videos, VIDEOS_MIMETYPES)); sChipItems.put(TYPE_LARGE_FILES, sDefaultChipItems.put(TYPE_LARGE_FILES, new SearchChipData(TYPE_LARGE_FILES, R.string.chip_title_large_files, EMPTY_MIMETYPES)); sChipItems.put(TYPE_FROM_THIS_WEEK, sDefaultChipItems.put(TYPE_FROM_THIS_WEEK, new SearchChipData(TYPE_FROM_THIS_WEEK, R.string.chip_title_from_this_week, EMPTY_MIMETYPES)); Loading @@ -126,7 +127,13 @@ public class SearchChipViewManager { if (chipTypes != null) { clearCheckedChips(); for (int chipType : chipTypes) { final SearchChipData chipData = sChipItems.get(chipType); SearchChipData chipData = null; if (sMimeTypesChipItems.containsKey(chipType)) { chipData = sMimeTypesChipItems.get(chipType); } else { chipData = sDefaultChipItems.get(chipType); } mCheckedChipItems.add(chipData); setCheckedChip(chipData.getChipType()); } Loading Loading @@ -219,7 +226,7 @@ public class SearchChipViewManager { */ public void initChipSets(String[] acceptMimeTypes) { mDefaultChipTypes.clear(); for (SearchChipData chipData : sChipItems.values()) { for (SearchChipData chipData : sMimeTypesChipItems.values()) { final String[] mimeTypes = chipData.getMimeTypes(); final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); if (isMatched) { Loading @@ -241,17 +248,27 @@ public class SearchChipViewManager { final Context context = mChipGroup.getContext(); mChipGroup.removeAllViews(); final LayoutInflater inflater = LayoutInflater.from(context); for (Integer chipType : mDefaultChipTypes) { final SearchChipData chipData = sChipItems.get(chipType); final List<SearchChipData> mimeChipDataList = new ArrayList<>(); for (int i = 0; i < mDefaultChipTypes.size(); i++) { final SearchChipData chipData = sMimeTypesChipItems.get(mDefaultChipTypes.get(i)); final String[] mimeTypes = chipData.getMimeTypes(); final boolean isMatched = (chipType == MetricConsts.TYPE_CHIP_LARGE_FILES || chipType == MetricConsts.TYPE_CHIP_FROM_THIS_WEEK) || MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes); if (isMatched) { addChipToGroup(mChipGroup, chipData, inflater); mimeChipDataList.add(chipData); } } final LayoutInflater inflater = LayoutInflater.from(context); if (mimeChipDataList.size() > 1) { for (int i = 0; i < mimeChipDataList.size(); i++) { addChipToGroup(mChipGroup, mimeChipDataList.get(i), inflater); } } for (SearchChipData chipData : sDefaultChipItems.values()) { addChipToGroup(mChipGroup, chipData, inflater); } reorderCheckedChips(null /* clickedChip */, false /* hasAnim */); mIsFirstUpdateChipsReady = true; mCurrentUpdateMimeTypes = acceptMimeTypes; Loading
tests/unit/com/android/documentsui/queries/SearchChipViewManagerTest.java +19 −9 Original line number Diff line number Diff line Loading @@ -50,8 +50,9 @@ public final class SearchChipViewManagerTest { private static final String LARGE_FILES_CHIP_MIME_TYPE = ""; private static final String FROM_THIS_WEEK_CHIP_MIME_TYPE = ""; private static final String[] TEST_MIME_TYPES = new String[]{"image/*", "video/*", LARGE_FILES_CHIP_MIME_TYPE, FROM_THIS_WEEK_CHIP_MIME_TYPE}; new String[]{"image/*", "video/*"}; private static final String[] TEST_OTHER_TYPES = new String[]{LARGE_FILES_CHIP_MIME_TYPE, FROM_THIS_WEEK_CHIP_MIME_TYPE}; private static int CHIP_TYPE = 1000; private Context mContext; Loading @@ -70,22 +71,31 @@ public final class SearchChipViewManagerTest { } @Test public void testInitChipSets_HasCorrectChipCount() throws Exception { public void testInitChipSets_hasCorrectChipCount() throws Exception { mSearchChipViewManager.initChipSets(TEST_MIME_TYPES); mSearchChipViewManager.updateChips(new String[] {"*/*"}); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_MIME_TYPES.length); int totalChipLength = TEST_MIME_TYPES.length + TEST_OTHER_TYPES.length; assertThat(mChipGroup.getChildCount()).isEqualTo(totalChipLength); } @Test public void testUpdateChips_HasCorrectChipCount() throws Exception { public void testUpdateChips_hasCorrectChipCount() throws Exception { mSearchChipViewManager.updateChips(TEST_MIME_TYPES); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_MIME_TYPES.length); int totalChipLength = TEST_MIME_TYPES.length + TEST_OTHER_TYPES.length; assertThat(mChipGroup.getChildCount()).isEqualTo(totalChipLength); } @Test public void testGetCheckedChipMimeTypes_HasCorrectValue() throws Exception { public void testUpdateChips_withSingleMimeType_hasCorrectChipCount() throws Exception { mSearchChipViewManager.updateChips(new String[]{"image/*"}); assertThat(mChipGroup.getChildCount()).isEqualTo(TEST_OTHER_TYPES.length); } @Test public void testGetCheckedChipMimeTypes_hasCorrectValue() throws Exception { mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); String[] checkedMimeTypes = Loading @@ -97,7 +107,7 @@ public final class SearchChipViewManagerTest { } @Test public void testRestoreCheckedChipItems_HasCorrectValue() throws Exception { public void testRestoreCheckedChipItems_hasCorrectValue() throws Exception { Bundle bundle = new Bundle(); bundle.putIntArray(Shared.EXTRA_QUERY_CHIPS, new int[]{2}); Loading @@ -109,7 +119,7 @@ public final class SearchChipViewManagerTest { } @Test public void testSaveInstanceState_HasCorrectValue() throws Exception { public void testSaveInstanceState_hasCorrectValue() throws Exception { mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList(); Bundle bundle = new Bundle(); Loading