Created
April 25, 2017 13:57
-
-
Save marcusedu/e815f207791fe6f6dc8b0036b06dcc74 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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