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

This commit is contained in:
TreeHugger Robot
2017-07-18 19:52:30 +00:00
committed by Android (Google) Code Review
2 changed files with 48 additions and 4 deletions

View File

@@ -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)) {

View File

@@ -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 {