OSDN Git Service

Pass in context when loading icons from Tile
authorFan Zhang <zhfan@google.com>
Thu, 26 Jul 2018 18:26:11 +0000 (11:26 -0700)
committerFan Zhang <zhfan@google.com>
Thu, 26 Jul 2018 20:09:25 +0000 (13:09 -0700)
Bug: 111860183
Test: robotests
Change-Id: I836ad66eb420f4e0bd0bbded541f4dfe947c9b18

src/com/android/settings/dashboard/DashboardAdapter.java
src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
src/com/android/settings/dashboard/DashboardFragment.java
tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java

index d93f2ed..b278f60 100644 (file)
@@ -315,7 +315,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
 
     @VisibleForTesting
     void onBindTile(DashboardItemHolder holder, Tile tile) {
-        Icon tileIcon = tile.getIcon();
+        Icon tileIcon = tile.getIcon(mContext);
         Drawable icon = mCache.getIcon(tileIcon);
         if (!TextUtils.equals(tileIcon.getResPackage(), mContext.getPackageName())
                 && !(icon instanceof RoundedHomepageIcon)) {
index 1f7a011..a3410bd 100644 (file)
@@ -34,6 +34,9 @@ import android.util.ArrayMap;
 import android.util.Log;
 import android.util.Pair;
 
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
@@ -50,9 +53,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-
 /**
  * Impl for {@code DashboardFeatureProvider}.
  */
@@ -238,7 +238,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
 
     @VisibleForTesting
     void bindIcon(Preference preference, Tile tile) {
-        final Icon tileIcon = tile.getIcon();
+        final Icon tileIcon = tile.getIcon(mContext);
         if (tileIcon != null) {
             preference.setIcon(tileIcon.loadDrawable(preference.getContext()));
         } else if (tile.metaData != null
index aa91b2f..fceec3b 100644 (file)
@@ -24,6 +24,11 @@ import android.util.ArrayMap;
 import android.util.ArraySet;
 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.core.BasePreferenceController;
 import com.android.settings.core.PreferenceControllerListHelper;
@@ -43,11 +48,6 @@ import java.util.List;
 import java.util.Map;
 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.
  */
@@ -256,7 +256,8 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
 
     @VisibleForTesting
     boolean tintTileIcon(Tile tile) {
-        if (tile.getIcon() == null) {
+        final Context context = getContext();
+        if (tile.getIcon(context) == null) {
             return false;
         }
         // 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)) {
             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.
         return pkgName != null && tile.intent != null
                 && !pkgName.equals(tile.intent.getComponent().getPackageName());
@@ -370,7 +371,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
                 continue;
             }
             if (tintTileIcon(tile)) {
-                tile.getIcon().setTint(tintColor);
+                tile.getIcon(context).setTint(tintColor);
             }
             if (mDashboardTilePrefKeys.contains(key)) {
                 // Have the key already, will rebind.
index 79be6cf..c823433 100644 (file)
@@ -203,9 +203,9 @@ public class DashboardAdapterTest {
                 new DashboardAdapter.DashboardItemHolder(view);
         final Tile tile = spy(new Tile(mActivityInfo));
         doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
-                .when(tile).getIcon();
+                .when(tile).getIcon(context);
         final IconCache iconCache = mock(IconCache.class);
-        when(iconCache.getIcon(tile.getIcon()))
+        when(iconCache.getIcon(tile.getIcon(context)))
                 .thenReturn(context.getDrawable(R.drawable.ic_settings));
 
         mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
@@ -224,7 +224,7 @@ public class DashboardAdapterTest {
                 new DashboardAdapter.DashboardItemHolder(view);
         final Tile tile = spy(new Tile(mActivityInfo));
         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);
 
@@ -235,7 +235,8 @@ public class DashboardAdapterTest {
         doReturn("another.package").when(context).getPackageName();
         mDashboardAdapter.onBindTile(holder, tile);
 
-        assertThat(iconCache.getIcon(tile.getIcon())).isInstanceOf(RoundedHomepageIcon.class);
+        assertThat(iconCache.getIcon(tile.getIcon(context)))
+                .isInstanceOf(RoundedHomepageIcon.class);
     }
 
     @Test
@@ -249,7 +250,7 @@ public class DashboardAdapterTest {
         tile.metaData.putInt(TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT,
                 R.color.memory_critical);
         doReturn(Icon.createWithResource(context, R.drawable.ic_settings))
-                .when(tile).getIcon();
+                .when(tile).getIcon(context);
         final IconCache iconCache = new IconCache(context);
         mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
                 null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
@@ -259,7 +260,7 @@ public class DashboardAdapterTest {
         mDashboardAdapter.onBindTile(holder, tile);
 
         final RoundedHomepageIcon homepageIcon = (RoundedHomepageIcon) iconCache.getIcon(
-                tile.getIcon());
+                tile.getIcon(context));
         assertThat(homepageIcon.mBackgroundColor)
                 .isEqualTo(RuntimeEnvironment.application.getColor(R.color.memory_critical));
     }
@@ -271,11 +272,11 @@ public class DashboardAdapterTest {
         final DashboardAdapter.DashboardItemHolder holder =
                 new DashboardAdapter.DashboardItemHolder(view);
         final Tile tile = spy(new Tile(mActivityInfo));
-        doReturn(mock(Icon.class)).when(tile).getIcon();
-        when(tile.getIcon().getResPackage()).thenReturn("another.package");
+        doReturn(mock(Icon.class)).when(tile).getIcon(context);
+        when(tile.getIcon(context).getResPackage()).thenReturn("another.package");
 
         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 */,
                 null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
@@ -283,7 +284,8 @@ public class DashboardAdapterTest {
 
         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) {
index e677119..963411d 100644 (file)
@@ -120,7 +120,7 @@ public class DashboardFeatureProviderImplTest {
         tile.title = "title";
         tile.summary = "summary";
         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.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI");
         tile.priority = 10;
index e7453fa..8c1b99b 100644 (file)
@@ -17,6 +17,7 @@ package com.android.settings.dashboard;
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
@@ -183,7 +184,7 @@ public class DashboardFragmentTest {
     @Test
     public void tintTileIcon_hasMetadata_shouldReturnIconTintableMetadata() {
         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();
         tile.metaData = metaData;
 
@@ -205,7 +206,7 @@ public class DashboardFragmentTest {
     @Test
     public void tintTileIcon_noMetadata_shouldReturnPackageNameCheck() {
         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();
         tile.intent = intent;
         intent.setComponent(