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

Commit a1bf76a6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Also tint the settings icon in DashboardAdapter.setCategory()."

parents 6434f449 067122a8
Loading
Loading
Loading
Loading
+29 −23
Original line number Diff line number Diff line
@@ -146,29 +146,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash

    public void setCategoriesAndSuggestions(List<DashboardCategory> categories,
            List<Tile> suggestions) {
        if (mDashboardFeatureProvider.shouldTintIcon()) {
            // TODO: Better place for tinting?
            final TypedArray a = mContext.obtainStyledAttributes(new int[]{
                    android.R.attr.colorControlNormal});
            final int tintColor = a.getColor(0, mContext.getColor(R.color.fallback_tintColor));
            a.recycle();
            for (int i = 0; i < categories.size(); i++) {
                for (int j = 0; j < categories.get(i).tiles.size(); j++) {
                    final Tile tile = categories.get(i).tiles.get(j);

                    if (tile.isIconTintable) {
                        // If this drawable is tintable, tint it to match the color.
                        tile.icon.setTint(tintColor);
                    }
                }
            }

            for (Tile suggestion : suggestions) {
                if (suggestion.isIconTintable) {
                    suggestion.icon.setTint(tintColor);
                }
            }
        }
        tintIcons(categories, suggestions);

        final DashboardData prevData = mDashboardData;
        mDashboardData = new DashboardData.Builder(prevData)
@@ -196,6 +174,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
    }

    public void setCategory(List<DashboardCategory> category) {
        tintIcons(category, null);

        final DashboardData prevData = mDashboardData;
        Log.d(TAG, "adapter setCategory called");
        mDashboardData = new DashboardData.Builder(prevData)
@@ -504,6 +484,32 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
        holder.title.setText(category.title);
    }

    private void tintIcons(List<DashboardCategory> categories, List<Tile> suggestions) {
        if (!mDashboardFeatureProvider.shouldTintIcon()) {
            return;
        }
        // TODO: Better place for tinting?
        final TypedArray a = mContext.obtainStyledAttributes(new int[]{
                android.R.attr.colorControlNormal});
        final int tintColor = a.getColor(0, mContext.getColor(R.color.fallback_tintColor));
        a.recycle();
        for (DashboardCategory category : categories) {
            for (Tile tile : category.tiles) {
                if (tile.isIconTintable) {
                    // If this drawable is tintable, tint it to match the color.
                    tile.icon.setTint(tintColor);
                }
            }
        }
        if (suggestions != null) {
            for (Tile suggestion : suggestions) {
                if (suggestion.isIconTintable) {
                    suggestion.icon.setTint(tintColor);
                }
            }
        }
    }

    void onSaveInstanceState(Bundle outState) {
        final List<Tile> suggestions = mDashboardData.getSuggestions();
        final List<DashboardCategory> categories = mDashboardData.getCategories();
+23 −0
Original line number Diff line number Diff line
@@ -365,6 +365,28 @@ public class DashboardAdapterTest {
        verify(mockIcon).setTint(eq(0x89000000));
    }

    @Test
    public void testSetCategories_iconTinted() {
        TypedArray mockTypedArray = mock(TypedArray.class);
        doReturn(mockTypedArray).when(mContext).obtainStyledAttributes(any(int[].class));
        doReturn(0x89000000).when(mockTypedArray).getColor(anyInt(), anyInt());

        final List<DashboardCategory> categories = new ArrayList<>();
        final DashboardCategory category = mock(DashboardCategory.class);
        final List<Tile> tiles = new ArrayList<>();
        final Icon mockIcon = mock(Icon.class);
        final Tile tile = new Tile();
        tile.isIconTintable = true;
        tile.icon = mockIcon;
        tiles.add(tile);
        category.tiles = tiles;
        categories.add(category);

        mDashboardAdapter.setCategory(categories);

        verify(mockIcon).setTint(eq(0x89000000));
    }

    @Test
    public void testBindConditionAndSuggestion_shouldSetSuggestionAdapterAndNoCrash() {
        mDashboardAdapter = new DashboardAdapter(mContext, null, null, null, null);
@@ -374,6 +396,7 @@ public class DashboardAdapterTest {
        final List<Tile> tiles = new ArrayList<>();
        tiles.add(mock(Tile.class));
        category.tiles = tiles;
        categories.add(category);
        mDashboardAdapter.setCategoriesAndSuggestions(categories, suggestions);

        final RecyclerView data = mock(RecyclerView.class);