From 4fdf0b461dbede662bf10bcabe91bd9de852b78b Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 6 Mar 2018 14:16:08 -0800 Subject: [PATCH] Stop wrapping RoundedHomepageIcon if it's already wrapped. On homepage, if an icon is already wrapped in RoundedHomepageIcon, we shouldn't wrap it more. Otherwise each time we do this it will add a few dp padding around the bitmap. Change-Id: I5313a38f4bd128272d7b4e05209aaee72c690c55 Fixes: 73295342 Test: robotest --- .../settings/dashboard/DashboardAdapter.java | 59 +++++++++---------- .../dashboard/DashboardAdapterTest.java | 53 ++++++++++++----- 2 files changed, 68 insertions(+), 44 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 99de73eb075..b2d816d6a62 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -17,7 +17,6 @@ package com.android.settings.dashboard; import android.app.Activity; import android.content.Context; -import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.os.Bundle; @@ -27,7 +26,6 @@ import android.support.v7.util.DiffUtil; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; -import android.util.ArrayMap; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -56,8 +54,8 @@ import com.android.settingslib.utils.IconCache; import java.util.List; public class DashboardAdapter extends RecyclerView.Adapter - implements SummaryLoader.SummaryConsumer, SuggestionAdapter.Callback, LifecycleObserver, - OnSaveInstanceState { + implements SummaryLoader.SummaryConsumer, SuggestionAdapter.Callback, LifecycleObserver, + OnSaveInstanceState { public static final String TAG = "DashboardAdapter"; private static final String STATE_CATEGORY_LIST = "category_list"; @@ -84,8 +82,8 @@ public class DashboardAdapter extends RecyclerView.Adapter conditions, SuggestionControllerMixin suggestionControllerMixin, - Lifecycle lifecycle) { + List conditions, SuggestionControllerMixin suggestionControllerMixin, + Lifecycle lifecycle) { DashboardCategory category = null; boolean conditionExpanded = false; @@ -96,14 +94,14 @@ public class DashboardAdapter extends RecyclerView.Adapter data) { final DashboardData prevData = mDashboardData; mDashboardData = new DashboardData.Builder(prevData) - .setSuggestions(data) - .build(); + .setSuggestions(data) + .build(); notifyDashboardDataChanged(prevData); } @@ -130,8 +128,8 @@ public class DashboardAdapter extends RecyclerView.Adapter { mMetricsFeatureProvider.action(mContext, - MetricsEvent.ACTION_SETTINGS_CONDITION_EXPAND, false); + MetricsEvent.ACTION_SETTINGS_CONDITION_EXPAND, false); DashboardData prevData = mDashboardData; mDashboardData = new DashboardData.Builder(prevData). - setConditionExpanded(false).build(); + setConditionExpanded(false).build(); notifyDashboardDataChanged(prevData); scrollToTopOfConditions(); }); @@ -254,7 +252,7 @@ public class DashboardAdapter extends RecyclerView.Adapter { mMetricsFeatureProvider.action(mContext, - MetricsEvent.ACTION_SETTINGS_CONDITION_EXPAND, true); + MetricsEvent.ACTION_SETTINGS_CONDITION_EXPAND, true); final DashboardData prevData = mDashboardData; mDashboardData = new DashboardData.Builder(prevData) - .setConditionExpanded(true).build(); + .setConditionExpanded(true).build(); notifyDashboardDataChanged(prevData); scrollToTopOfConditions(); }); @@ -291,8 +289,8 @@ public class DashboardAdapter extends RecyclerView.Adapter) mDashboardData.getItemEntityByPosition(position), - mDashboardData.isConditionExpanded()); + (List) mDashboardData.getItemEntityByPosition(position), + mDashboardData.isConditionExpanded()); adapter.addDismissHandling(holder.data); holder.data.setAdapter(adapter); holder.data.setLayoutManager(new LinearLayoutManager(mContext)); @@ -303,7 +301,7 @@ public class DashboardAdapter extends RecyclerView.Adapter suggestions = - (List) mDashboardData.getItemEntityByPosition(position); + (List) mDashboardData.getItemEntityByPosition(position); if (suggestions != null && suggestions.size() > 0) { mSuggestionAdapter.setSuggestions(suggestions); holder.data.setAdapter(mSuggestionAdapter); @@ -316,7 +314,8 @@ public class DashboardAdapter extends RecyclerView.Adapter suggestions = makeSuggestionsV2("pkg1", "pkg2", "pkg3"); adapter.setSuggestions(suggestions); @@ -114,7 +115,7 @@ public class DashboardAdapterTest { when(itemView.findViewById(android.R.id.summary)).thenReturn(mock(TextView.class)); when(itemView.findViewById(android.R.id.title)).thenReturn(mock(TextView.class)); final DashboardAdapter.SuggestionContainerHolder holder = - new DashboardAdapter.SuggestionContainerHolder(itemView); + new DashboardAdapter.SuggestionContainerHolder(itemView); adapter.onBindSuggestion(holder, 0); @@ -133,8 +134,9 @@ public class DashboardAdapterTest { @Test public void testSuggestionDismissed_onlySuggestion_updateDashboardData() { DashboardAdapter adapter = - spy(new DashboardAdapter(mContext, null /* savedInstanceState */, - null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */)); + spy(new DashboardAdapter(mContext, null /* savedInstanceState */, + null /* conditions */, null /* suggestionControllerMixin */, + null /* lifecycle */)); final List suggestions = makeSuggestionsV2("pkg1"); adapter.setSuggestions(suggestions); final DashboardData dashboardData = adapter.mDashboardData; @@ -149,7 +151,7 @@ public class DashboardAdapterTest { @Test public void testBindSuggestion_shouldSetSuggestionAdapterAndNoCrash() { mDashboardAdapter = new DashboardAdapter(mContext, null /* savedInstanceState */, - null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */); + null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */); final List suggestions = makeSuggestionsV2("pkg1"); mDashboardAdapter.setSuggestions(suggestions); @@ -163,7 +165,7 @@ public class DashboardAdapterTest { when(itemView.findViewById(android.R.id.summary)).thenReturn(mock(TextView.class)); when(itemView.findViewById(android.R.id.title)).thenReturn(mock(TextView.class)); final DashboardAdapter.SuggestionContainerHolder holder = - new DashboardAdapter.SuggestionContainerHolder(itemView); + new DashboardAdapter.SuggestionContainerHolder(itemView); mDashboardAdapter.onBindSuggestion(holder, 0); @@ -176,14 +178,14 @@ public class DashboardAdapterTest { final Context context = RuntimeEnvironment.application; final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null); final DashboardAdapter.DashboardItemHolder holder = - new DashboardAdapter.DashboardItemHolder(view); + new DashboardAdapter.DashboardItemHolder(view); final Tile tile = new Tile(); tile.icon = Icon.createWithResource(context, R.drawable.ic_settings); final IconCache iconCache = mock(IconCache.class); when(iconCache.getIcon(tile.icon)).thenReturn(context.getDrawable(R.drawable.ic_settings)); mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */, - null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */); + null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */); ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache); mDashboardAdapter.onBindTile(holder, tile); @@ -191,11 +193,11 @@ public class DashboardAdapterTest { } @Test - public void onBindTile_externalTile_shouldNotUseGenericBackgroundIcon() { + public void onBindTile_externalTile_shouldUpdateIcon() { final Context context = RuntimeEnvironment.application; final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null); final DashboardAdapter.DashboardItemHolder holder = - new DashboardAdapter.DashboardItemHolder(view); + new DashboardAdapter.DashboardItemHolder(view); final Tile tile = new Tile(); tile.icon = mock(Icon.class); when(tile.icon.getResPackage()).thenReturn("another.package"); @@ -204,13 +206,36 @@ public class DashboardAdapterTest { when(iconCache.getIcon(tile.icon)).thenReturn(context.getDrawable(R.drawable.ic_settings)); mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */, - null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */); + null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */); ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache); + mDashboardAdapter.onBindTile(holder, tile); verify(iconCache).updateIcon(eq(tile.icon), any(RoundedHomepageIcon.class)); } + @Test + public void onBindTile_externalTile_usingRoundedHomepageIcon_shouldNotUpdateIcon() { + final Context context = 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 = new Tile(); + tile.icon = mock(Icon.class); + when(tile.icon.getResPackage()).thenReturn("another.package"); + + final IconCache iconCache = mock(IconCache.class); + when(iconCache.getIcon(tile.icon)).thenReturn(mock(RoundedHomepageIcon.class)); + + mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */, + null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */); + ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache); + + mDashboardAdapter.onBindTile(holder, tile); + + verify(iconCache, never()).updateIcon(eq(tile.icon), any(RoundedHomepageIcon.class)); + } + private List makeSuggestionsV2(String... pkgNames) { final List suggestions = new ArrayList<>(); for (String pkgName : pkgNames) {