OSDN Git Service

Treat icon color metadata as raw value instead of reference
authorFan Zhang <zhfan@google.com>
Mon, 6 Aug 2018 22:23:45 +0000 (15:23 -0700)
committerFan Zhang <zhfan@google.com>
Tue, 7 Aug 2018 16:15:23 +0000 (09:15 -0700)
Bug: 79841665
Test: robotests
Change-Id: I1216718e45e80a428e8a0edb7b9accf5325be769

src/com/android/settings/dashboard/DashboardAdapter.java
tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java

index fc1a129..7273567 100644 (file)
@@ -64,7 +64,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
 
     @VisibleForTesting
     static final String STATE_CONDITION_EXPANDED = "condition_expanded";
-
+    static final String META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB = "com.android.settings.bg.argb";
     private final IconCache mCache;
     private final Context mContext;
     private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -320,15 +320,25 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
         if (!TextUtils.equals(tileIcon.getResPackage(), mContext.getPackageName())
                 && !(icon instanceof RoundedHomepageIcon)) {
             icon = new RoundedHomepageIcon(mContext, icon);
+            final Bundle metaData = tile.getMetaData();
             try {
-                final Bundle metaData = tile.getMetaData();
                 if (metaData != null) {
-                    final int colorRes = metaData.getInt(
-                            TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT, 0 /* default */);
-                    if (colorRes != 0) {
-                        final int bgColor = mContext.getPackageManager()
-                                .getResourcesForApplication(tileIcon.getResPackage())
-                                .getColor(colorRes, null /* theme */);
+                    // Load from bg.argb first
+                    int bgColor = metaData.getInt(META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB,
+                            0 /* default */);
+                    // Not found, load from bg.hint
+                    if (bgColor == 0) {
+                        final int colorRes = metaData.getInt(
+                                TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT,
+                                0 /* default */);
+                        if (colorRes != 0) {
+                            bgColor = mContext.getPackageManager()
+                                    .getResourcesForApplication(tileIcon.getResPackage())
+                                    .getColor(colorRes, null /* theme */);
+                        }
+                    }
+                    // If found anything, use it.
+                    if (bgColor != 0) {
                         ((RoundedHomepageIcon) icon).setBackgroundColor(bgColor);
                     }
                 }
index 95eba63..d474d72 100644 (file)
@@ -242,6 +242,30 @@ public class DashboardAdapterTest {
     }
 
     @Test
+    public void onBindTile_externalTileWithBackgroundColorRawValue_shouldUpdateIcon() {
+        final Context context = spy(RuntimeEnvironment.application);
+        final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null);
+        final DashboardAdapter.DashboardItemHolder holder =
+                new DashboardAdapter.DashboardItemHolder(view);
+        final Tile tile = spy(new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE));
+        tile.getMetaData().putInt(DashboardAdapter.META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB,
+                0xff0000);
+        doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
+                .when(tile).getIcon(context);
+        final IconCache iconCache = new IconCache(context);
+        mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
+                null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
+        ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache);
+
+        doReturn("another.package").when(context).getPackageName();
+        mDashboardAdapter.onBindTile(holder, tile);
+
+        final RoundedHomepageIcon homepageIcon = (RoundedHomepageIcon) iconCache.getIcon(
+                tile.getIcon(context));
+        assertThat(homepageIcon.mBackgroundColor).isEqualTo(0xff0000);
+    }
+
+    @Test
     public void onBindTile_externalTileWithBackgroundColorHint_shouldUpdateIcon() {
         final Context context = spy(RuntimeEnvironment.application);
         final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null);