Merge "Fix suggested action custom view binding"

This commit is contained in:
Maurice Lam
2017-04-03 21:38:20 +00:00
committed by Android (Google) Code Review
2 changed files with 25 additions and 0 deletions

View File

@@ -396,6 +396,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
private void onBindTile(DashboardItemHolder holder, Tile tile) { private void onBindTile(DashboardItemHolder holder, Tile tile) {
if (tile.remoteViews != null) { if (tile.remoteViews != null) {
final ViewGroup itemView = (ViewGroup) holder.itemView; final ViewGroup itemView = (ViewGroup) holder.itemView;
itemView.removeAllViews();
itemView.addView(tile.remoteViews.apply(itemView.getContext(), itemView)); itemView.addView(tile.remoteViews.apply(itemView.getContext(), itemView));
} else { } else {
holder.icon.setImageDrawable(mCache.getIcon(tile.icon)); holder.icon.setImageDrawable(mCache.getIcon(tile.icon));

View File

@@ -373,6 +373,30 @@ public class DashboardAdapterTest {
verify(mContext).startSuggestion(any(Intent.class)); verify(mContext).startSuggestion(any(Intent.class));
} }
@Test
public void testBindViewHolder_viewsClearedOnRebind() {
Context context = new ContextThemeWrapper(application, R.style.Theme_Settings);
List<Tile> packages = makeSuggestions("pkg1");
RemoteViews remoteViews = mock(RemoteViews.class);
FrameLayout layout = new FrameLayout(context);
Button primary = new Button(context);
primary.setId(android.R.id.primary);
layout.addView(primary);
doReturn(layout).when(remoteViews).apply(any(Context.class), any(ViewGroup.class));
packages.get(0).remoteViews = remoteViews;
mDashboardAdapter.setCategoriesAndSuggestions(Collections.emptyList(), packages);
mSuggestionHolder = mDashboardAdapter.onCreateViewHolder(
new FrameLayout(context),
R.layout.suggestion_tile_card);
mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1);
mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1);
ViewGroup itemView = (ViewGroup) mSuggestionHolder.itemView;
assertThat(itemView.getChildCount()).isEqualTo(1);
}
private List<Tile> makeSuggestions(String... pkgNames) { private List<Tile> makeSuggestions(String... pkgNames) {
final List<Tile> suggestions = new ArrayList<>(); final List<Tile> suggestions = new ArrayList<>();
for (String pkgName : pkgNames) { for (String pkgName : pkgNames) {