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

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

Merge "Check the tintable metadata before tinting tile icon."

parents c22e4d68 7087fd92
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.drawer.Tile;
import com.android.settingslib.drawer.TileUtils;

import java.util.ArrayList;
import java.util.Collection;
@@ -227,6 +228,20 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
        return true;
    }

    @VisibleForTesting
    boolean tintTileIcon(Tile tile) {
        // First check if the tile has set the icon tintable metadata.
        final Bundle metadata = tile.metaData;
        if (metadata != null
                && metadata.containsKey(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE)) {
            return metadata.getBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE);
        }
        final String pkgName = getContext().getPackageName();
        // If this drawable is coming from outside Settings, tint it to match the color.
        return pkgName != null && tile.intent != null
                && !pkgName.equals(tile.intent.getComponent().getPackageName());
    }

    /**
     * Displays resource based tiles.
     */
@@ -315,7 +330,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
                android.R.attr.colorControlNormal});
        final int tintColor = a.getColor(0, context.getColor(android.R.color.white));
        a.recycle();
        final String pkgName = context.getPackageName();
        // Install dashboard tiles.
        for (Tile tile : tiles) {
            final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile);
@@ -326,9 +340,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
            if (!displayTile(tile)) {
                continue;
            }
            if (pkgName != null && tile.intent != null
                    && !pkgName.equals(tile.intent.getComponent().getPackageName())) {
                // If this drawable is coming from outside Settings, tint it to match the color.
            if (tintTileIcon(tile)) {
                tile.icon.setTint(tintColor);
            }
            if (mDashboardTilePrefKeys.contains(key)) {
+32 −0
Original line number Diff line number Diff line
@@ -24,7 +24,9 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceManager;
@@ -39,6 +41,7 @@ import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.Tile;
import com.android.settingslib.drawer.TileUtils;

import org.junit.Before;
import org.junit.Test;
@@ -152,6 +155,35 @@ public class DashboardFragmentTest {
        verify(mockController2).getPreferenceKey();
    }

    @Test
    public void tintTileIcon_hasMetadata_shouldReturnIconTintableMetadata() {
        final Tile tile = new Tile();
        final Bundle metaData = new Bundle();
        tile.metaData = metaData;

        metaData.putBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE, false);
        assertThat(mTestFragment.tintTileIcon(tile)).isFalse();

        metaData.putBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE, true);
        assertThat(mTestFragment.tintTileIcon(tile)).isTrue();
    }


    @Test
    public void tintTileIcon_noMetadata_shouldReturnPackageNameCheck() {
        final Tile tile = new Tile();
        final Intent intent = new Intent();
        tile.intent = intent;

        intent.setComponent(new ComponentName(
                ShadowApplication.getInstance().getApplicationContext().getPackageName(),
                "TestClass"));
        assertThat(mTestFragment.tintTileIcon(tile)).isFalse();

        intent.setComponent(new ComponentName("OtherPackage", "TestClass"));
        assertThat(mTestFragment.tintTileIcon(tile)).isTrue();
    }

    public static class TestPreferenceController extends AbstractPreferenceController
            implements PreferenceControllerMixin {