Loading packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java +12 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading @@ -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; } /** Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java +4 −9 Original line number Diff line number Diff line Loading @@ -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 Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java +0 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java +12 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading @@ -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; } /** Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java +4 −9 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java +0 −4 Original line number Diff line number Diff line Loading @@ -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 Loading