Add NoDreamViewHolder for a different layout for NoDreamItem.

Bug: 243389115
Test: Manually tested
Change-Id: Id7549d55721c474cf8baddc0b336fe3600ccb5e3
This commit is contained in:
Victor Truong
2022-08-29 13:49:32 -04:00
parent 50c7cb834e
commit 00b3a5cdb6
3 changed files with 84 additions and 21 deletions

View File

@@ -21,6 +21,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
import android.text.TextUtils;
import android.util.SparseIntArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -41,10 +42,9 @@ import java.util.List;
*/
public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final List<IDreamItem> mItemList;
@LayoutRes
private final int mLayoutRes;
private int mLastSelectedPos = -1;
private boolean mEnabled = true;
private SparseIntArray mLayouts = new SparseIntArray();
/**
* View holder for each {@link IDreamItem}.
@@ -83,16 +83,6 @@ public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
mSummaryView.setVisibility(View.VISIBLE);
}
final Drawable previewImage = item.getPreviewImage();
if (previewImage != null) {
mPreviewView.setImageDrawable(previewImage);
mPreviewView.setClipToOutline(true);
mPreviewPlaceholderView.setVisibility(View.GONE);
} else {
mPreviewView.setImageDrawable(null);
mPreviewPlaceholderView.setVisibility(View.VISIBLE);
}
final Drawable icon = item.isActive()
? mContext.getDrawable(R.drawable.ic_dream_check_circle)
: item.getIcon().mutate();
@@ -122,12 +112,24 @@ public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
itemView.setClickable(true);
}
mCustomizeButton.setOnClickListener(v -> item.onCustomizeClicked());
mCustomizeButton.setVisibility(
item.allowCustomization() && mEnabled ? View.VISIBLE : View.GONE);
// This must be called AFTER itemView.setSelected above, in order to keep the
// customize button in an unselected state.
mCustomizeButton.setSelected(false);
if (item.viewType() != DreamItemViewTypes.NO_DREAM_ITEM) {
final Drawable previewImage = item.getPreviewImage();
if (previewImage != null) {
mPreviewView.setImageDrawable(previewImage);
mPreviewView.setClipToOutline(true);
mPreviewPlaceholderView.setVisibility(View.GONE);
} else {
mPreviewView.setImageDrawable(null);
mPreviewPlaceholderView.setVisibility(View.VISIBLE);
}
mCustomizeButton.setOnClickListener(v -> item.onCustomizeClicked());
mCustomizeButton.setVisibility(
item.allowCustomization() && mEnabled ? View.VISIBLE : View.GONE);
// This must be called AFTER itemView.setSelected above, in order to keep the
// customize button in an unselected state.
mCustomizeButton.setSelected(false);
}
setEnabledStateOnViews(itemView, mEnabled);
}
@@ -149,16 +151,22 @@ public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}
}
public DreamAdapter(SparseIntArray layouts, List<IDreamItem> itemList) {
mItemList = itemList;
mLayouts = layouts;
}
public DreamAdapter(@LayoutRes int layoutRes, List<IDreamItem> itemList) {
mItemList = itemList;
mLayoutRes = layoutRes;
mLayouts.append(DreamItemViewTypes.DREAM_ITEM, layoutRes);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
@DreamItemViewTypes.ViewType int viewType) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(mLayoutRes, viewGroup, false);
.inflate(mLayouts.get(viewType), viewGroup, false);
return new DreamViewHolder(view, viewGroup.getContext());
}
@@ -167,6 +175,11 @@ public class DreamAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
((DreamViewHolder) viewHolder).bindView(mItemList.get(i), i);
}
@Override
public @DreamItemViewTypes.ViewType int getItemViewType(int position) {
return mItemList.get(position).viewType();
}
@Override
public int getItemCount() {
return mItemList.size();