package org.openlmis.core.view.holder; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.TextView; import org.openlmis.core.R; import org.openlmis.core.model.StockCard; import org.openlmis.core.utils.TextStyleUtil; import org.openlmis.core.view.viewmodel.InventoryViewModel; import org.openlmis.core.view.widget.InitialInventoryLotListView; import org.openlmis.core.view.widget.SingleClickButtonListener; import roboguice.inject.InjectView; public class InitialInventoryViewHolder extends BaseViewHolder { @InjectView(R.id.tv_product_name) TextView productName; @InjectView(R.id.tv_product_unit) TextView productUnit; @InjectView(R.id.checkbox) CheckBox checkBox; @InjectView(R.id.action_view_history) TextView tvHistoryAction; @InjectView(R.id.touchArea_checkbox) LinearLayout taCheckbox; @InjectView(R.id.view_lot_list) InitialInventoryLotListView lotListView; private InventoryViewModel viewModel; public InitialInventoryViewHolder(View itemView) { super(itemView); initView(); } private void initView() { taCheckbox.setOnClickListener(new SingleClickButtonListener() { @Override public void onSingleClick(View v) { checkBox.setChecked(!checkBox.isChecked()); } }); } public void populate(final InventoryViewModel inventoryViewModel, String queryKeyWord, ViewHistoryListener listener) { this.viewModel = inventoryViewModel; setUpLotListView(); resetCheckBox(); setUpCheckBox(); checkBox.setChecked(viewModel.isChecked()); productName.setText(TextStyleUtil.getHighlightQueryKeyWord(queryKeyWord, viewModel.getStyledName())); productUnit.setText(TextStyleUtil.getHighlightQueryKeyWord(queryKeyWord, viewModel.getStyleType())); initHistoryView(listener); } public void setUpLotListView() { lotListView.setUpdateCheckBoxListener(new InitialInventoryLotListView.UpdateCheckBoxListener() { @Override public void updateCheckBox() { checkBox.setEnabled(true); if (viewModel.getNewLotMovementViewModelList().isEmpty()) { checkBox.setChecked(false); } } }); lotListView.initLotListView(viewModel); } private void resetCheckBox() { checkBox.setEnabled(true); checkBox.setOnCheckedChangeListener(null); checkBox.setChecked(false); lotListView.setVisibility(View.GONE); } protected void setUpCheckBox() { checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { checkBox.setEnabled(false); checkedChangeAction(isChecked); } }); } private void checkedChangeAction(boolean isChecked) { if (isChecked && !viewModel.getProduct().isArchived()) { if (!viewModel.getNewLotMovementViewModelList().isEmpty()) { showAddNewLotPanel(View.VISIBLE); checkBox.setEnabled(true); viewModel.setChecked(true); } else if (lotListView.showAddLotDialogFragment()) { showAddNewLotPanel(View.VISIBLE); viewModel.setChecked(true); } else { checkBox.setEnabled(true); checkBox.setChecked(false); } } else { checkBox.setEnabled(true); showAddNewLotPanel(View.GONE); viewModel.getNewLotMovementViewModelList().clear(); lotListView.refreshNewLotList(); viewModel.setChecked(isChecked); } } private void initHistoryView(final ViewHistoryListener listener) { tvHistoryAction.setVisibility(viewModel.getProduct().isArchived() ? View.VISIBLE : View.GONE); tvHistoryAction.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { listener.viewHistory(viewModel.getStockCard()); } } }); } public void showAddNewLotPanel(int visible) { lotListView.setVisibility(visible); } public interface ViewHistoryListener { void viewHistory(StockCard stockCard); } }