package com.gh4a.adapter; import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView; import com.gh4a.ColorPickerDialog; import com.gh4a.ColorPickerDialog.OnColorChangedListener; import com.gh4a.R; import com.gh4a.utils.TypefaceCache; import com.gh4a.utils.UiUtils; import com.gh4a.widget.StyleableTextView; import org.eclipse.egit.github.core.Label; public class IssueLabelAdapter extends RootAdapter<IssueLabelAdapter.EditableLabel, IssueLabelAdapter.ViewHolder> { public static class EditableLabel extends Label { public String editedName; public String editedColor; public final boolean newlyAdded; public boolean isEditing; public EditableLabel(String color) { super(); newlyAdded = true; isEditing = true; editedColor = color; } public EditableLabel(Label label) { newlyAdded = false; isEditing = false; setColor(label.getColor()); setName(label.getName()); setUrl(label.getUrl()); } public void restoreOriginalProperties() { editedColor = getColor(); editedName = getName(); } } public IssueLabelAdapter(Context context) { super(context); } @Override public ViewHolder onCreateViewHolder(LayoutInflater inflater, ViewGroup parent, int viewType) { View v = inflater.inflate(R.layout.row_issue_label, parent, false); final ViewHolder holder = new ViewHolder(v); holder.editor.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (holder.lastAssignedLabel != null) { holder.lastAssignedLabel.editedName = s.toString(); } } }); Typeface labelTf = TypefaceCache.getTypeface(mContext, holder.label.getTypefaceValue()); holder.editor.setTypeface(labelTf); ViewGroup colors = (ViewGroup) v.findViewById(R.id.colors); int count = colors.getChildCount(); for (int i = 0; i < count; i++) { View child = colors.getChildAt(i); child.setOnClickListener(this); } colors.setTag(holder); return holder; } @Override public void onBindViewHolder(ViewHolder holder, EditableLabel label) { holder.lastAssignedLabel = label; holder.collapsedContainer.setVisibility(label.isEditing ? View.GONE : View.VISIBLE); holder.expandedContainer.setVisibility(label.isEditing ? View.VISIBLE : View.GONE); if (label.isEditing) { holder.editor.requestFocus(); } if (label.newlyAdded) { holder.editor.setHint(R.string.issue_label_new); } else { holder.editor.setHint(null); } assignColor(holder, label.editedColor != null ? label.editedColor : label.getColor()); holder.label.setText(label.getName()); holder.editor.setText(label.editedName != null ? label.editedName : label.getName()); } private void assignColor(ViewHolder holder, String colorString) { int color = Color.parseColor("#" + colorString); int textColor = UiUtils.textColorForBackground(mContext, color); holder.color.setBackgroundColor(color); holder.editor.setBackgroundColor(color); holder.customColorButton.setBackgroundColor(color); holder.customColorButton.setTextColor(textColor); holder.editor.setTextColor(textColor); holder.lastAssignedLabel.editedColor = colorString; } @Override public void onClick(View v) { View parent = (View) v.getParent(); if (parent.getId() == R.id.colors) { final ViewHolder holder = (ViewHolder) parent.getTag(); if (v.getId() == R.id.custom) { final String color = holder.lastAssignedLabel.editedColor; ColorPickerDialog dialog = new ColorPickerDialog(mContext, color, new OnColorChangedListener() { @Override public void colorChanged(String color) { assignColor(holder, color); } }); dialog.show(); } else { assignColor(holder, (String) v.getTag()); } } else { super.onClick(v); } } public static class ViewHolder extends RecyclerView.ViewHolder { private ViewHolder(View view) { super(view); color = view.findViewById(R.id.view_color); label = (StyleableTextView) view.findViewById(R.id.tv_title); editor = (EditText) view.findViewById(R.id.et_label); collapsedContainer = view.findViewById(R.id.collapsed); expandedContainer = view.findViewById(R.id.expanded); customColorButton = (TextView) view.findViewById(R.id.custom); } private EditableLabel lastAssignedLabel; private final View color; private final StyleableTextView label; private final EditText editor; private final TextView customColorButton; private final View collapsedContainer; private final View expandedContainer; } }