Pass in context when loading icons from Tile
Bug: 111860183 Test: robotests Change-Id: I836ad66eb420f4e0bd0bbded541f4dfe947c9b18
This commit is contained in:
@@ -315,7 +315,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void onBindTile(DashboardItemHolder holder, Tile tile) {
|
void onBindTile(DashboardItemHolder holder, Tile tile) {
|
||||||
Icon tileIcon = tile.getIcon();
|
Icon tileIcon = tile.getIcon(mContext);
|
||||||
Drawable icon = mCache.getIcon(tileIcon);
|
Drawable icon = mCache.getIcon(tileIcon);
|
||||||
if (!TextUtils.equals(tileIcon.getResPackage(), mContext.getPackageName())
|
if (!TextUtils.equals(tileIcon.getResPackage(), mContext.getPackageName())
|
||||||
&& !(icon instanceof RoundedHomepageIcon)) {
|
&& !(icon instanceof RoundedHomepageIcon)) {
|
||||||
|
@@ -34,6 +34,9 @@ import android.util.ArrayMap;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
@@ -50,9 +53,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
|
||||||
import androidx.preference.Preference;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Impl for {@code DashboardFeatureProvider}.
|
* Impl for {@code DashboardFeatureProvider}.
|
||||||
*/
|
*/
|
||||||
@@ -238,7 +238,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void bindIcon(Preference preference, Tile tile) {
|
void bindIcon(Preference preference, Tile tile) {
|
||||||
final Icon tileIcon = tile.getIcon();
|
final Icon tileIcon = tile.getIcon(mContext);
|
||||||
if (tileIcon != null) {
|
if (tileIcon != null) {
|
||||||
preference.setIcon(tileIcon.loadDrawable(preference.getContext()));
|
preference.setIcon(tileIcon.loadDrawable(preference.getContext()));
|
||||||
} else if (tile.metaData != null
|
} else if (tile.metaData != null
|
||||||
|
@@ -24,6 +24,11 @@ import android.util.ArrayMap;
|
|||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceManager;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.SettingsPreferenceFragment;
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.core.PreferenceControllerListHelper;
|
import com.android.settings.core.PreferenceControllerListHelper;
|
||||||
@@ -43,11 +48,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
|
||||||
import androidx.preference.Preference;
|
|
||||||
import androidx.preference.PreferenceManager;
|
|
||||||
import androidx.preference.PreferenceScreen;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base fragment for dashboard style UI containing a list of static and dynamic setting items.
|
* Base fragment for dashboard style UI containing a list of static and dynamic setting items.
|
||||||
*/
|
*/
|
||||||
@@ -256,7 +256,8 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean tintTileIcon(Tile tile) {
|
boolean tintTileIcon(Tile tile) {
|
||||||
if (tile.getIcon() == null) {
|
final Context context = getContext();
|
||||||
|
if (tile.getIcon(context) == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// First check if the tile has set the icon tintable metadata.
|
// First check if the tile has set the icon tintable metadata.
|
||||||
@@ -265,7 +266,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
&& metadata.containsKey(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE)) {
|
&& metadata.containsKey(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE)) {
|
||||||
return metadata.getBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE);
|
return metadata.getBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE);
|
||||||
}
|
}
|
||||||
final String pkgName = getContext().getPackageName();
|
final String pkgName = context.getPackageName();
|
||||||
// If this drawable is coming from outside Settings, tint it to match the color.
|
// If this drawable is coming from outside Settings, tint it to match the color.
|
||||||
return pkgName != null && tile.intent != null
|
return pkgName != null && tile.intent != null
|
||||||
&& !pkgName.equals(tile.intent.getComponent().getPackageName());
|
&& !pkgName.equals(tile.intent.getComponent().getPackageName());
|
||||||
@@ -370,7 +371,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (tintTileIcon(tile)) {
|
if (tintTileIcon(tile)) {
|
||||||
tile.getIcon().setTint(tintColor);
|
tile.getIcon(context).setTint(tintColor);
|
||||||
}
|
}
|
||||||
if (mDashboardTilePrefKeys.contains(key)) {
|
if (mDashboardTilePrefKeys.contains(key)) {
|
||||||
// Have the key already, will rebind.
|
// Have the key already, will rebind.
|
||||||
|
@@ -203,9 +203,9 @@ public class DashboardAdapterTest {
|
|||||||
new DashboardAdapter.DashboardItemHolder(view);
|
new DashboardAdapter.DashboardItemHolder(view);
|
||||||
final Tile tile = spy(new Tile(mActivityInfo));
|
final Tile tile = spy(new Tile(mActivityInfo));
|
||||||
doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
|
doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
|
||||||
.when(tile).getIcon();
|
.when(tile).getIcon(context);
|
||||||
final IconCache iconCache = mock(IconCache.class);
|
final IconCache iconCache = mock(IconCache.class);
|
||||||
when(iconCache.getIcon(tile.getIcon()))
|
when(iconCache.getIcon(tile.getIcon(context)))
|
||||||
.thenReturn(context.getDrawable(R.drawable.ic_settings));
|
.thenReturn(context.getDrawable(R.drawable.ic_settings));
|
||||||
|
|
||||||
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
|
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
|
||||||
@@ -224,7 +224,7 @@ public class DashboardAdapterTest {
|
|||||||
new DashboardAdapter.DashboardItemHolder(view);
|
new DashboardAdapter.DashboardItemHolder(view);
|
||||||
final Tile tile = spy(new Tile(mActivityInfo));
|
final Tile tile = spy(new Tile(mActivityInfo));
|
||||||
final Icon icon = Icon.createWithResource(context, R.drawable.ic_settings);
|
final Icon icon = Icon.createWithResource(context, R.drawable.ic_settings);
|
||||||
doReturn(icon).when(tile).getIcon();
|
doReturn(icon).when(tile).getIcon(context);
|
||||||
|
|
||||||
final IconCache iconCache = new IconCache(context);
|
final IconCache iconCache = new IconCache(context);
|
||||||
|
|
||||||
@@ -235,7 +235,8 @@ public class DashboardAdapterTest {
|
|||||||
doReturn("another.package").when(context).getPackageName();
|
doReturn("another.package").when(context).getPackageName();
|
||||||
mDashboardAdapter.onBindTile(holder, tile);
|
mDashboardAdapter.onBindTile(holder, tile);
|
||||||
|
|
||||||
assertThat(iconCache.getIcon(tile.getIcon())).isInstanceOf(RoundedHomepageIcon.class);
|
assertThat(iconCache.getIcon(tile.getIcon(context)))
|
||||||
|
.isInstanceOf(RoundedHomepageIcon.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -249,7 +250,7 @@ public class DashboardAdapterTest {
|
|||||||
tile.metaData.putInt(TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT,
|
tile.metaData.putInt(TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT,
|
||||||
R.color.memory_critical);
|
R.color.memory_critical);
|
||||||
doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
|
doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
|
||||||
.when(tile).getIcon();
|
.when(tile).getIcon(context);
|
||||||
final IconCache iconCache = new IconCache(context);
|
final IconCache iconCache = new IconCache(context);
|
||||||
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
|
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
|
||||||
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
|
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
|
||||||
@@ -259,7 +260,7 @@ public class DashboardAdapterTest {
|
|||||||
mDashboardAdapter.onBindTile(holder, tile);
|
mDashboardAdapter.onBindTile(holder, tile);
|
||||||
|
|
||||||
final RoundedHomepageIcon homepageIcon = (RoundedHomepageIcon) iconCache.getIcon(
|
final RoundedHomepageIcon homepageIcon = (RoundedHomepageIcon) iconCache.getIcon(
|
||||||
tile.getIcon());
|
tile.getIcon(context));
|
||||||
assertThat(homepageIcon.mBackgroundColor)
|
assertThat(homepageIcon.mBackgroundColor)
|
||||||
.isEqualTo(RuntimeEnvironment.application.getColor(R.color.memory_critical));
|
.isEqualTo(RuntimeEnvironment.application.getColor(R.color.memory_critical));
|
||||||
}
|
}
|
||||||
@@ -271,11 +272,11 @@ public class DashboardAdapterTest {
|
|||||||
final DashboardAdapter.DashboardItemHolder holder =
|
final DashboardAdapter.DashboardItemHolder holder =
|
||||||
new DashboardAdapter.DashboardItemHolder(view);
|
new DashboardAdapter.DashboardItemHolder(view);
|
||||||
final Tile tile = spy(new Tile(mActivityInfo));
|
final Tile tile = spy(new Tile(mActivityInfo));
|
||||||
doReturn(mock(Icon.class)).when(tile).getIcon();
|
doReturn(mock(Icon.class)).when(tile).getIcon(context);
|
||||||
when(tile.getIcon().getResPackage()).thenReturn("another.package");
|
when(tile.getIcon(context).getResPackage()).thenReturn("another.package");
|
||||||
|
|
||||||
final IconCache iconCache = mock(IconCache.class);
|
final IconCache iconCache = mock(IconCache.class);
|
||||||
when(iconCache.getIcon(tile.getIcon())).thenReturn(mock(RoundedHomepageIcon.class));
|
when(iconCache.getIcon(tile.getIcon(context))).thenReturn(mock(RoundedHomepageIcon.class));
|
||||||
|
|
||||||
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
|
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
|
||||||
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
|
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
|
||||||
@@ -283,7 +284,8 @@ public class DashboardAdapterTest {
|
|||||||
|
|
||||||
mDashboardAdapter.onBindTile(holder, tile);
|
mDashboardAdapter.onBindTile(holder, tile);
|
||||||
|
|
||||||
verify(iconCache, never()).updateIcon(eq(tile.getIcon()), any(RoundedHomepageIcon.class));
|
verify(iconCache, never()).updateIcon(eq(tile.getIcon(context)),
|
||||||
|
any(RoundedHomepageIcon.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Suggestion> makeSuggestionsV2(String... pkgNames) {
|
private List<Suggestion> makeSuggestionsV2(String... pkgNames) {
|
||||||
|
@@ -120,7 +120,7 @@ public class DashboardFeatureProviderImplTest {
|
|||||||
tile.title = "title";
|
tile.title = "title";
|
||||||
tile.summary = "summary";
|
tile.summary = "summary";
|
||||||
doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)))
|
doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)))
|
||||||
.when(tile).getIcon();
|
.when(tile).getIcon(any(Context.class));
|
||||||
tile.metaData = new Bundle();
|
tile.metaData = new Bundle();
|
||||||
tile.metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI");
|
tile.metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI");
|
||||||
tile.priority = 10;
|
tile.priority = 10;
|
||||||
|
@@ -17,6 +17,7 @@ package com.android.settings.dashboard;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.nullable;
|
import static org.mockito.ArgumentMatchers.nullable;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
@@ -183,7 +184,7 @@ public class DashboardFragmentTest {
|
|||||||
@Test
|
@Test
|
||||||
public void tintTileIcon_hasMetadata_shouldReturnIconTintableMetadata() {
|
public void tintTileIcon_hasMetadata_shouldReturnIconTintableMetadata() {
|
||||||
final Tile tile = spy(new Tile(mActivityInfo));
|
final Tile tile = spy(new Tile(mActivityInfo));
|
||||||
doReturn(mock(Icon.class)).when(tile).getIcon();
|
doReturn(mock(Icon.class)).when(tile).getIcon(any(Context.class));
|
||||||
final Bundle metaData = new Bundle();
|
final Bundle metaData = new Bundle();
|
||||||
tile.metaData = metaData;
|
tile.metaData = metaData;
|
||||||
|
|
||||||
@@ -205,7 +206,7 @@ public class DashboardFragmentTest {
|
|||||||
@Test
|
@Test
|
||||||
public void tintTileIcon_noMetadata_shouldReturnPackageNameCheck() {
|
public void tintTileIcon_noMetadata_shouldReturnPackageNameCheck() {
|
||||||
final Tile tile = spy(new Tile(mActivityInfo));
|
final Tile tile = spy(new Tile(mActivityInfo));
|
||||||
doReturn(mock(Icon.class)).when(tile).getIcon();
|
doReturn(mock(Icon.class)).when(tile).getIcon(any(Context.class));
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
tile.intent = intent;
|
tile.intent = intent;
|
||||||
intent.setComponent(
|
intent.setComponent(
|
||||||
|
Reference in New Issue
Block a user