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

Commit ae213f0b authored by Linda Tseng's avatar Linda Tseng Committed by Android (Google) Code Review
Browse files

Merge "Fix tinting on injected pref icon in Tile"

parents 5409f76f fff2b19e
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.os.Parcel;
@@ -299,7 +300,15 @@ public class Tile implements Parcelable {
            }
        }
        if (iconResId != 0) {
            return Icon.createWithResource(activityInfo.packageName, iconResId);
            final Icon icon = Icon.createWithResource(activityInfo.packageName, iconResId);
            if (isIconTintable(context)) {
                final TypedArray a = context.obtainStyledAttributes(new int[] {
                        android.R.attr.colorControlNormal});
                final int tintColor = a.getColor(0, 0);
                a.recycle();
                icon.setTint(tintColor);
            }
            return icon;
        } else {
            return null;
        }
@@ -309,16 +318,12 @@ public class Tile implements Parcelable {
     * Whether the icon can be tinted. This is true when icon needs to be monochrome (single-color)
     */
    public boolean isIconTintable(Context context) {
        ensureMetadataNotStale(context);
        if (mMetaData != null
                && mMetaData.containsKey(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE)) {
            return mMetaData.getBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE);
        }
        ensureMetadataNotStale(context);
        final String pkgName = context.getPackageName();
        // If this drawable is coming from outside Settings, tint it to match the color.
        final ActivityInfo activityInfo = getActivityInfo(context);
        return activityInfo != null
                && !TextUtils.equals(pkgName, activityInfo.packageName);
        return false;
    }

    /**
+4 −9
Original line number Diff line number Diff line
@@ -116,16 +116,11 @@ public class TileTest {
    }

    @Test
    public void isIconTintable_noMetadata_shouldReturnPackageNameCheck() {
        final Tile tile1 = new Tile(mActivityInfo, "category");
        assertThat(tile1.isIconTintable(RuntimeEnvironment.application)).isFalse();

        final ActivityInfo activityInfo = new ActivityInfo();
        activityInfo.packageName = "blah";
        activityInfo.name = "abc";
    public void isIconTintable_noTintableMetadata_shouldReturnFalse() {
        final Tile tile = new Tile(mActivityInfo, "category");
        mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, android.R.drawable.ic_info);

        final Tile tile2 = new Tile(activityInfo, "category");
        assertThat(tile2.isIconTintable(RuntimeEnvironment.application)).isTrue();
        assertThat(tile.isIconTintable(RuntimeEnvironment.application)).isFalse();
    }

    @Test
+0 −4
Original line number Diff line number Diff line
@@ -205,10 +205,6 @@ public class TileUtilsTest {
                null /* defaultCategory */, outTiles, false /* usePriority */);
        assertThat(outTiles.size()).isEqualTo(1);
        assertThat(outTiles.get(0).getTitle(mContext)).isEqualTo("my localized title");

        // Icon should be tintable because the tile is not from settings package, and
        // "forceTintExternalIcon" is set
        assertThat(outTiles.get(0).isIconTintable(mContext)).isTrue();
    }

    @Test