Skip to content

Instantly share code, notes, and snippets.

@marcusedu
Created April 25, 2017 13:57
Show Gist options
  • Save marcusedu/e815f207791fe6f6dc8b0036b06dcc74 to your computer and use it in GitHub Desktop.
Save marcusedu/e815f207791fe6f6dc8b0036b06dcc74 to your computer and use it in GitHub Desktop.
package contract.manager.novocontrato;
import android.support.design.widget.TextInputLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.jakewharton.rxbinding2.view.RxView;
import com.jakewharton.rxbinding2.widget.RxTextView;
import java.util.HashMap;
import contract.manager.R;
import contract.manager.data.model.DocPerfil;
import contract.manager.data.model.PessoaPerfil;
import contract.manager.util.Campos;
class NovoContratoAdapter extends BaseExpandableListAdapter {
private ContratosPerfis contratosPerfis;
private ContratosManager contratosManager = ContratosManager.getInstance();
private NovoContratoContracts.Presenter presenter;
private HashMap<Integer, View> viewsMap = new HashMap<>();
private String TAG = "NovoContratoAdapter";
public NovoContratoAdapter(NovoContratoContracts.Presenter presenter, ContratosPerfis contratosPerfis) {
this.contratosPerfis = contratosPerfis;
this.presenter = presenter;
}
@Override
public int getGroupCount() {
if (contratosPerfis.getContratoAtivo() == null) return 0;
return contratosPerfis.getContratoAtivo().getPessoas().size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 1;
}
@Override
public Object getGroup(int groupPosition) {
final int[] position = {0};
final PessoaPerfil[] pessoaTemp = new PessoaPerfil[1];
contratosPerfis.getContratoAtivo().getPessoas()
.forEach((key, pessoa) -> {
if (groupPosition == position[0]) {
pessoaTemp[0] = pessoa;
}
position[0]++;
});
return pessoaTemp[0];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return getGroup(groupPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return groupPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View cabecalho;
GroupHolder groupHolder;
if (convertView == null) {
cabecalho = LayoutInflater.from(parent.getContext())
.inflate(R.layout.pessoa_cabecalho, parent, false);
groupHolder = new GroupHolder(cabecalho);
cabecalho.setTag(groupHolder);
} else {
cabecalho = convertView;
groupHolder = (GroupHolder) cabecalho.getTag();
}
groupHolder.setPessoa((PessoaPerfil) getGroup(groupPosition));
return groupHolder.v;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
View pessoa;
if (viewsMap.containsKey(getGroup(groupPosition).hashCode())) {
pessoa = viewsMap.get(getGroup(groupPosition).hashCode());
} else {
pessoa = LayoutInflater.from(parent.getContext()).inflate(R.layout.pessoa_layout, parent, false);
viewsMap.put(getGroup(groupPosition).hashCode(), pessoa);
new ItemHolder(pessoa).setTudo((PessoaPerfil) getGroup(groupPosition));
}
return pessoa;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
void setContratosPerfis(ContratosPerfis contratosPerfis) {
this.contratosPerfis = contratosPerfis;
}
private class GroupHolder {
final TextView tipo;
final ImageView icon;
final View v;
GroupHolder(View v) {
this.v = v;
tipo = (TextView) v.findViewById(R.id.pessoa_cabecalho_titulo);
icon = (ImageView) v.findViewById(R.id.pessoa_cabecalho_icon);
}
void setPessoa(PessoaPerfil p) {
tipo.setText(p.getTipo());
}
}
private class ItemHolder {
final LinearLayout campos;
final LinearLayout docs;
final View v;
PessoaPerfil pessoa;
ItemHolder(View v) {
this.v = v;
campos = (LinearLayout) v.findViewById(R.id.pessoa_item_campos);
docs = (LinearLayout) v.findViewById(R.id.pessoa_item_docs);
}
void setTudo(PessoaPerfil pessoa) {
this.pessoa = pessoa;
pessoa.getCampos()
.forEach((key, campo) -> campos.addView(getCampoView(campo)));
pessoa.getDocs()
.forEach((key, doc) -> docs.addView(getDocView(doc)));
}
private View getCampoView(String campo) {
TextInputLayout campoItem = (TextInputLayout)
LayoutInflater.from(v.getContext())
.inflate(R.layout.pessoa_campo, campos, false);
Campos utilCampos = new Campos(campo);
campoItem.getEditText().setInputType(utilCampos.getTipoCampo());
campoItem.setHint(utilCampos.getNomeCampo());
RxTextView.textChangeEvents(campoItem.getEditText())
.subscribe(e -> contratosManager.addOuAtualizaCampo(pessoa, utilCampos, e.text().toString()));
return campoItem;
}
private View getDocView(DocPerfil doc) {
View docView = LayoutInflater.from(v.getContext()).inflate(R.layout.pessoa_doc, docs, false);
((TextView) docView.findViewById(R.id.pessoa_doc_tipo)).setText(doc.getTipo());
RxView.clicks(docView.findViewById(R.id.pessoa_doc_imagem))
.subscribe(click -> presenter.tirarFotoDoc(pessoa, doc));
return docView;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment