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
This commit is contained in:
@@ -17,7 +17,6 @@ package com.android.settings.dashboard;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Typeface;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.Icon;
|
import android.graphics.drawable.Icon;
|
||||||
import android.os.Bundle;
|
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.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.ArrayMap;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -316,7 +314,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void onBindTile(DashboardItemHolder holder, Tile tile) {
|
void onBindTile(DashboardItemHolder holder, Tile tile) {
|
||||||
Drawable icon = mCache.getIcon(tile.icon);
|
Drawable icon = mCache.getIcon(tile.icon);
|
||||||
if (!TextUtils.equals(tile.icon.getResPackage(), mContext.getPackageName())) {
|
if (!TextUtils.equals(tile.icon.getResPackage(), mContext.getPackageName())
|
||||||
|
&& !(icon instanceof RoundedHomepageIcon)) {
|
||||||
icon = new RoundedHomepageIcon(mContext, icon);
|
icon = new RoundedHomepageIcon(mContext, icon);
|
||||||
mCache.updateIcon(tile.icon, icon);
|
mCache.updateIcon(tile.icon, icon);
|
||||||
}
|
}
|
||||||
|
@@ -16,8 +16,8 @@
|
|||||||
package com.android.settings.dashboard;
|
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.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.any;
|
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.reset;
|
import static org.mockito.Mockito.reset;
|
||||||
@@ -101,7 +101,8 @@ public class DashboardAdapterTest {
|
|||||||
public void testSuggestionDismissed_notOnlySuggestion_updateSuggestionOnly() {
|
public void testSuggestionDismissed_notOnlySuggestion_updateSuggestionOnly() {
|
||||||
final DashboardAdapter adapter =
|
final DashboardAdapter adapter =
|
||||||
spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
|
spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
|
||||||
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */));
|
null /* conditions */, null /* suggestionControllerMixin */,
|
||||||
|
null /* lifecycle */));
|
||||||
final List<Suggestion> suggestions = makeSuggestionsV2("pkg1", "pkg2", "pkg3");
|
final List<Suggestion> suggestions = makeSuggestionsV2("pkg1", "pkg2", "pkg3");
|
||||||
adapter.setSuggestions(suggestions);
|
adapter.setSuggestions(suggestions);
|
||||||
|
|
||||||
@@ -134,7 +135,8 @@ public class DashboardAdapterTest {
|
|||||||
public void testSuggestionDismissed_onlySuggestion_updateDashboardData() {
|
public void testSuggestionDismissed_onlySuggestion_updateDashboardData() {
|
||||||
DashboardAdapter adapter =
|
DashboardAdapter adapter =
|
||||||
spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
|
spy(new DashboardAdapter(mContext, null /* savedInstanceState */,
|
||||||
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */));
|
null /* conditions */, null /* suggestionControllerMixin */,
|
||||||
|
null /* lifecycle */));
|
||||||
final List<Suggestion> suggestions = makeSuggestionsV2("pkg1");
|
final List<Suggestion> suggestions = makeSuggestionsV2("pkg1");
|
||||||
adapter.setSuggestions(suggestions);
|
adapter.setSuggestions(suggestions);
|
||||||
final DashboardData dashboardData = adapter.mDashboardData;
|
final DashboardData dashboardData = adapter.mDashboardData;
|
||||||
@@ -191,7 +193,7 @@ public class DashboardAdapterTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onBindTile_externalTile_shouldNotUseGenericBackgroundIcon() {
|
public void onBindTile_externalTile_shouldUpdateIcon() {
|
||||||
final Context context = RuntimeEnvironment.application;
|
final Context context = RuntimeEnvironment.application;
|
||||||
final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null);
|
final View view = LayoutInflater.from(context).inflate(R.layout.dashboard_tile, null);
|
||||||
final DashboardAdapter.DashboardItemHolder holder =
|
final DashboardAdapter.DashboardItemHolder holder =
|
||||||
@@ -206,11 +208,34 @@ public class DashboardAdapterTest {
|
|||||||
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
|
mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */,
|
||||||
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
|
null /* conditions */, null /* suggestionControllerMixin */, null /* lifecycle */);
|
||||||
ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache);
|
ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache);
|
||||||
|
|
||||||
mDashboardAdapter.onBindTile(holder, tile);
|
mDashboardAdapter.onBindTile(holder, tile);
|
||||||
|
|
||||||
verify(iconCache).updateIcon(eq(tile.icon), any(RoundedHomepageIcon.class));
|
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<Suggestion> makeSuggestionsV2(String... pkgNames) {
|
private List<Suggestion> makeSuggestionsV2(String... pkgNames) {
|
||||||
final List<Suggestion> suggestions = new ArrayList<>();
|
final List<Suggestion> suggestions = new ArrayList<>();
|
||||||
for (String pkgName : pkgNames) {
|
for (String pkgName : pkgNames) {
|
||||||
|
Reference in New Issue
Block a user