Use Tile.getIcon() to avoid caching issue

Bug: 77600770
Test: robotests
Change-Id: Icb21f5da9b542abc239b04b71813290ad3104ffb
This commit is contained in:
Fan Zhang
2018-07-24 12:49:30 -07:00
parent f24b749ec0
commit 701b65eccc
12 changed files with 167 additions and 142 deletions

View File

@@ -39,8 +39,6 @@ import java.util.Set;
public class CategoryManager {
public static final String SETTING_PKG = "com.android.settings";
private static final String TAG = "CategoryManager";
private static CategoryManager sInstance;

View File

@@ -19,6 +19,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.service.settings.suggestions.Suggestion;
import android.text.TextUtils;
@@ -314,8 +315,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
@VisibleForTesting
void onBindTile(DashboardItemHolder holder, Tile tile) {
Drawable icon = mCache.getIcon(tile.icon);
if (!TextUtils.equals(tile.icon.getResPackage(), mContext.getPackageName())
Icon tileIcon = tile.getIcon();
Drawable icon = mCache.getIcon(tileIcon);
if (!TextUtils.equals(tileIcon.getResPackage(), mContext.getPackageName())
&& !(icon instanceof RoundedHomepageIcon)) {
icon = new RoundedHomepageIcon(mContext, icon);
try {
@@ -324,7 +326,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT, 0 /* default */);
if (colorRes != 0) {
final int bgColor = mContext.getPackageManager()
.getResourcesForApplication(tile.icon.getResPackage())
.getResourcesForApplication(tileIcon.getResPackage())
.getColor(colorRes, null /* theme */);
((RoundedHomepageIcon) icon).setBackgroundColor(bgColor);
}
@@ -332,7 +334,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Failed to set background color for " + tile.intent.getPackage());
}
mCache.updateIcon(tile.icon, icon);
mCache.updateIcon(tileIcon, icon);
}
holder.icon.setImageDrawable(icon);
holder.title.setText(tile.title);

View File

@@ -238,8 +238,9 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
@VisibleForTesting
void bindIcon(Preference preference, Tile tile) {
if (tile.icon != null) {
preference.setIcon(tile.icon.loadDrawable(preference.getContext()));
final Icon tileIcon = tile.getIcon();
if (tileIcon != null) {
preference.setIcon(tileIcon.loadDrawable(preference.getContext()));
} else if (tile.metaData != null
&& tile.metaData.containsKey(META_DATA_PREFERENCE_ICON_URI)) {
ThreadUtils.postOnBackgroundThread(() -> {

View File

@@ -256,7 +256,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
@VisibleForTesting
boolean tintTileIcon(Tile tile) {
if (tile.icon == null) {
if (tile.getIcon() == null) {
return false;
}
// First check if the tile has set the icon tintable metadata.
@@ -330,7 +330,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
/**
* Refresh preference items backed by DashboardCategory.
*/
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
@VisibleForTesting
void refreshDashboardTiles(final String TAG) {
final PreferenceScreen screen = getPreferenceScreen();
@@ -370,7 +370,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
continue;
}
if (tintTileIcon(tile)) {
tile.icon.setTint(tintColor);
tile.getIcon().setTint(tintColor);
}
if (mDashboardTilePrefKeys.contains(key)) {
// Have the key already, will rebind.