Merge "Check the tintable metadata before tinting tile icon."
This commit is contained in:
committed by
Android (Google) Code Review
commit
5002b97d37
@@ -38,6 +38,7 @@ import com.android.settingslib.core.AbstractPreferenceController;
|
|||||||
import com.android.settingslib.drawer.DashboardCategory;
|
import com.android.settingslib.drawer.DashboardCategory;
|
||||||
import com.android.settingslib.drawer.SettingsDrawerActivity;
|
import com.android.settingslib.drawer.SettingsDrawerActivity;
|
||||||
import com.android.settingslib.drawer.Tile;
|
import com.android.settingslib.drawer.Tile;
|
||||||
|
import com.android.settingslib.drawer.TileUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@@ -227,6 +228,20 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
return true;
|
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.
|
* Displays resource based tiles.
|
||||||
*/
|
*/
|
||||||
@@ -315,7 +330,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
android.R.attr.colorControlNormal});
|
android.R.attr.colorControlNormal});
|
||||||
final int tintColor = a.getColor(0, context.getColor(android.R.color.white));
|
final int tintColor = a.getColor(0, context.getColor(android.R.color.white));
|
||||||
a.recycle();
|
a.recycle();
|
||||||
final String pkgName = context.getPackageName();
|
|
||||||
// Install dashboard tiles.
|
// Install dashboard tiles.
|
||||||
for (Tile tile : tiles) {
|
for (Tile tile : tiles) {
|
||||||
final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile);
|
final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile);
|
||||||
@@ -326,9 +340,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
if (!displayTile(tile)) {
|
if (!displayTile(tile)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (pkgName != null && tile.intent != null
|
if (tintTileIcon(tile)) {
|
||||||
&& !pkgName.equals(tile.intent.getComponent().getPackageName())) {
|
|
||||||
// If this drawable is coming from outside Settings, tint it to match the color.
|
|
||||||
tile.icon.setTint(tintColor);
|
tile.icon.setTint(tintColor);
|
||||||
}
|
}
|
||||||
if (mDashboardTilePrefKeys.contains(key)) {
|
if (mDashboardTilePrefKeys.contains(key)) {
|
||||||
|
@@ -24,7 +24,9 @@ import static org.mockito.Mockito.never;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.support.v7.preference.PreferenceManager;
|
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.core.AbstractPreferenceController;
|
||||||
import com.android.settingslib.drawer.DashboardCategory;
|
import com.android.settingslib.drawer.DashboardCategory;
|
||||||
import com.android.settingslib.drawer.Tile;
|
import com.android.settingslib.drawer.Tile;
|
||||||
|
import com.android.settingslib.drawer.TileUtils;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -152,6 +155,35 @@ public class DashboardFragmentTest {
|
|||||||
verify(mockController2).getPreferenceKey();
|
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
|
public static class TestPreferenceController extends AbstractPreferenceController
|
||||||
implements PreferenceControllerMixin {
|
implements PreferenceControllerMixin {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user