package org.openlmis.core.view.holder; import android.support.design.widget.TextInputLayout; import android.text.Editable; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import org.apache.commons.lang3.StringUtils; import org.openlmis.core.R; import org.openlmis.core.utils.SingleTextWatcher; import org.openlmis.core.utils.TextStyleUtil; import org.openlmis.core.view.viewmodel.AddDrugsToViaInventoryViewModel; import roboguice.inject.InjectView; public class AddDrugsToVIAViewHolder extends BaseViewHolder { @InjectView(R.id.tv_product_name) TextView productName; @InjectView(R.id.tv_short_code) TextView tvShortCode; @InjectView(R.id.touchArea_checkbox) LinearLayout taCheckbox; @InjectView(R.id.checkbox) CheckBox checkBox; @InjectView(R.id.action_panel) View actionPanel; @InjectView(R.id.tx_quantity) EditText txQuantity; @InjectView(R.id.action_divider) View actionDivider; @InjectView(R.id.ly_quantity) TextInputLayout lyQuantity; public AddDrugsToVIAViewHolder(View itemView) { super(itemView); txQuantity.setHint(R.string.label_hint_amount_requisition); taCheckbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { triggerCheckbox(); } }); } public void populate(String queryKeyWord, final AddDrugsToViaInventoryViewModel viewModel) { setItemViewListener(viewModel); checkBox.setChecked(viewModel.isChecked()); productName.setText(TextStyleUtil.getHighlightQueryKeyWord(queryKeyWord, viewModel.getStyledName())); tvShortCode.setText(TextStyleUtil.getHighlightQueryKeyWord(queryKeyWord, viewModel.getStyledUnit())); populateEditPanel(viewModel.getQuantity()); if (viewModel.isValid()) { lyQuantity.setErrorEnabled(false); } else { lyQuantity.setError(context.getResources().getString(R.string.msg_inventory_check_failed)); } } protected void setItemViewListener(final AddDrugsToViaInventoryViewModel viewModel) { final EditTextWatcher textWatcher = new EditTextWatcher(viewModel); txQuantity.removeTextChangedListener(textWatcher); checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { showEditPanel(View.VISIBLE); } else { showEditPanel(View.GONE); populateEditPanel(StringUtils.EMPTY); viewModel.setQuantity(StringUtils.EMPTY); } viewModel.setChecked(isChecked); } }); txQuantity.addTextChangedListener(textWatcher); } protected void populateEditPanel(String quantity) { txQuantity.setText(quantity); } protected void showEditPanel(int visible) { actionDivider.setVisibility(visible); actionPanel.setVisibility(visible); } private void triggerCheckbox() { if (checkBox.isChecked()) { checkBox.setChecked(false); } else { checkBox.setChecked(true); } } class EditTextWatcher extends SingleTextWatcher { private final AddDrugsToViaInventoryViewModel viewModel; public EditTextWatcher(AddDrugsToViaInventoryViewModel viewModel) { this.viewModel = viewModel; } @Override public void afterTextChanged(Editable editable) { viewModel.setQuantity(editable.toString()); } } }