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

Commit 986050b2 authored by Austin Wang's avatar Austin Wang
Browse files

Hide MIME type chips if there's only one MIME type chip

Bug:137846543
Bug:137847802
Test: manual
Test: atest DocumentsUIGoogleTests:SearchChipViewManagerTest
Change-Id: Icc108d09329d329363f7945b4a2336d21a13e516
parent 181d334c
Loading
Loading
Loading
Loading
+33 −16
Original line number Original line Diff line number Diff line
@@ -81,7 +81,8 @@ public class SearchChipViewManager {
    private static final String[] DOCUMENTS_MIMETYPES = new String[]{"application/*", "text/*"};
    private static final String[] DOCUMENTS_MIMETYPES = new String[]{"application/*", "text/*"};
    private static final String[] EMPTY_MIMETYPES = new String[]{""};
    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 ViewGroup mChipGroup;
    private final List<Integer> mDefaultChipTypes = new ArrayList<>();
    private final List<Integer> mDefaultChipTypes = new ArrayList<>();
@@ -93,20 +94,20 @@ public class SearchChipViewManager {
    Set<SearchChipData> mCheckedChipItems = new HashSet<>();
    Set<SearchChipData> mCheckedChipItems = new HashSet<>();


    static {
    static {
        sChipItems.put(TYPE_IMAGES,
        sMimeTypesChipItems.put(TYPE_IMAGES,
                new SearchChipData(TYPE_IMAGES, R.string.chip_title_images, IMAGES_MIMETYPES));
                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,
                new SearchChipData(TYPE_DOCUMENTS, R.string.chip_title_documents,
                        DOCUMENTS_MIMETYPES));
                        DOCUMENTS_MIMETYPES));
        sChipItems.put(TYPE_AUDIO,
        sMimeTypesChipItems.put(TYPE_AUDIO,
                new SearchChipData(TYPE_AUDIO, R.string.chip_title_audio, AUDIO_MIMETYPES));
                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));
                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,
                new SearchChipData(TYPE_LARGE_FILES,
                        R.string.chip_title_large_files,
                        R.string.chip_title_large_files,
                        EMPTY_MIMETYPES));
                        EMPTY_MIMETYPES));
        sChipItems.put(TYPE_FROM_THIS_WEEK,
        sDefaultChipItems.put(TYPE_FROM_THIS_WEEK,
                new SearchChipData(TYPE_FROM_THIS_WEEK,
                new SearchChipData(TYPE_FROM_THIS_WEEK,
                        R.string.chip_title_from_this_week,
                        R.string.chip_title_from_this_week,
                        EMPTY_MIMETYPES));
                        EMPTY_MIMETYPES));
@@ -126,7 +127,13 @@ public class SearchChipViewManager {
        if (chipTypes != null) {
        if (chipTypes != null) {
            clearCheckedChips();
            clearCheckedChips();
            for (int chipType : chipTypes) {
            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);
                mCheckedChipItems.add(chipData);
                setCheckedChip(chipData.getChipType());
                setCheckedChip(chipData.getChipType());
            }
            }
@@ -219,7 +226,7 @@ public class SearchChipViewManager {
     */
     */
    public void initChipSets(String[] acceptMimeTypes) {
    public void initChipSets(String[] acceptMimeTypes) {
        mDefaultChipTypes.clear();
        mDefaultChipTypes.clear();
        for (SearchChipData chipData : sChipItems.values()) {
        for (SearchChipData chipData : sMimeTypesChipItems.values()) {
            final String[] mimeTypes = chipData.getMimeTypes();
            final String[] mimeTypes = chipData.getMimeTypes();
            final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes);
            final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes);
            if (isMatched) {
            if (isMatched) {
@@ -241,17 +248,27 @@ public class SearchChipViewManager {
        final Context context = mChipGroup.getContext();
        final Context context = mChipGroup.getContext();
        mChipGroup.removeAllViews();
        mChipGroup.removeAllViews();


        final LayoutInflater inflater = LayoutInflater.from(context);
        final List<SearchChipData> mimeChipDataList = new ArrayList<>();
        for (Integer chipType : mDefaultChipTypes) {
        for (int i = 0; i < mDefaultChipTypes.size(); i++) {
            final SearchChipData chipData = sChipItems.get(chipType);
            final SearchChipData chipData = sMimeTypesChipItems.get(mDefaultChipTypes.get(i));
            final String[] mimeTypes = chipData.getMimeTypes();
            final String[] mimeTypes = chipData.getMimeTypes();
            final boolean isMatched = (chipType == MetricConsts.TYPE_CHIP_LARGE_FILES
            final boolean isMatched = MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes);
                    || chipType == MetricConsts.TYPE_CHIP_FROM_THIS_WEEK)
                    || MimeTypes.mimeMatches(acceptMimeTypes, mimeTypes);
            if (isMatched) {
            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 */);
        reorderCheckedChips(null /* clickedChip */, false /* hasAnim */);
        mIsFirstUpdateChipsReady = true;
        mIsFirstUpdateChipsReady = true;
        mCurrentUpdateMimeTypes = acceptMimeTypes;
        mCurrentUpdateMimeTypes = acceptMimeTypes;
+19 −9
Original line number Original line Diff line number Diff line
@@ -50,8 +50,9 @@ public final class SearchChipViewManagerTest {
    private static final String LARGE_FILES_CHIP_MIME_TYPE = "";
    private static final String LARGE_FILES_CHIP_MIME_TYPE = "";
    private static final String FROM_THIS_WEEK_CHIP_MIME_TYPE = "";
    private static final String FROM_THIS_WEEK_CHIP_MIME_TYPE = "";
    private static final String[] TEST_MIME_TYPES =
    private static final String[] TEST_MIME_TYPES =
            new String[]{"image/*", "video/*",
            new String[]{"image/*", "video/*"};
                    LARGE_FILES_CHIP_MIME_TYPE, FROM_THIS_WEEK_CHIP_MIME_TYPE};
    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 static int CHIP_TYPE = 1000;


    private Context mContext;
    private Context mContext;
@@ -70,22 +71,31 @@ public final class SearchChipViewManagerTest {
    }
    }


    @Test
    @Test
    public void testInitChipSets_HasCorrectChipCount() throws Exception {
    public void testInitChipSets_hasCorrectChipCount() throws Exception {
        mSearchChipViewManager.initChipSets(TEST_MIME_TYPES);
        mSearchChipViewManager.initChipSets(TEST_MIME_TYPES);
        mSearchChipViewManager.updateChips(new String[] {"*/*"});
        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
    @Test
    public void testUpdateChips_HasCorrectChipCount() throws Exception {
    public void testUpdateChips_hasCorrectChipCount() throws Exception {
        mSearchChipViewManager.updateChips(TEST_MIME_TYPES);
        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
    @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();
        mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList();


        String[] checkedMimeTypes =
        String[] checkedMimeTypes =
@@ -97,7 +107,7 @@ public final class SearchChipViewManagerTest {
    }
    }


    @Test
    @Test
    public void testRestoreCheckedChipItems_HasCorrectValue() throws Exception {
    public void testRestoreCheckedChipItems_hasCorrectValue() throws Exception {
        Bundle bundle = new Bundle();
        Bundle bundle = new Bundle();
        bundle.putIntArray(Shared.EXTRA_QUERY_CHIPS, new int[]{2});
        bundle.putIntArray(Shared.EXTRA_QUERY_CHIPS, new int[]{2});


@@ -109,7 +119,7 @@ public final class SearchChipViewManagerTest {
    }
    }


    @Test
    @Test
    public void testSaveInstanceState_HasCorrectValue() throws Exception {
    public void testSaveInstanceState_hasCorrectValue() throws Exception {
        mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList();
        mSearchChipViewManager.mCheckedChipItems = getFakeSearchChipDataList();
        Bundle bundle = new Bundle();
        Bundle bundle = new Bundle();