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;
}
}
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;
}
* 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;
}
/**
}
@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
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